如何制作确定性伪随机置换生成器函数?

时间:2013-04-30 17:17:48

标签: math

我正在搜索输入0,1,2,3 ...... N的函数。其结果应该是相同的输入数组,只能“随机”置换。结果必须是唯一的,因此生成所有结果。现在,我知道/不介意对于0,1,...... N的所有列表,相同的结果将被输出。这是预期和罚款,我只是希望结果是改组的输入。

我发现了这个功能:

function perm( x )
{
    return x * 833 % N;
}

其中833可以是任何大数字素数。 这会产生良好的结果,但它们总是具有重复的模式。参见N = 16: 0 3 6 9 12 15 2 五 8 11 14 1 4 7 10 13

想象一下它看起来像3个鲨鱼鳍。 基本上我的问题是,我如何制作一个能够完成我所描述的功能但却更混乱的功能呢?

1 个答案:

答案 0 :(得分:4)

线性同余算法将始终显示线性模式。 你可能更想要一个块密码。请参阅例如here和此related question

你的长度很小,一个更实际的解决方案是预生成的排列表(如另一个答案所示 - 你更粗鲁地拒绝并被删除)。