Zobrist哈希(Zobrist hashing)是一種專門針對棋類游戲而提出來的編碼方式,以其發明者 Albert L.Zobrist 的名字命名。
Zobrist 哈希通過一種特殊的置換表,也就是對棋盤上每一位置的各個可能狀態賦予一個編碼索引值,來實現在極低沖突率的前提下在一個整型數據上對棋盤進行編碼。
其編碼步驟描述如下:
-
將棋盤分為最小單位(如果將9X9圍棋盤分為81個交叉點),求出每個單位上不同狀態數(如圍棋盤上的1個交叉點有3個狀態)。
-
為每個單位上的每種狀態生成一個一定范圍內(如64位整數)隨機數。
-
對於特定的棋局,將每個單位上的狀態對應的隨機數作異或運算,所得即為哈希值。
用Zobrist哈希為棋局狀態編碼至少具備兩個優點:
-
當隨機數的范圍足夠大時,不同的棋局產生哈希沖突的概率非常小,在實際應用中通常可以忽略。
-
在棋局進行過程中,不必每次重新開始計算棋局的哈希值,只需計算棋局狀態發生改變的部分。
參考:
