特殊二进制代码

时间:2015-09-09 16:44:23

标签: algorithm wolfram-mathematica adhoc hamming-distance

找到n个长度为n的二进制代码,使得每对之间的距离为n / 2,其中n是偶数,如果可能的话?如何生成所有代码? 例如n = 4我们有1110,1101,1011,0111每对有距离2。 一对代码之间的距离意味着两个代码字中的不同位的数量。 例如1110和1101,只有最后两位不同,因此该对之间的距离为2。

1 个答案:

答案 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种解决方案中的一些:

enter image description here

编辑,解释一下:  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个唯一解决方案。