【发布时间】:2013-10-03 17:41:20
【问题描述】:
我有一个包含 N 个元素的列表,我想随机化它的顺序。
最好用最少的计算,并且能够用完内存(复制总数)。
到目前为止,我想出了:
- 创建新的空列表,从原始列表中取出第一个元素,将其插入到随机位置的新列表中,数量级似乎为 O(N*N),但没有使用额外的内存。
- 创建一个新的ArrayList(容量N)(所以访问是O(1)),创建一个新的hashSet并插入所有可能的位置(N),取原始List的第一个元素插入到随机位置新的arrayList,从hashSet中移除这个位置,因为ti已经被使用了。
- 创建一个新的HashSet,将所有元素添加到这个hashSet中,并遍历该集合以创建一个新的List,并希望hashSet中的顺序是随机的。
在我看来,最便宜的是第三种选择,但我不确定结果会有多随机。有什么建议吗?
【问题讨论】: