散列学习 (三)

拉链法:将大小为M的数组中的每个元素都指向一个链表,链表中每个节点都存储了散列值为该元素的索引的键值对。
基本思想:选择足够大的M,使得所有链表都尽可能短以保证高效查找。
步骤:
1)、根据散列值找到对应链表;
2)、在链表中顺序查找响应的键。
实现方法:
方法1:使用原始链表数据类型进行扩展
方法2:采用一般性策略实现:为M个元素分别构建符号表来保存散列到这里的键。

命题K:在一张含有M条链表和N个键的散列表中,任意一条链表中的键的数量均在N/M的常数因子范围内的概率无限
趋向于1。

性质L:在一张含有M条链表和N个键的散列表中,未命中查找和插入操作所需要的比较次数为~N/M。

散列表大小:
实现基于拉链法的散列表时,目标是选择合适的数组大小M,即不会因为空链表浪费大量内存,也不会因为链表太长
而在查找上浪费太多时间。而拉链法的一个好处是这不是关键性的选择。
如果存入的键多余预期,查找所需时间只会比选择更大的数组稍长;
如果存入的键少于预期,虽有空间浪费但查找会非常快。
内存不紧张时,可选择一个足够大的M,使查找需要的时间变为常数;
内存紧张时,选择尽量大的M仍能将性能提高M倍。
另一种方法是:动态调整数组大小以保持短小的链表。
散列的主要目的:均匀的将键散布开来,计算散列后键的顺序性信息就丢失了。因而散列都不适合进行与顺序有关的查找
拉链法的散列表实现简单,在键的顺序并不重要的应用中,它可能是最快也是应用最广泛的符号表实现。

内存使用:
基于拉链法的散列表                            N个元素所需内存为 48N+32M
基于线性探测的散列表                        N个元素所需内存在 32N到128N之间
各种二叉查找树                                    N个元素所需内存为 56N
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值