可雜湊(hashable)物件

2021-09-27 00:07:58 字數 443 閱讀 2146

乙個可雜湊的物件必須滿足以下要求。

(1) 支援 hash() 函式,並且通過 __hash__() 方法所得到的雜湊值是不變的。

(2) 支援通過 __eq__() 方法來檢測相等性。

(3) 若 a == b 為真,則 hash(a) == hash(b) 也為真。

注意:所有由使用者自定義的物件預設都是可雜湊的,因為它們的雜湊值由id() 來獲取,而且它們都是不相等的。如果你實現了乙個類的 __eq__ 方法,並且希望它是可雜湊的,那麼它一定要有個恰當的 __hash__ 方法,保證在 a== b 為真的情況下 hash(a) == hash(b) 也必定為真。否則就會破壞恆定的雜湊表演算法,導致由這些物件所組成的字典和集合完全失去可靠性,這個後果是非常可怕的。另一方面,如果乙個含有自定義的 __eq__ 依賴的類處於可變的狀態,那就不要在這個類中實現 __hash__ 方法,因為它的例項是不可雜湊的。

Python學習之 雜湊表與可雜湊物件

十一 python 雜湊表與可雜湊物件 11.1 雜湊表 雜湊表 雜湊是從 hash 音譯過來的,雜湊表 hashtable 也叫做雜湊表。雜湊表是鍵值對的無序集合,其每個鍵都是唯一的,核心演算法是通過索引去查詢值,python 中的字典符合雜湊表結構,字典中每個鍵對應乙個值,my dict 雜湊是...

可修改的雜湊

如果在乙個字串中要找是否存在長度為n的回文串 可以manachar 但是更好打的方式是直接hash 可是,這個hash需要算o len 個長度為n的字串的hash值 如果暴力,已經到了o n 2 的級別 那麼考慮一下,如何簡化。計算hash的o n 是不能省的 那麼不難想到利用前面串的結果來巧算後面...

線性探測可再雜湊的雜湊

資料結構與演算法分析 c語言描述 第五章 分離鏈結雜湊表 從書上的 小改一下。插入的時候自動選擇是否再雜湊,所以insert要返回乙個hashtable。還有增加是否查抄成功。雖然可以通過返回 1來返回查詢失敗 hashquad.h typedef char elementtype ifndef h...