java - 使二维数组不等式检查更快

标签 java arrays performance for-loop compare

我在学校 Al 项目工作,一切都很好,但有点慢。
在我的项目中,我重写了 equals 方法。

@Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        } else if (obj instanceof map) {
            map m = (map) obj;
            for (int i = 0; i < mapSize; i++) {
                for (int j = 0; j < mapSize; j++) {
                    if (m.board[i][j] != board[i][j])
                        return false;
                }
            }
        }
        return true;
    } 

我发现如果我以交叉方式编写 for 循环来检查数组的前半部分,80% 的时间会在前半部分通过,剩下的 20% 我会在之后检查。所以我认为它的工作速度会快 50%

 for (int i = 0; i < mapSize; i++) {
                for (int j = i%2 ; j < mapSize; j+=2) {
                    if (m.board[i][j] != board[i][j])
                        return false;
                }
            }

for (int i = 0; i < mapSize; i++) {
                    for (int j = (i+1)%2 ; j < mapSize; j+=2) {
                        if (m.board[i][j] != board[i][j])
                            return false;
                    }
                }

在划分 for 循环和几次测试之后,它似乎变得越来越慢,我不知道为什么。为什么花费太多时间以及如何让它更快
提前致谢

最佳答案

从理论角度来看,不可能在小于 O(n*m) 的时间内比较两个二维数组,其中 n = 行数,m = 列数。

但是,在您的情况下,可以跟踪您正在使用的“板”,并且假设它们一开始是相同的,则只需要跟踪在每个板上执行的操作,直到操作将其中一个板与其他板分开更改为止。

关于java - 使二维数组不等式检查更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49805098/

相关文章:

java - 如何检查(获取)我当前的 fragment 索引?安卓

java - 为什么 SBT 想要在已经安装的情况下获取 org.scala-sbt?

c - 误解传递给 C 中函数的数组指针

java - 使用插入排序、选择排序和归并排序进行排序

java - 如何提高效率

java - 带 mvc 和自动配置的 Spring Boot

java - 安卓 "Loaded time zone names for en in __ms."

javascript - 将字符串格式的数组转换为 JavaScript 数组

postgresql - 为什么有时 postgresql 更新查询这么慢,即使有索引

javascript - 如何跳过一些 Javascript 事件?