我想在繼續之前提到我已經看過其他問題,在本網站以及其他網站上詢問同樣的事情。我希望我能得到一個很好的答案,因爲我的目標是雙重的:如何創建一個散列表
- 首先,我想了解如何創建一個哈希表。
- 其次,我發現Stack Overflow上的很多答案傾向於假設對某個主題的某種程度的知識,而這個主題經常不存在,特別是對於較新的類型。話雖如此,我希望編輯我的主要信息,以便在我自己弄清楚的情況下,更深入地解釋這一過程。
到主過程:
正如我理解他們到目前爲止,哈希表是列出的陣列(或類似的數據結構),該希望,最佳,具有少碰撞以儘可能地保持它被稱讚的O(1)複雜性。以下是我的當前進程:
所以我的第一步是建立一個指針數組:
Elem ** table;
table = new Elem*[size];//size is the desired size of the array
我的第二個步驟是創建一個散列函數(一個非常簡單的一個)。
int hashed = 0;
hashed = (atoi(name.c_str()) + id) % size;
//name is a std string, and id is a large integer. Size is the size of the array.
我的第三個步驟是創建一些檢測碰撞,這是目前在我的部分。
下面是一些僞代碼:
while(table[hashedValue] != empty)
hashedValue++
else
put in the list at that index.
這是比較粗俗,但我仍然在「這是什麼」的階段。忍受着我。
還有別的嗎?我錯過了什麼或者做錯了什麼?
由於
看起來不錯,有點。散列值索引到一個固定數組中,每個數組元素是一個實際值列表。 –