hash

                                                                      Hash

1.       什么是hash

压缩映射

优点:哈希表使用了适度的时间和空间来在这两个极端之间找到了平衡。

2.       相关概念

散列表=哈希表;  散列函数=哈希函数;

3.       单向

它是一种单向函数是“非对称”的,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。

4.       哈希查找的两个步骤

[1]     使用哈希函数将被查找的键转换为数组的索引。

[2]     处理哈希碰撞冲突。

5.       常用的希哈函数

博客:https://blog.csdn.net/tanggao1314/article/details/51457585

[1]     直接定址法:线性函数。

优点:简单。

缺点:造成空间大量的浪费。

[2]     数字分析法:分析关键字集中的全体,并从中提取分布均匀的若干位或它们的组合作为地址。

适用范围:所有关键字值已知。

[3]     折叠法:移位叠加/边界叠加。

适用范围:关键字的数字位数特别多。

[4]     平方取中法(常用):这个方法是先取关键字的平方,然后根据可使用空间的大小,选取平方数是中间几位为哈希地址。

优点:扩大差别。

适用范围:关键字中的每一位都有某些数字重复出现频度很高的现象。

[5]     除留余数法:理论研究表明,除数最好为素数。

6.       哈希冲突解决办法

[1]     开放定址法(再散列法):当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1... 直到找出一个不冲突的哈希地址pi。

Hi=(H(key)+di)% m   i=1,2,…,n

a)        线性探测再散列di=1,2,3,…,m-1

b)        二次探测再散列di=1^2,-1^2,2^2,-2^2,…,k^2,-k^2

c)        伪随机探测再散列di=伪随机数序列。

线性探测再散列的优点是:只要哈希表不满,就一定能找到一个不冲突的哈希地址,而二次探测再散列和伪随机探测再散列则不一定。

[2]     再哈希法: 这种方法是同时构造多个不同的哈希函数

Hi=RH1(key)  i=1,2,…,k

当哈希地址Hi=RH1(key)发生冲突时,再计算Hi=RH2(key)……,直到冲突不再产生。这种方法不易产生聚集,但增加了计算时间。

[3]     链地址法:这种方法的基本思想是将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行插入和删除的情况。(平均查找长度 ASL=a*1+b*2+.../n)

[4]     建立公共溢出区:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表

posted @ 2019-08-20 22:18  行走的算法  阅读(313)  评论(0编辑  收藏  举报