[英]Hashtable Implementation
我最近被問到'你將如何實施一個可憎的'。 我知道哈希算法是關鍵的,因為較少的沖突會帶來更好的WRT性能,但是應該使用什么算法/數據結構來為插入/刪除/查找提供分攤的常量時間{O(1)}?
哈希表有兩種主要可能性:
關於哈希表[在兩個解決方案中]的重要部分,為了允許機動化的O(1)插入/ del /查找 - 分配更大的表並在達到預定義的加載因子后重新散列。
編輯:復雜性analsis:
對於某些p < 1
假設負載因子為p
。
p
因此,數組訪問的平均值是: Sigma(i * p^(i-1) * (1-p)) for each i in [1,n]
這給出了: Sigma(i * p^(i-1) * (1-p)) = (1-p) * Sigma(i * p^(i-1)) <= (1-p) * 1/(p-1)^2 = 1-p = CONST
。 [看看Sigma(i * p ^(i-1))<1 /(p-1)^ 2在wolfram alpha中的正確性。 因此平均導致對陣列的恆定訪問次數。 另外:在達到加載因子后,您可能需要重新散列所有元素,從而導致對數組的O(n)
訪問。 這導致n * O(1)
ops [添加n個元素]和1 * O(n)
op [rehashing],因此得到: (n * O(1) + 1 * O(n)) / n = O(1)
機動時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.