首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成数,具有高hamming距离

生成数,具有高hamming距离
EN

Stack Overflow用户
提问于 2015-10-16 16:36:15
回答 2查看 3.2K关注 0票数 5

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

例如,如果我正在寻找k=4数字,并且它们应该小于2^4,那么它们可能是:

0000

0011

1100

1111

最小汉明距离为2。

对于给定的k,有快速生成这些数字的算法吗?我的k是10^4。

或者,一种生成一组数字的算法,其两两之间的汉明距离都大于给定的值,也会工作得很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 4
EN

Stack Overflow用户

发布于 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文章提供了一些链接),这样您就不必重新发明轮子了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33175429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档