在Skiena's book of algorithm design中,假设哈希表可以有最多m
个桶,并且元素总数为n
,则会出现以下更糟糕的案例时间复杂性:
搜索:O(n)
接班人:O(n + m)
为什么两者不同?找不到继承者也会涉及搜索下一个元素吗?
答案 0 :(得分:5)
Hashing以破坏秩序为代价实现了恒定时间搜索。当我搜索一个元素时,我将其哈希(O(1)
)并在最坏的情况下查看所选的桶(O(n)
,如果我线性扫描,因为所有其他桶可能都是空的。)
当我想要一个给定的元素之后的下一个元素时,我不能保证它将在同一个桶中。事实上,我根本不知道它在哪里。由于我不知道接班人是什么,我不能哈希它找到它的桶。相反,我被迫查看每个桶(O(m)
。)
如果我在扫描铲斗时按顺序探测物品,我最终也会在物品数量(O(n)
)中完成线性工作。这导致总复杂度为O(n + m)
。