【发布时间】:2012-05-21 01:11:06
【问题描述】:
在Skiena's book of algorithm design 中,假设哈希表可以有最大的m 桶并且元素总数为n,观察到以下更坏的情况时间复杂度:
搜索:O(n)
继任者:O(n + m)
为什么两者不同?寻找后继者在某种程度上不涉及搜索下一个元素吗?
【问题讨论】:
标签: algorithm hashtable big-o time-complexity
在Skiena's book of algorithm design 中,假设哈希表可以有最大的m 桶并且元素总数为n,观察到以下更坏的情况时间复杂度:
搜索:O(n)
继任者:O(n + m)
为什么两者不同?寻找后继者在某种程度上不涉及搜索下一个元素吗?
【问题讨论】:
标签: algorithm hashtable big-o time-complexity
散列以破坏顺序为代价实现恒定时间搜索。当我搜索一个元素时,我对它进行哈希处理 (O(1)) 并查看选择的存储桶(如果我线性扫描,最坏的情况是O(n),因为所有其他存储桶可能都是空的。)
当我想要给定元素之后的下一个元素时,我无法保证它会在同一个存储桶中。事实上,我根本不知道它在哪里。由于我还不知道继任者是什么,因此我无法对它进行散列以找到它的存储桶。相反,我不得不查看每个存储桶 (O(m).)
如果我在扫描存储桶时按顺序探测项目,我最终也会对项目数量进行线性工作 (O(n))。这导致总复杂度为O(n + m)。
【讨论】: