散列 Hashtable

目录

一.散列函数

1.关键字是整数

2.关键字是字符串

二.冲突解决

1.分离链接发(separate chaining)

2.开放定址法(open addressing hashing)

3.再散列

三.应用

1.对比

2.应用


一.散列函数

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):为游戏编制的程序中,当程序搜索游戏的不同的行时候,它跟踪通过计算基于位置的散列函数而看到的一些位置。
  • 在线拼写检验程序,整个词典可以被预先散列,单词泽可以在常数时间内被检测。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值