(五)算法与数据结构|“散列表”结构

本文介绍了散列表的基本概念,包括通过散列函数将键转化为散列值,强调了散列函数的设计要求及冲突解决方法。讨论了开放寻址法和链表法的优缺点,并提及了高级设计要求,特别是针对散列表碰撞攻击的考虑。
摘要由CSDN通过智能技术生成

散列表和数组有一个相同的特性——按下标随机访问。散列表是数组的一种扩展,由数组演化而来。
散列表的下标叫键(key)关键字。通过散列函数(也叫哈希函数、hash函数)把键转化为元素,得到的结果叫散列值(value)(也叫哈希值、hash值)。

hash(key)==>value
散列函数基本设计要求
  • 散列函数计算得到的散列值为非负整数。因为散列值用来作为下标随机访问散列表。
  • 若key1 = key2,则hash(key1) = hash(key2)
  • 若key1 != key2,则hash(key1) != hash(key2)。实际上,达成这个条件几乎不可能,午饭避免因为散列值的数值范围有限(如:1到2^32)造成的散列冲突问题。如果达成这个条件,那么计算散列值要特别的大,则计算散列耗时太多不值得。
散列冲突问题解决

负载因子=散列值个数/散列表容量,负载因子大小和散列冲突数量成正比。
解决方法分2类:开放寻址法链表法

  • 开放寻址法:
    思想: 若出现散列冲突,则重新探测一个空间位置。
    重新探测方式有:线性探测(即探测散列冲突出现位置的下面第一个空间位置有没有散列值)、二次探测&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值