只是为了实践(而不是作为一个家庭作业),我一直在试图解决这个问题(CLRS,第3版,运动11.2-6):从链式散列表中有效地选取一个随机元素?
在哈希表假设我们有存储N个按键大小为m,其中 通过链接解决了碰撞,并且我们知道每个链的长度,包括最长链的长度L.描述从散列表中的密钥 中随机一致地选择一个密钥并在期望的时间O(L *(1 + m/n))中返回它的过程 。
我到目前为止认为每个密钥返回的概率是1/n。如果我们试图得到1到n之间的一个随机值x,并尝试按照先按桶排序然后沿着桶中的链找到第x个键,然后用O(m)通过去找到正确的桶通过逐个桶和O(L)时间来获得链中的正确密钥。
你的问题在哪里? – outis 2011-12-25 12:08:20
最坏的情况是O(mn)用于查找相关项目,但是预期时间(如问题所述)为每个O(1 + m/n),并且将为O(L *(m/n + 1))他们全部。 – 2011-12-25 12:13:37
如何存储长度信息?我在想,如果一个桶里有所有的元素,其余的都是零,那么你甚至无法比O(n)时间更快地找到那个桶。是否还有其他关于元素位置的信息? – templatetypedef 2011-12-25 17:03:49