采用散列技术实现设散列表长为14,散列函数是时,需要考虑的两个问题是什么和解决冲突

数据结构求 ASL 平均搜索长度 急
设设散列表长为14,散列函数是的长度m=13:散列函数为 H(K)=K mod m,给定的关键码序列为19、1、23、14、68、20、84、27、77、11,试画出用线性探查法解决冲突时所构造的设散列表长为14,散列函数是.并求出在等概率的情况下,这种方法的搜索成功时的平均搜索长度?

}

最常用的方法是除留余数法:
这個方法的关键是选取适当的p, 一般情况下可以选p为小于表长的最大质数。例如表长m=100, 可取p=97

选择一个 “好” 的散列函数可以在一定程度上减尐冲突,但在实际应用中很难完全避免发生冲突

1,开放地址法 (1)线性勘测法


线性探测法的优点是:只要设散列表长为14,散列函数是未填滿总能 找到一个不发生冲突的地址。缺点是:会产生 ”二次聚集“ 现象而二次探测法和伪随机探测法 的优点是:可以避免 “二次聚集“ 现象。缺点也很显然:不能保证一定找到不发生冲突的地址

2,链地址法 把具有相同散列地址的记录链在同一个单链表中称为同义词鏈表。


哈希表(设散列表长为14,散列函数是)的查找:

}

通过散列函数求出应放的位置后如果当前位置有值,则往后顺延 比如地址等于0时,在0上有值则尝试去放入1的地址中。依次往后顺延

在表中的成功查找平均长度

等於每一个地址上的冲突次数+1的总和除去总数组个数。

不在表中的查找平均长度的话

则通过散列函数算出地址后去查看地址上是否是自己,如果不是则往后顺延一直顺延到当前顺延地址值为空或者自己时方为结束。

如果第一种找不到空位置第二种也找不到空位置。除非設散列表长为14,散列函数是长度为4K+3形式的素数(4*1+3, 4*K+3)

实现中,存储的值为结构体(state,data)state用来存储当前位置的状态(空|| 删除 || 存在),删除时并鈈是真正删除,而是将状态设置为删除因为在查找的过程中如果直接删除会导致这个位置变为空,会影响到查找(要查找的元素在被删除元素的后面时碰到空会以为不存在表中)。而插入的话在下次找到该位置时,则判断该位置是否为空或者删除然后替换掉该位置數据。

通过第一个散列出来的数再丢到另一个设散列表长为14,散列函数是里再散列一次第二次散列出来的树不能为0 因为这样第二次散列就沒意义,没增加偏移值比较具有良好效果的形式是 p-第一个散列出来的值。

再散列的过程需要将原先的设散列表长为14,散列函数是的所有数偅新插入到现有扩大设散列表长为14,散列函数是中重新计算。不能直接复制

}

我要回帖

更多关于 设散列表长为14,散列函数是 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信