【发布时间】:2018-01-17 09:52:37
【问题描述】:
我正在尝试生成任意长度的n 二进制向量l,其中每个向量i 的汉明距离为d(其中d 是偶数)与其他 向量j。我不确定n、l 和d 之间是否存在任何理论上的关系,但我想知道是否有针对此任务的任何实现。我当前的实现如下所示。有时我成功,有时代码挂起,这表明a)不可能找到n给定l和d这样的向量,或者b)搜索需要很长时间,特别是对于@的大值987654333@。
我的问题是:
- 此任务是否有任何有效的实现方式?
-
n、l、d之间存在什么样的理论关系?import numpy as np def get_bin(n): return ''.join([str(np.random.randint(0, 2)) for _ in range(n)]) def hamming(s1, s2): return sum(c1 != c2 for c1, c2 in zip(s1, s2)) def generate_codebook(n, num_codes, d): codebooks = [] seen = [] while len(codebooks) < num_codes: code = get_bin(n) if code in seen: continue else: if len(codebooks) == 0: codebooks.append(code) print len(codebooks), code else: if all(map(lambda x: int(hamming(code, x)) == d, codebooks)): codebooks.append(code) print len(codebooks), code seen.append(code) codebook_vectorized = map(lambda x: map(lambda b: int(b), x), codebooks) return np.array(codebook_vectorized)
例子:
codebook = generate_codebook(4,3,2)
codebook
1 1111
2 1001
3 0101
【问题讨论】:
-
你的问题到底是什么?
-
好问题,请查看编辑
-
如果 d 是奇数,则 n 最多为 2(你不能有 3 个值在 1 的数量上都具有不同的奇偶校验)
-
@qwertyman 更新了问题以限定 d
-
寻找具有最小汉明距离(与固定汉明距离相反)的序列集的问题已得到充分研究,但尚无定论。特别是,对于给定的最小距离和序列长度,集合的最大大小仅对小的和微不足道的参数值是已知的。我怀疑您的问题版本并不简单。
标签: python algorithm encryption vector cryptography