【问题标题】:Generating all n-bit strings whose hamming distance is n/2生成所有汉明距离为 n/2 的 n 位字符串
【发布时间】:2013-09-23 20:56:18
【问题描述】:

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

  1. 您可以假设 n 是 4 的倍数。
  2. 第一个字符串是 0n
    → 一个全为 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 开头。

例如,这是我在 n=4 时想要的列表。

0000
0011
0101
0110

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

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

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

谢谢。

【问题讨论】:

  • 这些列表不是唯一的。例如,这里有 3 个满足您条件的其他列表:{0000,0110,1010,1100}、{0000,0011,1001,1010}、{0000,0101,1001,1100}。您还想生成所有此类列表吗?
  • @Matt 哎呀。我忘了提。所有n位字符串都以0开头。那么我认为它保证只存在一个这样的列表。听起来合理吗?
  • 你能发布一个 n = 8 的例子吗?
  • 我相信添加要求编号 6 会使列表对于 n = 4 是唯一的,但对于 n = 8 则不是。例如,{00000000, 00001111, 00110011, 00111100, 01010101, 01011010, 01100110, 01101001}{00000000. 00001111, 00110101, 00111010, 01010011, 01011100, 01100110, 01101001}
  • 我将删除限制编号 6,并添加问题 3:对于给定的n,存在多少个最大集合?

标签: string algorithm math combinatorics


【解决方案1】:

回答问题 1,

从一串n 零开始(我们称之为s0)和一串n/2 零,后跟n/2 1(称之为s1),生成下一个排列(称之为@ 987654326@):

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

使用排列生成顺序来记录添加到集合中的排列。如果xoring p中设置的位数与当前设置的每个数为n/2,则将p添加到列表中;否则,如果xoringps1中设置的位数为n/2且p尚未记录,则使用s0s1开始新的集合搜索;和p 仅作为异或测试的附加条件(由于主搜索将检查所有排列,因此该集合不需要生成其他集合)。使用p 生成下一个排列。

【讨论】:

  • 你怎么知道这会生成最大长度的列表?
  • @mbratch 看起来该算法将为给定的@987654342 生成所有可能的集合(包括n 零字符串和n/2 零字符串后跟n/2 1) @,不是吗?
猜你喜欢
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
相关资源
最近更新 更多