目录
2.开放定址法(open addressing hashing)
一.散列函数
1.关键字是整数
用关键字对表的大小取余,即 Key mod TaableSize 。 (表的大小应该选择素数)
2.关键字是字符串
- 把字符串中字符的ASCII码值加起来,然后对表的大小取余。(表的大小应该选择素数)
- (key[0]+27*key[1]+27*27*key[3])%TableSize
- (k[0]+32*k[1]+ 32*32*k[2] .... 32*32......32*k[n-1])%TableSize
二.冲突解决
1.分离链接发(separate chaining)
将散列到同一个值的所有元素保留到一个链表中。(装填因子应该接近于1)
2.开放定址法(open addressing hashing)
如果有冲突发生,那么就要超时选择另外的单元,直到找出空的单元地址。(装填因子不因该超过0.5)
hi(X)=(Hash(x)+F(i))modTableSize
- 线性探测法
F(i)=i
- 平方探测法
F(i)=i*i
- 双散列()
F(i)=i*hash2(X)
3.再散列
当表达到某一个装填因子(散列表中的元素个数同样散列表大小的比值)时,建立另外一个比原表大约大两倍表,扫描整个原始散列表,计算诶个元素的新的散列值并将其插入到新表中。
三.应用
1.对比
二叉查找树,应用在需要排序查找的应用之。平均时间界O(logn)
哈希表,应用在不需要考虑顺序的应用中。时间界O(1)
2.应用
- 符号表(symbol table):编译器使用散列表跟踪源代码中声明的变量。
- 变换表(transposition table):为游戏编制的程序中,当程序搜索游戏的不同的行时候,它跟踪通过计算基于位置的散列函数而看到的一些位置。
- 在线拼写检验程序,整个词典可以被预先散列,单词泽可以在常数时间内被检测。