14-2 雜湊函式設計

twisted-fate發表於2019-06-16

知識點
1 雜湊函式 得到的索引 分佈越均勻越好
所有型別都轉換為整形的雜湊函式設計:
2小範圍正整數直接用 , 負整數做偏移 -100~100 -> 0~200

3大整數的雜湊函式:取模 , 身份證號取後四位 = mod 10000 12343253255312056666 -> 6666 ,
4 mod1000000->056666 , 1205 是生日 , 05 部分取值為01~31 , 而雜湊空間為 00~99 , 造成了分佈不均勻
5 每個領域都有不同的雜湊函式設計 , 很難找到通用的設計
6 對身份證號取模沒有利用所有資訊( 資訊摘要的概念? ) , 因此更容易產生衝突 , 資訊越多越能接近唯一性 , 如用年月日區分 , 對比用省市區+年月日 , 更容易產生重複
7 模一個素數 , 更有效利用一個數字的所有資訊 , 數論
圖片
圖片

8 32浮點型在計算機中的表示 , 32 或 64 位的二進位制數 , 32 位的情況,單精度 從左邊起 , 第一位是符號位 , 2-9 共 8 位是 exponent , 指數位 , 後面 23 位是 fraction 小數位
9 64 位浮點型的表示 , 第一符號位 , 2-12 , 11 位指數位 , 後面是 52 位的小數位
10 浮點型直接當做整形 , 然後同上作雜湊
11 字串也轉成整型
12 166 也可以看成字串 110^2 + 610^1 + 610^0
13 英文字母可以看成 26 進位制 , code=c
26^4 + o*26^3 ...........
14 字串特別長的時候可能計算很慢 , 可以做變形減少計算次數

14-2 雜湊函式設計

15 字串特別長並且使用的進位制特別大的時候可能產生溢位 , 可以把取模移到每一個裡面

14-2 雜湊函式設計

16 字串雜湊函式解決方案

14-2 雜湊函式設計

17 複合型別 , 如類 , 將類中的屬性 , 如 Date { year,month,day} , 取出來同上面的字串一樣取雜湊

18 並不一定需要轉成整型處理 , 還有其他方法

19 雜湊函式設計原則 , 一致性 a 的雜湊值永遠是同一個 , 高效性, 計算速度快 , 均勻 , 分佈均勻

相關文章