Data structures 哈希表与其他数据结构(如AVLTrees)的比较

Data structures 哈希表与其他数据结构(如AVLTrees)的比较,data-structures,hashtable,avl-tree,Data Structures,Hashtable,Avl Tree,我正在研究哈希表和AVLTree的复杂性。从理论上讲,在哈希表上插入和删除元素的复杂性为O(1),对于AVLTree O(log(n))(研究工作流的复杂性是数据结构上的元素数量),看到这个结果,哈希表似乎比avltree更好,但如果我们考虑到结构本身的大小以及计算给定键的哈希函数所需的时间,avltree不是更好吗?哈希表和AVL树的功能根本不同。简而言之,哈希表用于查找,而树结构用于搜索和遍历 通过哈希表,可以非常快速地检索与单个键关联的值。如果插入了一个键为“xqj57”的值,则可以快速检

我正在研究哈希表和AVLTree的复杂性。从理论上讲,在哈希表上插入和删除元素的复杂性为O(1),对于AVLTree O(log(n))(研究工作流的复杂性是数据结构上的元素数量),看到这个结果,哈希表似乎比avltree更好,但如果我们考虑到结构本身的大小以及计算给定键的哈希函数所需的时间,avltree不是更好吗?

哈希表和AVL树的功能根本不同。简而言之,哈希表用于查找,而树结构用于搜索和遍历

通过哈希表,可以非常快速地检索与单个键关联的值。如果插入了一个键为“xqj57”的值,则可以快速检索该值。如果没有插入“xqj57”,则查找将表明不存在此类记录。插入和查找都是O(1)操作

AVL树和类似的结构有利于按顺序存储东西。这允许您按排序顺序遍历结构,还允许您按顺序轻松检索键以“A”开头的所有记录,或获取键大于或等于“foo”的第一条记录等。插入和搜索是O(logn)操作。当然,遍历是O(n)

如果要按排序顺序遍历哈希表,必须先对其排序

与树结构相比,哈希表确实有一些额外的内存开销,但没有那么多

除非密钥非常长,或者哈希函数非常复杂,否则计算密钥的哈希值的成本比在树结构中查找某些内容所需的日志(n)密钥比较的成本要低


如果您只想快速插入和查找,那么很难打败哈希表。如果您想使用排序列表,那么哈希表肯定不是一种好方法。AVL树、红黑树、跳过列表或其他此类排序结构的性能会更好。

对于相当大的数据集,我无法想象O(log(n))算法会比O(1)算法更好,但为什么不试试呢?建议:创建一个比较二者的基准,并公布结果。@FoggyDay当然O(log(n))比O(1)差,但是哈希表的add操作需要哈希函数的结果,如果哈希函数具有comlexity O(n),则要用给定的键添加什么即使在实际添加元素时,直接将其添加到散列函数输出的位置,但对于大键(例如,一个包含200个字符的字符串),无论实际添加的是什么,它都不会比AVLTrees的添加操作慢,而AVLTrees的添加操作始终是O(log(n))?(我谈论的是总体执行时间,我可能使用了错误的复杂性符号)建议:创建一个比较两者的基准,然后发布您的results@Angelixus您忘记了,在搜索插入点时,可能需要对每个插入点进行最多200个字符的O(logn)字符串比较。每个字符串比较都是O(keylength)。使用散列,您可以进行一次O(keylength)散列代码计算。渐近分析并不能说明全部情况。