【发布时间】:2018-11-23 00:17:11
【问题描述】:
我正在研究 Hash Table 和 AVLTree 的复杂性。理论上,在 Hash Tables 上插入和删除元素的复杂度是 O(1),对于 AVLTree O(log(n))(研究工作流的复杂性是数据结构上的元素数量),看到这个结果 Hash表似乎比 AVLTrees 更好,但如果我们考虑到结构本身的大小和计算给定键的散列函数所需的时间,难道 AVLTrees 不是更好吗?
【问题讨论】:
-
对于相当大的数据集,我无法想象 O(log(n)) 算法会比 O(1) 算法更好 - 但你为什么不试试呢?建议:创建一个比较两者的基准,并发布您的结果。
-
@FoggyDay 当然 O(log(n)) 比 O(1) 最差,但是哈希表的添加操作需要散列函数的结果才能使用给定添加的内容键,如果散列函数具有复杂性 O(n),即使在实际添加元素时,您直接将其添加到散列函数输出的位置,对于大键(例如,包含 200 个字符的字符串)不会是比 AVLTrees 的添加操作慢,无论您实际添加什么,它总是 O(log(n))? (我谈论的是总体执行时间,我可能使用了错误的复杂性表示法)
-
建议:创建一个比较两者的基准,并发布您的结果
-
@Angelixus 您忘记了在搜索插入点时,您可能需要对最多 200 个字符的 O(log n) 字符串进行比较。每个字符串比较都是 O(keylength)。使用散列,您可以进行一次 O(keylength) 散列码计算。渐近分析并不能说明全部情况。
标签: data-structures hashtable avl-tree