计算机基础知识 - Hash

2018-09-27  本文已影响0人  HRocky

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换时一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单地说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

基本概念

性质

所有散列函数都有如下一个基本特征:如果两个散列值是不同的(根据同一函数),那么这两个散列值的原始输入也是不同的。这个特性是散列函数具有确定性的结果。但另一方面,散列函数的输入和输出不是一 一对应的,如果两个散列值相同,两个输入值很可能是相同的,但不绝对肯定二者一定相等(可能出现哈希碰撞)。输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。

查找性能分析

散列表的查找过程基本上和造表过程相同。一些关键码可通过散列函数转换的地址直接找到,另一些关键码在散列函数得到的地址上产生了冲突,需要按处理冲突的方法进行查找。在介绍的三种处理冲突的方法中,产生冲突后的查找仍然是给定值与关键码进行比较的过程。所以,对散列表查找效率的量度,依然用平均查找长度来衡量。

查找过程中,关键码的比较次数,取决于产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就低。因此,影响产生冲突多少的因数,也就是影响查找效率的因数。影响产生冲突多少有以下三个因数:

  1. 散列函数是否均匀;
  2. 处理冲突的方法;
  3. 散列表的装填因子。

散列表的装填因子定义为:α = 填入表中的元素个数/散列表的长度

α是散列表装满程度的标志因子。由于表长是定值,α与“填入表中的元素个数”成正比,所以,α越大,填入表中的元素较多,产生冲突的可能性就越大;α越小,填入表中的元素较少,产生冲突的可能性就越小。

实际上,散列表的平均查找长度是装填因子α的函数,只是不同处理冲突的方法有不同的函数。

上一篇下一篇

猜你喜欢

热点阅读