6

什么会促使人们使用这种方法?

更新:我现在明白了。我喜欢 Uri 的原因“洗牌不是一个简单的算法”。这是完全正确的。

4

4 回答 4

12

想要随机打乱有序的元素序列可能有很多原因。例如,一副纸牌。

洗牌不是一种微不足道的算法,就像排序不是一样 - 所以它很常见,需要一个库函数。

至于为什么是一个列表 - 显然它必须是一个有序的集合,因此不是任何一般的集合。只有 list 及其子类型保证是有序的。Collections 类不提供数组操作,但您可以(并且可能应该,为了性能)将 ArrayList 传递给此方法。

于 2010-05-31T06:48:26.077 回答
5

嗯,如果你有一个收藏,并且你想洗牌...

最明显的例子是纸牌游戏,其中您有代表单张纸牌的对象,以及代表您想要洗牌的牌组的集合。

另一个示例可能是,如果您在问卷中向用户提供多个答案,并且您不希望由于答案的顺序而出现任何偏差 - 所以您向每个用户提供一组打乱的答案以供选择.

于 2010-05-31T06:46:11.850 回答
1

好吧,假设您正在为一副纸牌建模。Shuffle 将是您首先编写的函数之一。

任何时候你想随机化一个集合的内容,你都会使用 shuffle。

于 2010-05-31T06:46:51.070 回答
1

如何使用此方法的一些想法:

  • 在游戏中洗牌
  • 在排序算法的测试用例中随机化一个数组
  • 在您的测试套件中打乱测试用例以确保它们不相互依赖
  • 如果您尝试解决像旅行推销员这样的 NP 完全问题,一种方法是获取输入,将其洗牌几次,然后使用长度最短的结果。这为您提供了一个在 O(N) 时间内运行的解决方案(其中 N 是节点数)。
于 2010-05-31T06:51:38.267 回答