gpt4 book ai didi

java - 为什么 Collections.shuffle() 算法比我的实现效果更好

转载 作者:太空狗 更新时间:2023-10-29 22:42:50 27 4
gpt4 key购买 nike

<分区>

Collections.shuffle() 向后遍历 Collection 的每个索引,然后将其与包含或之前的随机索引交换。我想知道为什么,所以我尝试做同样的事情,但交换 Collection 中的 any 随机索引。

这是 Collections.shuffle() 代码的洗牌部分:

for (int i=size; i>1; i--)
swap(arr, i-1, rnd.nextInt(i));

这是我的算法:

Random r = new Random();
for (int i = 0; i < a.size(); i++) {
int index = r.nextInt(a.size());
int temp = a.get(i);
a.set(i, a.get(index));
a.set(index, temp);
}

当我在同一个 ArrayList 上运行一百万次时,我发现 Collections.shuffle() 比我的代码分布更均匀。此外,在以下位置运行我的代码时:

[0, 1, 2, 3, 4]

似乎以下排列最常出现:

[1, 0, 3, 4, 2]
[1, 2, 3, 4, 0]
[1, 2, 0, 4, 3]
[0, 2, 3, 4, 1]
[1, 2, 3, 0, 4]

谁能解释一下为什么?

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