生成数字,具有高汉明距离

时间:2015-10-16 16:36:15

标签: algorithm hamming-distance

我正在寻找一种快速生成小于2 ^ 64的k个非负整数的方法,其中,在基数2中,任意两个数之间的最小汉明距离尽可能高。

例如,如果我正在寻找k = 4的数字并且它们应该小于2 ^ 4它们可以是:
0000
0011
1100
1111
最小汉明距离为2。

是否有快速算法为给定的k生成这些数字?我的k将大约为10 ^ 4。

或者,生成一组数字的算法也可以正常工作,这些数字具有大于给定值的汉明距离。

2 个答案:

答案 0 :(得分:4)

这是一个相当微不足道的方式。找到可以表达k个不同数字的最小位数= b。例如。对于k = 4,使用b = 2位。将64位分成大小为2的块。对于每个块,在2 ^ b> = k可用中为每个数字生成不同的数字。

E.g。对于k = 4的数字,b位是00,01,10,11,这里有4种可能性:

0000

0101

1010

1111

如果你有c个块,那么每个c块的至少一个位中的每个数字彼此不同,所以最小保证汉明分离是c。

您还可以置换每个块中数字的选择,这将产生更随机的示例,例如

0011

0101

1000

1110

答案 1 :(得分:3)

由于mcdowella的答案是一种非常好的方法,可以快速生成彼此具有一定最小汉明距离的数字。但是,它并不能保证所产生的汉明距离特别大(如果我理解正确,它将保证10 ^ 4 64位数中的任意两个之间的汉明距离至少为4,尽管实际最小汉明距离距离可能更大)。如果你真的希望尽可能大地获得最小汉明距离,并且愿意花费更多的CPU周期,我建议使用Reed-Solomon code。如果您需要10 ^ 4个数字,您可以将1,2,...,10000中的每个数字解释为长度为14的二进制消息,以长度为64的二进制代码字进行编码。为此,您将使用Reed-Solomon代码[64,14,51] _2,它将保证任何两个产生的64位数之间的汉明距离至少为51。正如您从链接的维基百科文章中看到的那样,构造相当复杂,尽管您应该能够使用开源实现(维基百科文章提供了一些链接),这样您就不必重新发明轮子。