python hash
在 python3 中hash
help(hash)Help?on?built-in?function?hash?in?module?builtins:hash(obj,?/)Return?the?hash?value?for?the?given?object.#返回給定對象的哈希值Two?objects?that?compare?equal?must?also?have?the?same?hash?value,?but?thereverse?is?not?necessarily?true.#兩個比較相等的對象也必須有相同的散列值,但是逆轉不一定是正確的。????Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的輸入(又叫做預映射, pre-p_w_picpath),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。
????一個典型的空間換時間的算法,根據哈希出來的關鍵字進行快速的查詢
構造方法:
????① 直接尋址法
????????取關鍵字或關鍵字的某個線性函數值為散列地址。即H(key)=key或H(key) = a·key + b,
????????其中a和b為常數(這種散列函數叫做自身函數)
????② 數字分析法
????????分析一組數據的某些特征,比如,比如在學校里用學生的年齡來作為標識的話,會有很大
????????的沖突率,如果利用學生的學號作為標識的話,沖突率就會大大下降,因此數字分析就是
????????找出這些特征的規律,盡可能利用這些數據來構成沖突幾率較低的散列地址
????③ 平方取中法
????????先平方 后取中 生成散列地址
????④ 折疊法
????????均勻分割 分別取和 生成散列地址
????⑤ 隨機數法
????????選擇一隨機函數,取關鍵字的隨機值作為散列地址,通常用于關鍵字長度不同的場合。
????⑥ 除留余數法
????????取關鍵字被某個不大于散列表表長m的數p除后所得的余數為散列地址。即 H(key) =?
????????key MOD p, p<=m。不僅可以對關鍵字直接取模,也可在折疊、平方取中等運算之后取模。
????????對p的選擇很重要,一般取素數或m,若p選的不好,容易產生同義詞。
處理沖突的方法
? ?① 開放尋址法:Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)為散列函數,m為散列表長,
????di為增量序列,可有下列三種取法:? ?
????1).di=1,2,3,…,m-1,稱線性探測再散列;
????2). di=1^2,(-1)^2,2^2,(-2)^2,(3)^2,…,±(k)^2,(k<=m/2)稱二次探測再散列;
????3). di=偽隨機數序列,稱偽隨機探測再散列。
????② 再散列法:Hi=RHi(key),i=1,2,…,k RHi均是不同的散列函數,即在同義詞產生地址沖突
????? 時計算另一個散列函數地址,直到沖突不再發生,這種方法不易產生“聚集”,但增加了計
??????算時間。
????③ 鏈地址法(拉鏈法)
????④ 建立一個公共溢出區
轉載于:https://blog.51cto.com/zj734627415/1931913
總結
以上是生活随笔為你收集整理的python hash的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 社交系统/社群系统ThinkSNS+ a
- 下一篇: 2017-6-3 jQuery 事件