定義:將任意長度的二進位制串對映為固定長度的二進位制串,這個對映規則就是雜湊演算法
雜湊值:通過原始資料對映得到的二進位制串。
優秀的雜湊函式的幾點要求:
從雜湊值不能反向推導出原始資料
對輸入資料敏感,原始資料的微弱改變都會使得雜湊值很大的變化
雜湊衝突概率盡量小
雜湊演算法的執行效率盡量高效
為什麼雜湊演算法無法做到零衝突?
雜湊演算法產生的雜湊值的長度是固定並且有限的。比如 md5,雜湊值是固定的 128 位的二進位制串,能夠表示的資料是有限的,但是我們要雜湊的資料是無窮的,必然會存在雜湊值相同的情況。
這應該是雜湊演算法應用裡讓人最先想到的。最常用於加密的雜湊演算法是 md5 和 sha。
上乙個筆記中說到,雜湊函式是設計乙個雜湊表的關鍵。不過相對雜湊演算法的其他應用,雜湊函式對於演算法衝突的要求低很多,只要衝突不是很嚴重,我們可以通過開放定址法或鍊錶法解決。
而在 torrent 檔案中,就包含了各個檔案塊的指紋值(sha1 的 hash 值),這些檔案塊一旦遭到篡改,根據要求2 可知,hash 值發生了劇烈變化,這個值和種子檔案中的進行對比就可以直到檔案塊不完整或遭到篡改。
現在網際網路上海量的資料和海量的使用者,我們為了提高資料的讀寫能力,都是用分布式來儲存資料。但是我們如何決定那個資料放到那個機器上?這就用到了雜湊演算法。
雜湊演算法的應用還有很多,以後了解到其他的有趣的應用再記錄。
《演算法筆記》雜湊
給出n個整數,在給出m個數,問這m個數中的每個數是否在n個數 現過 例如 n 5,m 3 n m 後者中只有7和2在n個整數 現過。思想 用空間換時間的方法。include using namespace std const int maxn 10010 bool hashtable maxn 表示...
演算法導論11(雜湊表)
11.1 直接定址表 struct node node directaddresssearch node t,int k void directaddressinsert node t,node x void directaddressdelete node t,node x 11.2 雜湊表 通過...
4 2雜湊 演算法筆記
4.2.1雜湊的定義與整數雜湊 1 雜湊 可以解決什麼問題?有兩個集合,查詢乙個集合是否在另乙個集合 現過。直觀的作法是遍歷兩個陣列,看是否有相等的。對於每乙個x 陣列1 都遍歷一遍陣列2。作法 用空間換時間,即設定一乙個 bool型陣列hashtable 100010 其中hashtable x ...