hash算法原理詳解

http://www.javashuo.com/article/p-zqzjocdh-dt.html函數

能夠將幾種方法聯合起來使用,好比先變基,再摺疊或平方取中等等,只要散列均勻,就能夠隨意拼湊。spa

  • 直接定址法:

  • 數字分析法:

    • 取數據元素關鍵字中某些取值較均勻的數字位做爲哈希地址的方法
    • 例2,要構造一個數據元素個數n=80,哈希長度m=100的哈希表。.net

      • 不失通常性,咱們這裏只給出其中8個關鍵字進行分析,8個關鍵字以下所示:blog

        • K1=61317602      K2=61326875      K3=62739628      K4=61343634字符串

        • K5=62706815      K6=62774638      K7=61381262      K8=61394220get

      •  此法適於:能預先估計出全體關鍵字的每一位上各類數字出現的頻度。原理

  • 摺疊法:

    • 將關鍵字分割成位數相同的幾部分(最後一部分的位數能夠不一樣),而後取這幾部分的疊加和(捨去進位),這方法稱爲摺疊法。
    • 這種方法適用於:
      • 關鍵字位數較多,並且關鍵字中每一位上數字分佈大體均勻的狀況。
  • 平方取中法:

    • 先取關鍵字的平方,而後根據可以使用空間的大小,選取平方數是中間幾位爲哈希地址
    • 原理是經過取平方擴大差異,平方值的中間幾位和這個數的每一位都相關,
      • 則對不一樣的關鍵字獲得的哈希函數值不易產生衝突,
      • 由此產生的哈希地址也較爲均勻
    • 此法適於:關鍵字中的每一位都有某些數字重複出現頻度很高的現象
  • 減去法

    • 減去法是數據的鍵值減去一個特定的數值以求得數據存儲的位置。
  • 基數轉換法

    •   將十進制數X看做其餘進制,
    • 好比十三進制,再按照十三進制數轉換成十進制數,提取其中若干爲做爲X的哈希值。
    • 通常取大於原來基數的數做爲轉換的基數,而且兩個基數應該是互素的
  • 除留餘數法:

    • 理論研究代表,除留餘數法的模p取不大於表長且最接近表長m素數時效果最好
  • 隨機數法:

    •  此法適於:對長度不等的關鍵字構造哈希函數。
  • 隨機乘數法

  • 字符串數值哈希法

  • 旋轉法

    • 對於類似度高的數據,倒過來就很均勻了
相關文章
相關標籤/搜索