我正在研究哈希表和AVLTree的复杂性。从理论上讲,在哈希表上插入和删除元素的复杂度为O(1),对于AVLTree为O(log(n))(研究复杂度,工作流为数据结构上的元素数),看到此结果即可表似乎比AVLTree更好,但是如果考虑到结构本身的大小以及为给定键计算哈希函数所需的时间,AVLTree是否更好?
答案 0 :(得分:1)
哈希表和AVL树具有根本不同的功能。简而言之,哈希表用于查找,而树结构用于搜索和遍历。
哈希表使您可以非常快速地检索与各个键关联的值。如果您使用键“ xqj57”插入了一个值,则可以快速检索它。如果尚未插入“ xqj57”,则查找将表明不存在这样的记录。插入和查找都是O(1)操作。
AVL树和类似结构非常适合按排序顺序存储事物。这样一来,您就可以按排序顺序遍历结构,还可以轻松地按顺序检索所有键以“ A”开头的所有记录,或者获得键大于或等于“ foo”的第一条记录,等等。插入和搜索是O(log n)操作。遍历当然是O(n)。
如果要按排序顺序遍历哈希表,则必须先对其进行排序。
与树形结构相比,哈希表确实有一点额外的内存开销,但没有那么多。
除非键非常长,或者您的哈希函数确实很复杂,否则计算键的哈希值的成本比查找某项所需的log(n)键比较的成本便宜在树状结构中。
如果您只想快速插入和查找,那么很难击败哈希表。如果要使用排序列表,则绝对不能使用哈希表。 AVL树,红黑树,跳过列表或其他类似的排序结构将表现更好。