我正在玩Hadamard matrices的某些变体。我想生成满足这些要求的所有 n 位二进制字符串:
0
开头。例如,当 n = 4 时,这是我想要的列表。
0000
0011
0101
0110
您可以很容易地看到每两个不同的行都有汉明距离 n / 2 = 4/2 = 2 ,该列表也满足所有其他要求。
请注意,我想生成所有这样的字符串。在终止之前,我的算法可能只输出三个字符串0000
,0011
和0101
。此列表满足上述所有要求,但它错过了0110
。
感谢。
答案 0 :(得分:0)
回答问题1,
从一串n
零开始(我们称之为s0
)和一串n/2
零后跟n/2
1(称之为s1
} ),生成下一个排列(称之为p
):
scan string from right to left
replace first occurrence of "01" with "10"
(unless the first occurrence is at the string start)
move all "1"'s that are on the right of the "01" to the string end
return replaced string
使用置换生成顺序来记录添加到集合中的排列。如果xor
p
中设置的当前位数为n / 2的每个数字的位数为n / 2,请将p
添加到列表中;否则,如果xor
p
s1
{/ 1}}中设置的位数为n / 2且未记录p
,则使用{{1}开始新的集搜索},s0
;并且s1
仅作为xor测试的附加条件(因为主要搜索将检查所有排列,因此该集合不需要生成其他集合)。使用p
生成下一个排列。