1
61
tl;dr:它以2080个元素“打破”列表,但不要担心太多:) 完整答案: 首先,请注意,“洗牌”列表可以理解为(概念上)生成列表元素的所有可能排列,并随机选择其中一个排列。 那么,您必须记住,所有独立的计算机化随机数生成器实际上都是“伪”随机数。也就是说,它们实际上不是随机的,而是依靠一系列的因素来尝试生成一个在高级或有目的地复制时很难猜测的数字。在这些因素中,通常是先前生成的数字。因此,在实践中,如果您连续使用一个随机生成器若干次,最终将再次开始获得相同的序列(这是文档所指的“周期”)。
最后,lib/random.py(随机模块)上的docstring指出“随机数生成器的周期是
所以,考虑到所有这些,如果你的清单
所以,你看,这并不完全取决于你的列表有多长(尽管它确实进入了等式)。也,
|
2
19
我最初在python源代码中写了这个评论,所以也许我可以澄清一下;-) 当评论被引入时,python的wichmann-hill generator的周期要短得多,我们甚至无法生成一副牌的所有排列。 现在的周期是天文上的大,2080是正确的当前上限。医生们可以加强对这方面的了解,但他们会变得非常乏味。 有一个非常简单的解释:周期p的prng有p可能的起始状态。起始状态完全决定了产生的排列。因此,周期p的prng不能产生超过p的不同排列(这是一个绝对上限——可能无法实现)。这就是为什么比较n!p是这里的正确计算。事实上:
|
3
4
它们的意思是n个对象上的排列(注意n!)长得很快,高得出奇。 基本上是N!=N x N-1 x…x 1;例如,5!=5 x 4 x 3 x 2 x 1=120,这意味着有120种可能的方法可以改变5项列表。 在同一个python页面文档中,它们给出了2^19937-1作为句点,即4.something_10^6001或其他值。基于维基百科的因子分析页面,我想是2000年吧!应该在那附近。(对不起,我找不到确切的数字。) 所以基本上洗牌会有很多可能的排列,所以可能没有真正的理由去担心那些它不会的排列。 但如果这真的是一个问题(烦人的客户可能要求保证随机性?),您还可以将任务卸载到某个第三方;请参见 http://www.random.org/ 例如。 |
CXB · 洗牌-无重复JAVA 6 年前 |
Eltorrooo · 为什么哈希集中的顺序从未改变?[副本] 7 年前 |
Muiter · Foreach循环在输出时被洗牌[重复] 7 年前 |
Sparrky · 我如何从无序函数中获取输出并围绕DOM元素移动? 7 年前 |
Paul · 如何在php shuffle中组合两个数组 7 年前 |
Sergio Manchado · 在两个列表之间随机移动元素 7 年前 |
Joe · 无序排列内爆数组(HTML复选框到数组)[重复] 7 年前 |
Roald · 围绕NA值对向量的部分顺序重新排序 7 年前 |