1. 程式人生 > >hash函式的選擇

hash函式的選擇

        哈稀函式按照定義可以實現一個偽隨機數生成器(PRNG),從這個角度可以得到一個公認的結論:雜湊函式之間效能的比較可以通過比較其在偽隨機生成方面的比較來衡量。

       一般來說,對任意一類的資料存在一個理論上完美的雜湊函式。這個完美的雜湊函式定義是沒有發生任何碰撞,這意味著沒有出現重複的雜湊值。在現實中它很難找到一個完美的雜湊雜湊函式,而且這種完美函式的趨近變種在實際應用中的作用是相當有限的。在實踐中人們普遍認識到,一個完美雜湊的雜湊函式,就是在一個特定的資料集上產生的的碰撞最少雜湊的函式。
       我們所能做的就是通過試錯方法來找到滿足我們要求的雜湊函式。可以從下面兩個角度來選擇雜湊函式:
1.資料分佈


       一個衡量的措施是考慮一個雜湊函式是否能將一組資料的雜湊值進行很好的分佈。要進行這種分析,需要知道碰撞的雜湊值的個數,如果用連結串列來處理碰撞,則可以分析連結串列的平均長度,也可以分析雜湊值的分組數目。
2.雜湊函式的效率
       另個一個衡量的標準是雜湊函式得到雜湊值的效率。通常,包含雜湊函式的演算法的演算法複雜度都假設為O(1),這就是為什麼在雜湊表中搜索資料的時間複雜度會被認為是"平均為O(1)的複雜度",而在另外一些常用的資料結構,比如圖(通常被實現為紅黑樹),則被認為是O(logn)的複雜度。
       一個好的雜湊函式必須在理論上非常的快、穩定並且是可確定的。通常雜湊函式不可能達到O(1)的複雜度,但是雜湊函式在字串雜湊的線性的搜尋中確實是非常快的,並且通常雜湊函式的物件是較小的主鍵識別符號,這樣整個過程應該是非常快的,並且在某種程度上是穩定的。
       在這篇文章中介紹的雜湊函式被稱為簡單的雜湊函式。它們通常用於雜湊(雜湊字串)資料。它們被用來產生一種在諸如雜湊表的關聯容器使用的key。這些雜湊函式不是密碼安全的,很容易通過顛倒和組合不同資料的方式產生完全相同的雜湊值。

https://www.cnblogs.com/youngerchina/p/5624453.html