查找和散列表

线性表查找

  • 顺序查找
  • 折半查找

散列表

顺序查找

[1,2,3,4,5],需要找出大于4的数,那就回从第一位开始比较,知道找出大于4的数
顺序查找不一定就是要求有序
等概率的情况,平均查找长度(n+1)/2

折半查找

找出1,[1,2,3,4,5,6] =>[1,2,3],[4,5,6]=>[1,2,3]=>[1]
在概率相等的情况:以2为底N的对数。

散列表

基本概念

散列表是一个有限连续的存储空间
存储位置与关键字的关系:H(key) (关键字)= P(存储位置)
不同的关键字也会出现同一个位置的情况

构造方法

除留余数法
H(key) = key%p:用关键字除于P,得到的余数就是散列地址。


数字分析法(要先知道关键字的集合) 提取关键字集合中分布比较均匀的几位作为散列地址

在这里插入图片描述


处理冲突的方法
线性探测法

[1,2,3,4,5,6,8] 当5和8%3的时候,地址都是2,那8就会(H(key)+d)%m i从1到无穷大,第一次解决冲突,那d就是1,第二次就是2。
会产生二次聚集,但散列表没有满之前,总能找到一个不发生冲突的地址

二次探测法

Hash(key) = (Hash(key) + d) % 11,其中d = 1^2, -1^2, 2^2, -2^2, 3^2,……,
可以避免二次聚集,但不能保证一定能找到不发生冲突的地址

伪随机探测法

假设随机生成数是5,那地址为(5+9)%11 = 3,插入序号为3的位置
可以避免二次聚集,但不能保证一定能找到不发生冲突的地址

链地址法

[19,14,23,1,68,20,84,27,55,11,10,78]%13,就会产生13个单链表(从0-13),而14.1.27.79是同义词,他们将构成一个单链表,并将链表的头指针放在序号为1的单链表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值