建立乙個更好的雜湊函式,解決雜湊表衝突

2021-10-11 18:14:00 字數 391 閱讀 6384

雜湊函式

乙個表現良好的雜湊函式是由幾個方面構成的:插入和檢索元素的時間(即效能),當然也包括較低的衝突可能性。

// key 為 string

// return 乙個 hashcode

function

djb2hashcode

(key)

return hash %

1013

}

它包括初始化乙個hash變數並賦值為乙個質數(大多數實現都使用5381),然後迭代引數key(將hash與33相乘(用來當作乙個魔力數),並和當前迭代到的字元的ascii碼值相加。最後,我們將使用相加的和與另乙個隨機質數(比我們認為的雜湊表的大小要大——在本例中,我們認為雜湊表的大小為1000)相除的餘數。

教你從零開始寫乙個雜湊表 雜湊函式

在這一節,我們來編寫雜湊函式。我們選擇的雜湊函式應該具有 以下特性 我們使用的是常見的字串雜湊函式,偽 的表達如下 function hash string,a,num buckets hash 0 string len length string for i 0,1,string len hash...

乙個更好的CenterWindow 函式

pdlg centerwindow afxgetmainwnd centers pdlg against the main window?清單1。演示使用cwnd centerwindow 將對話方塊居中。然而,乙個問題向mfc郵件列表提出 最近被問到,我有乙個基於對話方塊的程式,使用者可以點選乙個...

教你從零開始寫乙個雜湊表 雜湊衝突

雜湊函式把乙個無窮大的輸入集合對映到乙個有限大小的輸出集合。不同的關鍵字可能會被對映到同乙個陣列下標,如此一來就導致了雜湊衝突。雜湊表必須實現解決衝突的方法。我們的雜湊表將使用開放位址法和再雜湊法。在桶索引衝突後,再雜湊法會使用兩個雜湊函式來計算鍵值對將要儲存的桶索引值。有關其他雜湊衝突的解決方法,...