gpt4 book ai didi

java - 在不克隆数组的情况下在二维数组的列中搜索数字的最佳性能

转载 作者:行者123 更新时间:2023-12-04 03:38:55 25 4
gpt4 key购买 nike

我正在尝试在二维数组的特定列中搜索数字。我尝试了几种不同的方法,并希望在 Java 8 中使用流。但是,它似乎并不是最佳性能。想知道是否有人可以提供帮助?

boolean isInColumn(int col, int number) {
return IntStream.range(0, board.length)
.map(i -> board[i][col])
.filter(num -> num == number )
.findFirst()
.isPresent();
}

也在尝试在一个 block 中搜索。有什么提示吗?

public boolean isInBlock(int row, int col, int number) {
int r = row - row % 3;
int c = col - col % 3;

for (int i = r; i < r + 3; i++) {
for (int j = c; j < c + 3; j++) {
if (board[i][j] == number)
return true;
}
}
return false;
}

输入数据是下面的数组。

public static int[][] PUZZLE = {
{9,0,0,1,0,0,0,0,5},
{0,0,5,0,9,0,2,0,1},
{8,0,0,0,4,0,0,0,0},
{0,0,0,0,8,0,0,0,0},
{0,0,0,7,0,0,0,0,0},
{0,0,0,0,2,6,0,0,9},
{2,0,0,3,0,0,0,0,6},
{0,0,0,2,0,0,9,0,0},
{0,0,1,9,0,4,5,7,0},
};

最佳答案

这个'stream'版本似乎有点优化,但我认为在数组中搜索命中总是用老式的方式更快,参见Java performance tutorial – How fast are the Java 8 streams?

boolean isInColumn(int col, int number) {
return IntStream.range(0, board.length)
.anyMatch(i -> (board[i][col] == number) );
}

我对并行流进行了短暂的尝试,但开销使情况变得更糟。我认为如果操作不是简单的比较,情况会有所不同...

如果它只是关于数独求解器/生成器的速度,也许你根本不应该循环,而是在一个返回语句中写下 9 个条件

return board[0,col] == number || board[1,col] == number ...

关于java - 在不克隆数组的情况下在二维数组的列中搜索数字的最佳性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66417902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com