gpt4 book ai didi

java - Java(或任何语言)概率中的随机洗牌

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:25:13 25 4
gpt4 key购买 nike

<分区>

所以,我正在 Coursera 上观看 Robert Sedgewick 的视频,目前正在洗牌。他展示了一个“写得不好”的在线扑克洗牌代码(它还有一些其他错误,我已经删除了这些错误,因为它们与我的问题无关)算法是这样工作的:

for(int i = 0; i < N; i++)
int r = new Random().nextInt(53);
swap(cardArray, i, r);

它对所有卡片进行一次迭代。在每次迭代中生成一个随机数,并将第 i 张卡与第 r 张卡交换。很简单,对吧?

虽然我懂算法,但是我不懂他的概率计算。他说因为 Random 使用 32 位种子(或 64 位,这似乎无关紧要),所以这被限制为只有 2^32 种不同的排列。

他还说 Knuth 的算法更好(同样是 for 循环,但是选择 1 和 i 之间的一个数)因为它给你 N!排列。

我同意Knuth的算法计算。但我认为第一个(应该是错误的)应该有 N^N 个不同的排列。

是 Sedgewick 错了还是我漏掉了一个事实?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com