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

對於如下棋局:



