java - 二维数组的快速散列

标签 java algorithm

我正在使用标准的 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/

相关文章:

java - 编译 AutoValue 库示例项目时出现问题

java - Android 上的 SQLite 错误

c++ - 这个检测循环链表的函数的时间复杂度是多少?

java - 游戏开发中的几种敌人 Action

java - Java中模式匹配中的Stackoverflow

algorithm - 根据一些外部值生成分布

javascript - 通过几种不同的方式进行音译

algorithm - 在二进制搜索实现中出现编译错误

algorithm - circle-AABB 包含测试

java - 一编辑距离