哈希表中的冲突处理

Collision Handling in a hash table

本文关键字:处理 冲突 哈希表      更新时间:2023-10-16

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

通常每个哈希表条目都是一个链表,所以冲突都在列表中。。。散列是为了加快搜索到冲突列表的速度。

正如您所说,冲突是哈希函数没有考虑字符顺序的结果。为了解决这个问题,一个简单的方法是将(int)temp乘以(i + 1),这样temp的值就会受到其位置的影响。

同时阅读碰撞解决方案。