【发布时间】:2018-02-22 03:05:46
【问题描述】:
我想从 N 个元素的列表中均匀地选择 K 个元素,而不是打乱列表。所以算法应该总是产生相同的结果。
例如
int N = 100;
List<int> myList = Enumerable.Range(0, N-1).ToList();
int K = 20;
这里我期待结果:
0, 5, 10, 15, 20, ...例如
if K == 50我期待:0, 2, 4, 6, 8, ...
但我不知道如何解决它,例如K = 53?我仍然想从列表中统一获取元素,但在这种情况下,我们不能简单地从列表中获取第二个元素。简单的方法是打乱元素并从列表中获取第一个 K 元素,再次对列表进行排序,但在这种情况下,算法的结果每次都会产生不同的结果,我每次都需要相同的结果。
任何帮助将不胜感激。
【问题讨论】:
-
如果你想要相同的结果,我会使用 Rand 方法给一个种子作为参数。没有提供种子时的 Rand 方法以 PC 时间为种子,每次得到不同的结果。每次测试时,提供种子都会给出相同的随机结果。
-
您至少可以为
K == 20和/或K == 50发布您的解决方案 -
如果是 53,列表应该正好包含 53 个在 prev 和 next 之间具有相同距离的元素?
-
@jdweng OP 不是在寻找随机数。 OP 要求选择等距的 #k - 给定列表的元素 - 如果我理解正确的话。
-
嗨,提供种子和洗牌元素不是我想要的,它不会产生统一的选择。