如何从数组中获取唯一的随机项?

时间:2011-02-19 20:58:36

标签: arrays algorithm random

嘿那里,
我有一个(唯一的)对象数组,并希望获得此数组的4个随机对象,但不应该提取相同的对象两次,因此使用简单的随机函数将不起作用。

我有两个想法:
1.将阵列洗牌并获得前4项。 - >开销,因为阵列可能非常大。
2.生成随机索引。如果之前使用过该索引,请再试一次,依此类推...... - >有点不可靠......

你知道更好,更有效的方法吗?

1 个答案:

答案 0 :(得分:10)

  

随机播放阵列并获得前4个项目。 - >开销,因为阵列可能非常大。

使用modern versionFisher Yates shuffle。它可以执行in-place,如果您在前四次交换后停止,它将为您提供所需的结果。没有必要洗牌整个阵列。

  

与其他一些解决方案相比,它还具有以下优势:如果只需要部分结果排列,则可以在中途停止