哈希表中的冲突处理

时间:2013-08-14 16:26:06

标签: c++ hashtable

我正在尝试创建一个哈希表来确定需要插入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;
}

2 个答案:

答案 0 :(得分:2)

通常每个哈希表条目都是一个链表,因此您的冲突都在列表中...哈希是为了加速搜索到冲突列表。

答案 1 :(得分:0)

正如你所说,碰撞是你的散列函数的结果,不考虑字符的顺序。要解决此问题,一种简单的方法是将(int)temp乘以(i + 1),以使temp的值受其位置影响。

同时阅读collision resolution