散列(数据结构与算法Python版)

本文是关于数据结构与算法Python版的学习笔记,重点介绍了散列函数的设计,包括折叠法、平方取中法和非数项的ASCII转换。同时讨论了散列冲突的解决方案,如开放定址法(线性探测、再散列)和数据项链chaining。
摘要由CSDN通过智能技术生成

在中国大学MOOC(慕课)学习了北京大学陈斌老师的数据结构与算法(python版),以下是学习笔记。

散列表中有多个“槽”(slot),用来保存数据项,每个槽都有唯一的名称,通过散列函数,将数据项放入特定的槽中,想要查找该数据项只需查找其在对应的槽中是否存在。
例如:一个包含了11个槽的空散列表,槽名称分别对应0~10,数据项54,26,33,17,77,31,通过散列函数 h(item) = item % 11,将其填入对应槽中。在该组数据项中33,77对11求余都是0,这里就存在一个散列冲突问题。
一个好的散列函数需要具备:冲突最少、计算难度低、充分分散数据项。
能够把任意给定数据组的每一个项都映射到不同槽中的散列函数称为完美散列函数。实现完美散列函数的一种方法是扩大散列表容量,大到所有可能出现的项都能占据到不同的槽,显然这种方法太浪费空间,并不适用。

散列函数设计

散列函数设计的核心是:不能成为存储过程和查找过程的计算负担

1.折叠法

将数据项按位分为若干段,再将几段数字相加,对散列表大小求余。
如:对电话号码62767255,两位两位的分成62 76 72 55四段,将四段相加再对散列表大小(11)求余。(62+76+72+55)%11 = 1,因此该电话号码62767255对应1号槽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值