我正在尝试创建一个哈希表来确定需要插入lexime(String)的索引。哈希函数和表工作正常,但我面临的问题是回文和具有相同字符集的字符串。如果表中有一个字符串,则说“nab”,如果用户输入另一个字符串“ban”,则新的字符串将替换表中的字符串。
这是我目前正在使用的示例代码。
String lexime;
int token; //This determines the index in the table
String hashTable[20];
cin >> lexime;
token=hash(lexime);
hashTable[token]=lexime;
int function hash(String lex){
int token=0;
int length=lex.size();
for (int i=0;i<length;i++){
char temp=lex[i];
token+=(int)temp;
}
return token%20;
}
答案 0 :(得分:2)
通常每个哈希表条目都是一个链表,因此您的冲突都在列表中...哈希是为了加速搜索到冲突列表。
答案 1 :(得分:0)
正如你所说,碰撞是你的散列函数的结果,不考虑字符的顺序。要解决此问题,一种简单的方法是将(int)temp
乘以(i + 1)
,以使temp
的值受其位置影响。
同时阅读collision resolution。