二进制矩阵初始化算法

时间:2017-11-08 20:27:09

标签: algorithm matrix binary initialization

我必须使用 0的 1的来初始化矩阵(大小 Nx(N-1)),每次放置a 0 (或 1 )位于[ i j ]位置, 1 (或 0 )也放置在矩阵中,位于[ k j ]位置,其中 k 是一个与 i 不同的随机行(请注意该列是相同的。)

要满足的条件是同一行中连续 0 1 不能超过2个。

因此,下一个矩阵将无效:

0 1 1

1 1 1

1 0 1

0 1 1

这个有效:

0 1 1

1 0 0

1 1 0

0 0 1

关于如何实现此初始化的任何想法?假设矩阵以 -1的开头。

1 个答案:

答案 0 :(得分:0)

首先,对于存在这样的矩阵(每个(i,j)元组具有唯一的相反(k,j)元组),N必须是2的倍数。

第1步创建完全随机(N / 2)*(N-1)矩阵。

第2步更正此矩阵中的错误,以便每一行都没有错误。使用以下算法:

for row in matrix:
    for i in range(0, len(row) - 2):
        if row[i] == row[i + 1] == row[i + 2]:
            row[i + 2] = 1 if row[i + 2] == 0 else 0 

第3步对于每一行,按顺序(也称为N / 2)追加反行。

for row_index in range(N // 2):
    row = matrix[row_index]
    new_row = [0 if x == 1 else 1 for x in row]
    matrix.append(new_row)

步骤4 对于每个(i,j)在[0,N)中生成ap,用(p,j)交换(i,j)并查看它是否与行中的3相矛盾模式,如果是的话,交换它们。