哈希表

  哈希表是散列表:

        数据元素之间不是紧密连续的。如果我们构造一个查找表,是数据元素的存放位置和数据元素的关键字之间存在某种对应关系,则我们可以直接由数据元素的关键字得到该数据元素的存放位置,这样的查找表就是哈希表,我们把关键字和该数据元素的存放位置的之间的映射函数成为哈希函数。应此我们可以说哈希表是通过哈希函数来确定数据元素存放位置的一种特殊表结构。

       构造哈希表的方法是:设要存储的数据元素个数为N,设置一个长度为M(M>=n)的连续内存单元,分别以每一个数据元素的关键字Ki(0<=i<=N-1)为自变量,通过一个称为哈希函数的函数h(K)把Ki映射为内存单元的某个h(Ki),并把该数据元素存储在这个内存单元中。

     建立哈希表: 

       a={460,180,430,750,600,900}

      我们申请个内存单元为13个的单元数M,去哈希函数为取余数方法的哈希函数 h(K)=K mod M;

     则h(180)=11;h(750)=9;

数据在哈希表的存储映像为:

0 1 2 3 4 5 6 7 8 9 10 11 12
  430 600 900   460     541 750   180  

可以看出数据之间不是连续的而是有间隔的。

       如果M=11;

       则 h(460)=h(900)=9;这个时候会有冲突,成为哈希冲突,简单的去除冲突的方法可以使用h(K+D)=h(K);的方法来去除冲突。

     在建立哈希表的时候一般都会有冲突,就看怎么设计哈希函数减少冲突

   常用的哈希函数构造方法:

      除留余数法

           h(K) = K mod M;

      直接定址法:

           直接定址法是依据数据元素的关键字K本身或关键字加上某一个常量C作为哈希地址的方法h(K)=K+C;

       数字分析法:

         

哈希的使用:

     如果从一个很大的文件中去重可以使用哈希法来去重,因为可以根据值来查探内存单元是否已经被存储

posted on 2015-03-12 21:42  木子牛  阅读(286)  评论(0)    收藏  举报

导航