生成随机序列的整数相差1位而不重复

Vic*_*Liu 6 random algorithm

我需要生成N位整数的(伪)随机序列,其中连续的整数与前一个整数的差别仅为1位,并且序列从不重复.我知道格雷码会产生只有1位差异的非重复序列,而LFSR会产生非重复的随机序列,但我不知道如何将这些想法结合起来产生我想要的东西.

实际上,N会非常大,比如说1000.我想随机抽样这个2 ^ 1000整数的大空间,但我需要生成类似随机游走的东西,因为应用程序只能从一个数字跳到另一个数字翻了一下.

Eth*_*iac 5

使用任何随机数生成器算法生成1到N之间的整数(或0到N-1,具体取决于语言).使用结果确定要翻转的位的索引.

为了满足随机性,您需要存储以前生成的数字(感谢ShreevatsaR).此外,您可能遇到无法获得非重复答案的场景,因此这也需要回溯算法.

  • 我只记得您翻转的最后k位(对于一些小k,例如3或4),却不翻转任何一个。这样可以保证您从当前点“走开”至少k步,然后再“迈向”一步,因此,在我认为的N = 1000空间中,重复应该很少。(当然还是有可能的。) (2认同)