找到n个长度为n的二进制代码,使得每对之间的距离为n / 2,其中n是偶数,如果可能的话?如何生成所有代码? 例如n = 4我们有1110,1101,1011,0111每对有距离2。 一对代码之间的距离意味着两个代码字中的不同位的数量。 例如1110和1101,只有最后两位不同,因此该对之间的距离为2。
答案 0 :(得分:0)
一种完全暴力的mathematica方法 - 不幸的是,这让我忘记了n>4
..
n = 4;
Select[ Subsets[Tuples[{0, 1}, {n}], {n}] ,
And @@ Flatten@
Outer[((# == n/2 || # == 0) &@Total@Abs@Subtract@##) & , # , #,
1 ] & ]
32种解决方案中的一些:
编辑,解释一下:
Tuples[{0, 1}, {n}]
提供所有2^n
个n位序列。
Subsets[ Tuples ,{n} ]
给出所有唯一的无序长度n组元组(18 = n = 4)
Select
从那些匹配criterea的集合中选择。
Outer
将测试应用于集合中的每一对(请注意我们== n/2 or 0
因为Outer
测试每个二进制文件对自己,自检产生零)
请注意,每个子集都可以重新排序n!
种方式,因此对于n=4
,如果您认为订单很重要,则应该有768个唯一解决方案。