给定二进制向量 x ,并且数字 y 小于此二进制向量的汉明权重,我想返回相同的向量集大小为 x ,它们包含在 x 中,汉明重量 y 。
例如,二元向量' 0110110' y值为3,应该返回
y值为2的相同向量应返回
任何帮助将不胜感激!! 我使用python但是任何类似语言的例子都会很棒。 (C / Java等)
答案 0 :(得分:0)
解决此问题的最简单方法是获取所有非零元素索引,从而找到所有这些索引的大小为y
的组合。
例如:
二进制矢量:'0110110'
,y = 3
,
索引是(1,2,4,5)
大小y = 3
的组合将为indexes = [(1, 2), (1, 4), (1, 5), (2, 4), (2, 5), (4, 5)]
现在迭代上述组合并切断上面列表中每个项目索引的元素将是微不足道的
for i in index:
binary_seq[i] = '0'
<强>实施强>
def foo(bin_seq, y):
from itertools import combinations
bin_seq = list(bin_seq)
y = bin_seq.count('1') - y
indexes = [i for i in range(len(bin_seq)) if bin_seq[i] == '1']
for index in combinations(indexes, y):
vec = bin_seq[:]
for i in index:
vec[i] = '0'
yield ''.join(vec)
示例强>
>>> list(foo('0110110', 3))
['0010110', '0100110', '0110010', '0110100']
>>> list(foo('0110110', 2))
['0000110', '0010010', '0010100', '0100010', '0100100', '0110000']