生成汉明距离为n / 2的所有n位字符串

时间:2013-09-18 22:30:44

标签: string algorithm math combinatorics

我正在玩Hadamard matrices的某些变体。我想生成满足这些要求的所有 n 位二进制字符串:

  1. 您可以假设 n 是4的倍数。
  2. 第一个字符串是0 n
    是一个全0的字符串。
  3. 其余字符串按字母顺序排序。
    →0在1之前。
  4. 每两个不同的 n 位字符串都有Hamming distance n / 2
    →两个不同的 n - 位串恰好在 n / 2 位置同意,并且在 n / 2 位置上不一致。
  5. 由于上述条件,除第一个字符串外的每个字符串必须具有相同数量的0和1。
    →除第一个字符串以外的每个字符串必须具有 n / 2 那些和 n / 2 零。
  6. 更新)所有 n 位字符串都以0开头。
  7. 例如,当 n = 4 时,这是我想要的列表。

      

    0000
      0011
      0101
      0110

    您可以很容易地看到每两个不同的行都有汉明距离 n / 2 = 4/2 = 2 ,该列表也满足所有其他要求。

    请注意,我想生成所有这样的字符串。在终止之前,我的算法可能只输出三个字符串000000110101。此列表满足上述所有要求,但它错过了0110

    1. 生成此类集合的好方法是什么?
      首选python伪代码,但任何高级描述都可以。
    2. 给定 n 最大个字符串数是多少?
      例如,当 n = 4 时,这些字符串的最大数量恰好是4.我想知道是否可以为此上限提供任何封闭形式的解决方案。
    3. 感谢。

1 个答案:

答案 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生成下一个排列。