哈希表(散列表)c语言

冲突:对不同的关键字可能得到同一哈希地址,即key1≠key2面f(key1)=f(key2)这种现象称冲突(collision)。具有相同函数值的关键词对该哈希函数来说称作同义词(synonym)。

一 哈希函数

(1)除留余数法(K%P P一般情况下取小于表长的最大素数 表长是100则p取97 若表长是25则p取23)
(2)数字分析法
(3)平方取中法
(4)直接定址法

二 解决冲突的方法

(1)开放定址法(1.线性探测法 +1 +2 +3… 2.二次探测法 +12 -12 +22 -22)

(2) 再哈希法(增加了不算的时间 不容易产生聚集现象)
(3)
设散列表的地址区间为0-17,散列函数为H(K)=K mod 17 (k%17)。采用线性探测法处理冲突,并将关键字序列26,25,72,38,8,18,59依次存储到散列表中。为采用线性探测法处理冲突,请画出它们对应的哈希表?求平均查找长度?
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
18 72 38 59 25 26 8

H(26)=26%17=9
H(25)=25%17=8

H(72)=72%17=4

H(38)=38%17=4 (冲突)
H(38)=(38+1)%17=5

H(8)=8%17=8(冲突)
H(8)=(8+1)%17=9(冲突)
H(8)=(8+2)%17=10

H(18)=18%17=1

H(59)=59%11=4(冲突)
H(59)=(59+1)%11=5(冲突)
H(59)=(59+2)%11=6(冲突)

平均查找长度=(1+1+1+2+3+1+3)/7=12/7

设散列表的地址区间为0-17,散列函数为H(K)=K mod 17 (k%17)。采用线性探测法处理冲突,并将关键字序列26,25,72,38,8,18,59依次存储到散列表中。为采用二次探测法处理冲突,请画出它们对应的哈希表?求平均查找长度?

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
18 72 38 8 25 26 1 59

H(26)=26%17=9

H(25)=25%17=8

H(72)=72%17=4

H(38)=38%17=4 (冲突)
H(38)=(38+12)=39%17=5

H(8)=8%17=8(冲突)
H(8)=(8+12)=9%17=9(冲突)
H(8)=(8-12)=7%17=7

H(18)=18%17=1

H(59)=59%17=8(冲突)
H(59)=(59+12)=60%17=9(冲突)
H(59)=(59-12)=58%17=7(冲突)
H(59)=(59+22)=63%17=12

ASL 平均查找长度=(1+1+1+2+3+1+4)/7=13/7

装填因子:反映哈希表的装满程度 <=1
= 表中装入的记录数/哈希表的总长度
= 1 – 表中未装入的记录数/哈希表的总长度

影响平均查找长度的因素有哪些?

1 哈希函数
2 处理冲突方法
3装填因子

装填因子的值越大 发生冲突的可能性越大
装填因子的值越小 发生冲突的可能性越小
注意:冲突只能减小 不可以避免

喜欢的话就点赞吧,我只是一个小小萌新,感谢各位大佬支持

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林城步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值