gpt4 book ai didi

arrays - 恰好随机选择一次矩阵索引

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:42 24 4
gpt4 key购买 nike

我有一个 1 的矩阵(只是一个 2D 整数向量),我试图随机选择一个索引,以便我可以将 1 变成 0。我的目标是只选择矩阵的每个索引一次,这样在运行 for 循环后,迭代次数与索引的次数完全相同,矩阵将填充 0(0 实际上并不重要,替换 1 的数字和 1 本身是任意的)。

我目前的方法很慢。它一直运行一个 while 循环来检查每一次通过,看看是否还有任何 1 剩下。这显然效率低得令人难以置信,但我不确定如何为每个索引只执行一次并确保没有重复,以便我可以更改为 for 循环。任何建议都会非常有帮助!

最佳答案

只需生成矩阵索引的随机序列,如评论中提到的@Jonny 即可。然后遍历这个序列的每个元素。以下是我刚刚编写的 Java 实现,以防有帮助:

import java.util.Random;

public class Test {

public static void randomSelectMatrixIndex(int[][] matrix) {
int rows = matrix.length;
int cols = matrix[0].length;
int[] indices = new int[rows*cols];
System.out.println("Index array before shuffle: ");
for (int i=0; i<indices.length; i++) {
indices[i] = i;
System.out.print(i+" ");
}
System.out.println();
System.out.println();

shuffle(indices);

System.out.println("Index array after shuffle: ");
for (int j=0; j<indices.length; j++) {
System.out.print(indices[j]+" ");
matrix[indices[j]/cols][indices[j]%cols] = 0;
}
System.out.println();
System.out.println();
}

private static void shuffle(int[] indices) {
Random ran = new Random();
for (int i=indices.length; i>0; i--) {
int randomIndex = ran.nextInt(i);
int temp = indices[i-1];
indices[i-1] = indices[randomIndex];
indices[randomIndex] = temp;
}
}

private static void printMatrix(int[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}

public static void main(String[] args) throws Exception {

int[][] matrix = {{1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}};

System.out.println("Matrix before random select: ");
printMatrix(matrix);
System.out.println();

randomSelectMatrixIndex(matrix);

System.out.println("Matrix after random select: ");
printMatrix(matrix);
}

}

关于arrays - 恰好随机选择一次矩阵索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41575461/

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