我正在使用标准的 alpha beta 修剪搜索算法构建黑白棋播放器。我正在尝试添加一个转换表来存储搜索树中先前计算的节点。所以我需要散列一个表示游戏板(状态)的二维数组并为其存储一个值。
我想不出比双 for 循环迭代我的数组并将所有值相加并乘以偏移量以获得唯一哈希值更好的方法。
@Override
public int hashCode() {
if (dirtyHash) {
int hash = 0;
for (int i = 0; i < Board.SIZEX; i++)
for (int j = 0; j < Board.SIZEY; j++)
hash += board[i][j] * (i + Board.SIZEY * j);
hashValue = hash;
dirtyHash = false;
}
return hashValue;
}
我怀疑一定有更聪明的方法来做到这一点?有人有什么想法吗?
最佳答案
我会使用 java 标准库作为第一次尝试:
int hash = java.util.Arrays.deepHashCode( board );
一旦一切正常,分析您的整个应用程序,检查哈希码计算是否真的是性能瓶颈。
关于java - 二维数组的快速散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6718749/