小编Mac*_*lli的帖子

Java(或任何语言)概率中的随机混乱

所以,我正在观看Robert Sedgewick关于Coursera的视频,而我现在正在洗牌.他正在为在线扑克显示一个"写得不好"的洗牌代码(它有一些其他的错误,我已经将其删除,因为它们与我的问题无关)这就是算法的工作原理:

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

它迭代所有卡片一次.在每次迭代时,生成随机数,并且第i个卡与第r个卡交换.简单吧?

虽然我理解算法,但我不理解他的概率计算.他说,因为Random使用32位种子(或64,它似乎并不重要),这仅限于2 ^ 32种不同的排列.

他还说Knuth的算法更好(循环相同,但选择1和i之间的数字),因为它给你N!排列.

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

塞奇威克错了还是我错过了一个事实?

java random algorithm shuffle

7
推荐指数
1
解决办法
491
查看次数

使用Iterator进行TreeSet

我知道TreeSet是有序的.但这是否保证每次创建迭代器时,它都会以相同的顺序遍历集合的元素(假设我没有添加/删除任何元素)?

java collections

-2
推荐指数
1
解决办法
91
查看次数

标签 统计

java ×2

algorithm ×1

collections ×1

random ×1

shuffle ×1