我正在寻找一种快速生成小于2^64的k个非负整数的方法,其中,在基2中,任意两个数字之间的最小Hamming距离尽可能高。
例如,如果我正在寻找k=4数字,并且它们应该小于2^4,那么它们可能是:
0000
0011
1100
1111
最小汉明距离为2。
对于给定的k,有快速生成这些数字的算法吗?我的k是10^4。
或者,一种生成一组数字的算法,其两两之间的汉明距离都大于给定的值,也会工作得很好。
发布于 2015-10-16 17:03:17
这里有一个相当琐碎的方法。找到可以表示k个不同数字的最小位数=b。例如,对于k=4,使用b=2位。将64位划分为大小为2的块。对于每个块,给出在可用的2^b >= k中生成的每个数字。
例如,对于k=4数,b位是00、01、10、11,这里有4种可能性:
0000
0101
1010
1111
如果你有c块,那么每个数字在每个块中至少有一个比特中的每个数字是不同的,所以最小保证的hamming分离是c。
您还可以更改每个块中的数字选择,这将产生更多看起来随机的示例,如
0011
0101
1000
1110
发布于 2015-10-16 23:12:26
基于mcdowella的答案是一个非常好的方法,可以用一定的最小Hamming距离快速生成数字。但是,它并不保证产生的Hamming距离特别大(如果我正确理解它,它将保证10^4 64位数中的任意两个之间的Hamming距离至少为4,尽管实际的最小Hamming距离可能更大)。如果你真的想得到最小的汉明距离尽可能大,并愿意花费更多的CPU周期这样做,我建议使用里德-所罗门码。如果您需要10^4数字,您可以将1,2,...,10000中的每个数字解释为长度为14的二进制消息,并以长度为64的二进制代码字进行编码。为此,您将使用里德-所罗门代码64,14,51_2,这将保证至少51之间的任何两个之间的64位数字汉明距离。正如您可以从链接的Wikipedia文章中看到的那样,这个结构相当复杂,尽管您应该能够使用一个开源实现( Wikipedia文章提供了一些链接),这样您就不必重新发明轮子了。
https://stackoverflow.com/questions/33175429
复制相似问题