計算哈希值,使用的哈希值,更新的哈希值,更廣泛的使用,
計算哈希值
佐布里斯特哈希開始隨機生成 一個板遊戲,即每一個可能的元素位串為一個片和一個位置(在象棋比賽中的每個組合,即是12片×64板位置,或14,如果一個國王,可能仍然城堡一個棋子,可以捕捉順便分別對待)。現在任何董事會的配置可以分成獨立的片/位置組件,這些組件映射到前面生成的隨機位串。最終佐布里斯特哈希計算結合那些使用按位異或位串。例如偽代碼盤棋:
恆定的指標 white_pawn:= 1 white_rook:= 2 #等。 black_king:= 12函式init_zobrist(): #填補表的隨機號碼/位串 表:=一個2維數組的大小為64×12 對於i從1到64:#循環在董事會,表示為一個線性陣列 對於j從1到12:#遍歷件表[I] [J] = random_bitstring()函式hash(板): H:= 0 i從1到64:#遍歷倉板 如果板[I] =空:J:=一塊板[I],在不斷的指數,列出以上H:= H XOR表[I] [J]。 返回ħ
使用的哈希值
如果位串足夠長的時間,不同的電路板位置幾乎肯定會散列成不同的值,但是長的位串需要更多的計算機資源比例來操縱。許多遊戲引擎存儲的哈希值換位表中,省略的位置信息本身完全能夠減少記憶體使用,並假設不會發生哈希衝突,或將極大地影響表的結果,如果他們這樣做。
佐布里斯特哈希是第一個已知的制表散列實例。其結果是一個明智的獨立哈希家庭。特別是,它是強普遍。
作為一個例子,在西洋棋中,每64平方可以在任何時候是空的,或者包含一個6個棋子,這是黑色或白色。也就是說,可以在每平方米1 +6×2 = 13個可能的狀態在任何時間。因此,一個需要產生最多為13×64 = 832個隨機的位串。給定的位置,得到它的的佐布里斯特哈希找出哪件是哪個廣場,並結合相關的位串在一起。
更新的哈希值
上面的偽代碼確實,不是每次計算哈希值整板,板的哈希值可以簡單地更新,通過異或位串(s)的立場已經改變,新異或位串的位置。例如,如果一個棋子在棋盤廣場是由車從另一個廣場取代,由此產生的位置將產生的異或現有的哈希位串:
'棋子在這個廣場,(異或典當在這個廣場) “車在這個廣場'(異或的車在這個廣場) “車源廣場'(異或車源廣場) “沒有源廣場(異或沒有在源廣場)。
這使得佐布里斯特散列非常有效的遍歷遊戲樹。
在計算機去,這種技術也被用來檢測superko。
更廣泛的使用
相同的方法已被用來識別在Monte Carlo模擬中的置換式合金配置,以便對已經計算出的狀態,以防止浪費的計算工作量。