程序设计语言中的函数随机不是偏倚的吗?毕竟,算法需要基于某些东西,这可能会产生偏见。根据这个网站https://mathbits.com/MathBits/CompSci/LibraryFunc/rand.htm,rand()
函数需要一个开始号,称为seed
。它说
函数生成伪随机序列。
我不完全理解背后的逻辑。如果它不是真正的随机(伪随机),有没有办法使它完全随机?
发布于 2019-07-27 18:32:11
根据定义,函数将给定的输入映射到给定的输出。对于伪随机生成器来说,这意味着它将给定的“种子”映射到给定的随机数序列。这样的生成器甚至要开始生成“随机”数字,种子本身就必须具有一些随机性。为此目的有许多种子来源,包括-
而且,一般来说,种子越长,伪随机产生器所能产生的“随机”序列的多样性就越大。
不同的伪随机数发生器(PRNG)具有不同的性质。如果一个特定的PRNG本身是“坏”的,任何种子选择策略都不能使它“更好”。随机数生成器(RNG)的选择将取决于将使用随机数的应用程序类型,并且您并没有真正指定您想到的是哪种应用程序:
发布于 2019-07-28 17:42:07
历史上,大多数编程语言中的伪随机数函数都很糟糕.在确定性机器上运行的旧算法产生的结果并不理想。
但事情正在改变。所有现代微处理器都有基于硬件的熵生成功能,而像网上银行这样的现代应用已经推动了更好的算法的发展。这完全取决于你心目中的操作系统、语言和库。有非常好的选择,但你必须知道它们是什么,因为坏的选择仍然存在。
类似于C语言的rand()之类的东西可能是最糟糕的。从Linux (或MacOS) /dev/随机获取字节非常好。密码库有很好的算法。这也取决于应用程序--对于密码学来说,你需要非常好的随机数。对于蒙特卡洛积分之类的东西,你需要大量的数字,但不是必要的完全熵--类似于/dev/随机的PRNG就可以了。
https://stackoverflow.com/questions/57234728
复制相似问题