勵志

勵志人生知識庫

hash值生成

Hash值生成是通過計算函式將難以比較的字元串或者其他類型的數據映射成一個整數。最常用的就是將a~z的字元串映射成0-25的整數,通常映射成1-26,因為這樣方便計算。這個計算過程是將字元串出現的字母都取一遍然後去當成一個26進制算,這樣得到的hash值發生衝突的機率就比較低,因為轉換為的數一定是一個唯一值。例如要計算abc的值,那就是(123)26=1*26^2+2*26^1+3,這個計算出來的數就是hash值。Hash值是通過一個f(hash)計算出一個整數,然後當查找一個數據或者字元串的時候就將計算出來的整數進行對比,只用看整數相不相等就可以,而不用去暴力O(n),如果是要對比n個數那就是O(n^2)。所以,hash值就是為查找算法,提供一個優秀的O(1)複雜度的解決方案。另外,hash值在加密問題里也很重要,通過一種不可知的hash算法將hash值計算出來然後校驗也是一種套用方式。同時,hash在快取機制的處理上也很優秀。Hash把任意長度的輸入,通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來唯一的確定輸入值。