数据结构 第九章 词典(散列 桶排序)

散列原理

不同数据结构访问方式:循秩、循位置、循关键码、循值

VectorListBSTHashing
rankposikeyvalue

实例:设置散列表长M,实现key到value的映射,此处的hash函数为key对M取模余
1.散列表长M应与value总数N同阶同次
2. λ = N / M \lambda=N/M λ=N/M称为填装因子
在这里插入图片描述
在这里插入图片描述

散列函数

M-A-D法

multiply-add-divide
在这里插入图片描述

平方取中

取key的平方的中间若干位,构成地址,这样原关键码中的各位对于最终的散列有平均的影响力
在这里插入图片描述

折叠汇总

在这里插入图片描述

伪随机数法

在这里插入图片描述

排解冲突

多槽位法

将每个桶划分为多个槽位
在这里插入图片描述

独立链

每个桶存放一个指针,冲突的词条组成列表
在这里插入图片描述

开放定址

为每个桶都事先约定好若干备用桶, 每一个桶单元面向所有词条开放,所有桶单元位于一段连续的内存空间
开放寻址法的核心思想是,如果出现了散列冲突,我们就重新探测一个空闲的位置
线性试探:当我们往散列表中插入数据时,如果某个数据经过散列函数之后,存储的位置已经被占用了,我们就从当前位置开始,依次往后查找(到底后从头开始),看是否有空闲位置,直到找到为止。
查找数据:通过散列函数求出要查找元素的键值对应的散列值,然后比较数组中下标为散列值的元素和要查找的元素是否相等,若相等,则说明就是我们要查找的元素;否则,就顺序往后依次查找。如果遍历到数组的空闲位置还未找到,就说明要查找的元素并没有在散列表中。

桶排序(计数排序)

复杂度为O(n+M),n为排序数量,M为元素取值范围,很多情况下M=O(n)或者远小于n,则可在线性复杂度O(n)内完成排序
思想:划分多个范围相同的子区间,每个桶为一个子区间,将各个元素分配到各个桶中,每个子区间再排序,最后合并
子区间(桶)个数自己决定
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值