POSTGRESQL 中用到的哈希算法解读(jung)

来源:互联网 发布:网络被骗了去哪里报警 编辑:程序博客网 时间:2024/06/15 06:07

哈希算法简介


1、哈希概念:

    在线性表、树等数据结构中,数据的记录在结构中的相对位置是随机的,记录的关键字之间的不存在确定的关系。基于这类结构的数据查找是建立在比较的基础之上,因此查找的效率依赖于查找过程中比较的次数。理想情况下,哈希表的记录位置和关键字之间存在着确定的关系,不需要经过任何的比较,一次存取就能够找到所查询的记录。查找的效率为O(1).


2、哈希函数的构造:

    直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a·key + b,其中a和b为常数。

    

        


3、冲突处理技术:    

    因为实际的存储空间有限,所以系统没有申请包含所有关键值数目的空间。在压缩的空间范围内,必然会存在两个关键的字映射到同一空间上,这就是所谓的“碰撞”。在postgresql中解决碰撞的方法是链接法(chaining)。

    

   (一)链接法(chaining)

    如上图所以,理想情况下,每一个关键字对应的实际数据只有一个,如果在关键字6 上产生冲突,采用链接法来解决的话,结果是 6 后面跟着一个链表的数据结构,每一个元素都映射到关键字6上。 


   链接发性能分析:

   简单一致散列(simple uniform hashing):任何元素散列到m个槽中的每一个的可能性是相同的,且与其他的元素已经散列到什么位置上是独立无关的;

   装填因子(load factor)a = n/m ,即一个链中平均存储的元素数目;

   定理1:对每一个用链接技术来解决碰撞的散列表,在简单一致散列的假设下,一次不成功查找的期望时间是O(1+a).

    证明:根据简单一致散列的假设,任何尚未被存储到表中的关键字都是等可能地散列到任何一个槽中,因此查找不成功的情况就是只查找到某一链表的末尾。因此查找的时间是和链表的平均长度有关的。而链表的平均长度是n/m,即装填因子大小。

   定理2:对每一个用链接技术来解决碰撞的散列表,在简单一致散列的假设下,平均情况下一次成功查找的期望时间是O(1+a).

   证明:1、首先引入指示器随机变量的概念:给定一个样本空间S和事件A,则A的指示器随机变量为 I(A) ,  I(A) = 1 事件A发生; I(A) = 0 事件A不发生;则E(I(A)) = P(A)
        2、设xi 为第 i 个插入的元素,xj 为第 j  个插入的元素,(j>=i+1)Xij 表示第i个元素和第j个元素映射到相同的槽事件,I(Xij)为Xij的指示器随机变量。则I(Xij) = 1 事件Xij发生,否则I(Xij) = 0 事件Xij不发生;
          因为每一个新插入的元素都是位于链表的最前端,所以可以通过统计I(Xij)来指示xi前有多少个元素,从而统计出查找的时间。然后将所有元素的查找时间进行平均化处理,得出平均情况下成功查找的期望时间。设槽位数为 m,链表元素个数为n
          
a=n/m.所求期望查找次数为
                                                                                                                                                              

                                                                                                                                                                                                                                                                                     

 

 

          因此 期望时间为O(1+a)

 
                                                                           

 

                               
                                  

                                                                                 

                  



原创粉丝点击