一尘不染

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

algorithm

嘿,
我有一个(唯一的)对象数组,想得到这个数组的4个随机对象,但是同一对象不应该被提取两次,因此使用简单的随机函数将不起作用。

我有两个想法:
1.随机排列数组并获得前4个项目。->开销,因为数组可能非常大。
2.生成随机索引。如果以前使用过该索引,请重试,依此类推…->有点不可靠…

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


阅读 193

收藏
2020-07-28

共1个答案

一尘不染

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

使用现代版本Fisher
Yates随机播放
。它可以就地执行如果您在前四次交换之后停止,它将为您提供所需的结果。无需重新整理整个阵列。

与其他解决方案相比,它还具有以下优点:如果仅需要一部分结果排列,则可以在整个过程中将其停止

2020-07-28