找到 12 个 32 位数字,其中每对至少在 17 个位置上有位不同。
我正在努力寻找解决这个问题的最佳算法。更一般的问题是:找到“n”个 32 位数字,使得它们中的每对至少在“m”个位置上有位不同。
我的第一个方法是随机选择一个数字,或者从 6 (00000110) 开始,然后再次选择其他随机数字。然后进行异或运算并计算异或结果的二进制表示形式中有多少个 1,这将表明数字有多少个位置不同。如果条件被接受,我们可以存储这两个数字并执行相同的过程,直到达到所需的数字数量。然而,这种算法似乎不是最佳的,因为我们选择随机数,因此它可以“永远”持续下去。
*更新 我准备了这样的代码,对于 m = 16 它实际上返回 12 个结果,但是对于 17 (我需要的)它停止在 9 个结果并且代码永远不会完成。我想知道在[0, 2^32]范围内是否有可能没有这十二个数字,但如何证明呢?
import random
def hamming_distance(x, y):
dist = 0
# The ^ operator sets to 1 only the bits that are different
val = x ^ y
while val > 0:
# We then count the bit set to 1 using the Peter Wegner way
val = val & (val - 1) …Run Code Online (Sandbox Code Playgroud)