只是爲了實踐(而不是作爲一個家庭作業),我一直在試圖解決這個問題(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