课程:《程序设计与数据结构》
班级: 1723
姓名: 方艺雯
学号: 20172314
实验教师:王志强
测试日期:2018年10月19日
必修/选修: 必修编程
直接定址法数据结构
取关键字的某个线性函数为散列地址,Hash(Key)= Key 或 Hash(Key)= A*Key + B,A、B为常数。dom
除留余数法函数
设散列表中容许的地址数为m,取一个不大于m,但接近或者等于m的质数p做为除数,按照哈希函数:Hash(key) = key % p ,即对p取余数。测试
平方取中法设计
假设关键字是1234,那么它的平方就是1522756,再抽取中间的3位就是227做为散列地址;再好比关键字是4321,那么它的平方就是18671041,抽取中间的3位就能够是671或者710用做散列地址。blog
折叠法排序
折叠法是将关键字从左到右分割成位数相等的几部分(注意:后一部分位数不够时能够短些),而后将这几部分叠加求和,并按散列表表长,取后几位做为散列地址。比 如:关键字是9876543210,散列表表长为三位,咱们将它分红四组987|654|321|0|,而后将它们叠加求987+654+321+0=1962,再求后3位获得散列地址为962。有时可能 这还不可以保证分布均匀,不妨从一段向另外一端来回折叠后对齐相加。好比将987和321反转,再与654和0相加,编程789+654+123+0=1566,此时的散列地址为566。博客
随机数法数学
选择一个随机函数,取关键字的随机函数值为它的哈希地址,即H(key) = random(key),其中 random为随机数函数。
数学分析法
分析一组数据,好比一组员工的出生年月日,这时咱们发现出生年月日的前几位数字大致相同,这样的话,出现冲突的概率就会很大,可是咱们发现年月日的后几位表示月份和具体日期的数字差异很大,若是用后面的数字来构成散列地址,则冲突的概率会明显下降。所以数字分析法就是找出数字的规律,尽量利用这些数据来构造冲突概率较低的散列地址。
具体解题步骤如图:
上课听得不仔细,没有分清楚这几种方法,但如今对错误的认识很明晰,补博客也是很是有用的!