我想在继续之前提到我已经看过其他问题,在本网站以及其他网站上询问同样的事情。我希望我能得到一个很好的答案,因为我的目标是双重的:如何创建一个散列表
- 首先,我想了解如何创建一个哈希表。
- 其次,我发现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.
这是比较粗俗,但我仍然在“这是什么”的阶段。忍受着我。
还有别的吗?我错过了什么或者做错了什么?
由于
看起来不错,有点。散列值索引到一个固定数组中,每个数组元素是一个实际值列表。 –