【发布时间】:2011-12-21 15:46:38
【问题描述】:
我正在阅读一本教科书,它正在谈论哈希列表的实现。关于哈希表,教科书上说:
如果元素在数组位置之间均匀分布,则链接方法工作得相当好,这种情况称为统一散列。例如,如果我们有 300 名员工和 100 的数组大小,并且如果每个职位大约有 3 名员工,给予或接受一名员工,那么我们仍然有一个在 O(1) 时间内运行的搜索函数,因为没有更多需要进行 3 或 4 次比较才能找到合适的员工。
这是假设我们有一个包含 100 个元素的数组(用于哈希表),每个元素都是一个链表,用作该元素的冲突列表。
所以,我的问题是:
本段指出,给定我们的散列算法,我们可以在 O(1) 时间内搜索一个元素。不过这让我很吃惊,因为你的数据集越大,你的碰撞就越多,你的碰撞列表也会越大。因此,冲突列表会随着 (n = # 个员工) 缓慢增长,但它们会增长。
我原以为这会使算法在 O(n) 时间内起作用。
是否根据散列函数和预期的数据集大小对散列表进行不同的分析?大多数算法分析似乎不包括指定的数据集大小,因此在这种情况下,哈希表分析包括 (n) 的有限大小,这让我感到惊讶和困惑。
【问题讨论】: