【发布时间】:2020-09-09 21:35:05
【问题描述】:
我的主要目的是在图像的像素上随机有效地分布一个缓冲区,但我一直在生成 distinct 随机数。我只是想要生成 0 和 N 之间的数字,但我也希望这些数字是不同的。另请注意,N 通常会很大,例如 2000 万,并且算法不必是加密安全的。
我不能使用随机随机播放方法,因为 N 非常大。我做了一些搜索,发现 Linear congruential generator 但参数 m 必须是素数,但我的 N 有时不是。
最后,我尝试了以下方法,但它不是很有效和可靠,因为它可能会引发超出最大调用堆栈大小错误。
next(max: number)
{
let num = LCG.next()
if (num <= max) return num
return next(max)
}
【问题讨论】:
-
您的问题实际上没有任何重要的细节。没有关于语言,或者 LCG 的参数,或者为什么你认为你会得到一个堆栈大小错误,或者为什么你在一个简单的循环就足够的情况下使用递归。但是,使用 LCG 解决您所说的问题应该非常有效,只要 LCG 模数小于 2*N。但是,如果您需要加密质量安全,那么 LCG 将不够好。
-
很抱歉让您感到不适,虽然这不是一个正当的借口,但这是我在网上的第一个问题,我认为语言或参数并不那么重要,但很可能会将它们放在下一个时间。我确实得到了 maximum call stack size error,因为有可能依次获得比 N 大的许多数字,并且我认为循环和递归函数之间没有区别转换为机器代码,但当然它也取决于我没有说明的编程语言是 JavaScript。另外,我不需要加密质量安全。
标签: cryptography steganography