首页| 论坛| 消息
主题:盘点哈希竞猜游戏常见的几种哈希算法和规则
崇拜心中的爱发表于 2022-06-28 12:45
  本文简略的介绍了一番实际应用中的用于查找的Hash算法(16hash.vip)。Hash算法除了应用于这个方面以外,另外一个著名的应用是巨型字符串匹配(这时的Hash算法叫做:rollinghash,因为它必须可以滚动的计算)。设计一个真正好的Hash算法并不是一件容易的事情。作为应用来说,选择一个适合的算法是最重要的。
  
  基于高速访问设计的哈希表也是一种典型的“空间换时间”方法。顾名思义,数据结构可以理解为一个线性表,但其中的元素不是密切排列的,但可能会有间隙。
  哈希表基于关键码值;并直接访问数据结构。也就是说,它通过将键值映射到表中的某个位置来访问记录,以加快查找速度。这个映射函数称为哈希函数,存储记录的数组称为哈希表。
  Hash函数还有另外的含义。实际中的Hash函数是指把一个大范围映射到一个小范围。把大范围映射到一个小范围的目的往往是为了节省空间,使得数据容易保存。除此以外,Hash函数往往应用于查找上。所以,在考虑使用Hash函数之前,需要明白它的几个限制:
  1.Hash的主要原理就是把大范围映射到小范围;所以,你输入的实际值的个数必须和小范围相当或者比它更小。不然冲突就会很多。
  2.由于Hash逼近单向函数;所以,你可以用它来对数据进行加密。
  3.不同的应用对Hash函数有着不同的要求;比如,用于加密的Hash函数主要考虑它和单项函数的差距,而用于查找的Hash函数主要考虑它映射到小范围的冲突率。
  应用于加密的Hash函数已经探讨过太多了,在作者的博客里面有更详细的介绍。所以,本文只探讨用于查找的Hash函数。
  Hash函数应用的主要对象是数组(比如,字符串),而其目标一般是一个int类型。以下我们都按照这种方式来说明。
  
  哈希函数可以使数据序列的访问过程更加快速精确。通过哈希函数,可以更慢地定位数据元素:
  1直接寻址方法:以关键性字的值或关键性字的线性函数作为哈希地址。一、即H(key)=key或H(key)=a?key+b,其中A和B是常数(这种散列函数称为自函数)
  2数值分析方法:在分析一组数据时,例如一组员工的出生日期,我们发现出生日期的后几个数字大致相同。在这种情况之下,发生冲突的可能性将非常大。然而,我们发现出生日期的最终几位数字表示月份和详细日期间存在很大差异。如果使用下列数字形成哈希地址,则冲突的概率将明显降低。因此,数值分析的方法是找出数字规则,并尽可能余地使用这些数据来构造冲突概率较低的哈希地址
  3。平方取中法:以关键性字平方后的下方数字作为哈希地址
  4。折叠方法:将关键性字切成数个数字相近的部分。最终一部分可以有有所不同的数字,然后将这些部分的叠加和(去掉进位)作为哈希地址
  5。随机数法:选择一个随机函数,将关键性字的随机值作为哈希地址,常用于关键性字长度有所不同的情况
  6。除留余数法:将关键性字的余数除以不大于哈希表长度m的数字P作为哈希地址。即H(key)=keyMODp,p
回帖(0):

全部回帖(0)»
最新回帖
收藏本帖
发新帖