哈希表中的冲突处理
Collision Handling in a hash table
我正在尝试创建一个哈希表来确定需要插入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
的值就会受到其位置的影响。
同时阅读碰撞解决方案。
相关文章:
- 如何处理冲突的函数和变量名称?
- 为合约指定冲突处理程序
- 0x0F50DF58:0xC0000005:访问冲突读取位置0x0047CA04时未处理的异常
- 引发未经处理的异常:写入访问冲突. bunnies_array 0x5CB3CBA
- 引发未经处理的异常:简单 C++ 程序中的读取访问冲突,动态增加数组长度以存储数字
- 错误 : 异常 : 引发未处理的异常: 读取访问冲突.0xDDDDDDDD临时温度
- 如何处理标头名称与标准库标头冲突,但不更改文件名?
- 是否有具有用户定义的冲突处理程序的 std::唯一样式库算法
- 实验室中0x6BE20E11 (ucrtbased.dll) 的未处理异常.exe: 0xC0000005:访问冲突读取
- 接收不一致的访问冲突,处理队列
- 引发未经处理的异常:读取访问冲突。这>字符串被0x1C6F112
- 视觉C++ Battle4锡安项目 引发未处理的异常:读取访问冲突.**这**是空的.发生
- 如何修复<程序名称>中的"<内存位置>未处理的异常。Visual Studio 2017 中的访问冲突写入位置<内存位置>"
- ***读取位置*******的访问冲突处出现未处理的异常
- 未处理的异常..访问冲突写入位置
- 在 DirectXGame.exe 中0x00B84CD6出现未经处理的异常:0xC0000005:访问冲突读取位置0x
- 存储类对象的C++模板链表-未处理的异常访问冲突读取位置
- 并行处理冲突对
- std::unordered_map如何处理冲突
- 在c++中使用unordered_map实现哈希表并处理冲突