散列的定义及常用方法

书籍推荐

《大话数据结构》——https://www.geekschool.club/book/detail/20006

散列

散列又称为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

  • 负载因子

负 载 因 子 a = 散 列 表 中 已 有 的 数 据 项 散 列 表 中 基 础 存 储 区 能 容 纳 的 数 据 项 负载因子a = \frac {散列表中已有的数据项}{散列表中基础存储区能容纳的数据项} a=

  • 常用散列函数

    1. 数学分析法
    2. 折叠法
    3. 中平方和法
    4. 除余法
    5. 基数转换法
  • 冲突消解技术

冲突消解技术从实现上可分为内消解法和外消解法。

  • 内消解法:

内消解的基本方法称为开地址法,其基本思想是插入数据并发现冲突是,设法在基本存储区为需要插入的数据另行安排一个位置。于是设计了一种叫计算位置安排方式——探查方式
常用的探查方式有线性探查双散列探查

1.线性探查: D = 0 , 1 , 2 , 3 , 4 ⋅ ⋅ ⋅ D=0, 1, 2, 3, 4··· D=0,1,2,3,4
2.双散列探查: d i = i ∗ h 2 ( k e y ) d_i=i*h_2(key) di=ih2(key)

  • 外消解法:

外消解法一半需要借助外部存储区间解决冲突,重用的方法有溢出区法桶散列法

  • 溢出区法:

当插入关键码的散列位置没有数据时就直接插入,发生冲突时将相应数据和关键码一起顺序存入溢出区。对应检索和删除也是先找散列位置,如果数据与关键码不匹配,则去溢出区顺序检索,直到找到或检索完。

  • 桶散列法(拉链法):

散列表的每个元素只是一个引用域,饮用者一个保存实际数据的存储桶。拉链法中一个存储桶就是一个连表的头节点

拉链法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值