【发布时间】:2012-01-27 14:29:48
【问题描述】:
只是为了练习(而不是作为家庭作业)我一直在尝试解决这个问题(CLRS,第 3 版,练习 11.2-6):
假设我们在大小为 m 的哈希表中存储了 n 个键,其中 通过链接解决冲突,并且我们知道每个冲突的长度 链,包括最长链的长度 L。描述一个 从密钥中随机均匀地选择一个密钥的过程 在哈希表中并在预期时间 O(L * (1 + m/n)) 内返回它。
到目前为止,我认为每个键被返回的概率是 1/n。如果我们尝试获取一个介于 1 到 n 之间的随机值 x,并尝试先按桶排序,然后沿着桶中的链依次找到第 x 个键,则需要 O(m) 才能找到正确的桶通过桶一个接一个和 O(L) 时间来获得链中的正确密钥。
【问题讨论】:
-
最坏的情况是 O(mn) 用于查找相关项目,但每个项目的预期时间(如问题所述)为 O(1+m/n) 并且将为 O(L*(m /n+1)) 对于所有这些。
-
长度信息是如何存储的?我在想,如果一个桶包含所有元素而其余元素为零,那么您甚至找不到比 O(n) 时间快的桶。还有其他关于元素位置的信息吗?
标签: algorithm data-structures random hashtable sampling