我有NxN
布尔矩阵,其中所有元素都有初始状态false
bool[][] matrix = GetMatrix(N);
在循环的每一步中,我想row i, column j
在所有单元格中随机均匀地选择一个单元格 ( ) false
,并将其设置为true
直到某些条件发生。
使用哪种方法?我有这两种方式。
- 从 中创建一个
NxN
数组0...(NxN-1)
,使用均匀洗牌算法进行洗牌,而不是从该数组中依次取出第 i 个元素并设置矩阵 [i/N][i%N]。
使用O(N^2)
额外的内存,初始化需要O(N^2)
时间
第二个
- 生成随机
i
,0...(N^2-1)
如果 (i/N, i%N) 在矩阵中设置,重复随机生成直到创建未设置的元素。
这种方式不使用任何额外的内存,但我很难估计性能......这可能是一种情况,当设置除一个之外的所有元素并且随机重复很多次寻找空闲单元格时?我是对的,只要随机理论上均匀工作,这种情况就不应该经常发生吗?