gpt4 book ai didi

c# 从列表中均匀选择 N 个元素,不随机播放

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:55 26 4
gpt4 key购买 nike

我想从 N 个元素的列表中均匀地选择 K 个元素而不打乱列表。因此算法应该始终产生相同的结果。

例如

int N = 100;

List<int> myList = Enumerable.Range(0, N-1).ToList();

int K = 20;

Here i expect the result: 0, 5, 10, 15, 20, ...

E.g. if K == 50 I expect: 0, 2, 4, 6, 8, ...

但我不知道如何解决它,例如K = 53?我仍然想从列表中统一获取元素,但在这种情况下,我们不能简单地从列表中获取第二个元素。简单的方法是打乱元素并从列表中取出第一个 K 元素,再次对列表进行排序,但在这种情况下,算法的结果每次都会产生不同的结果,而我每次都需要相同的结果。

如有任何帮助,我们将不胜感激。

最佳答案

如果所有索引都是等距的,请找出这些索引,然后四舍五入到最接近的整数。

int N = 100;

List<int> myList = Enumerable.Range(0, N).ToList();

double K = 53;

List<int> solutions=new List<int>();
for (int i=1;i<=K;i++)
{
solutions.Add(myList[(int)Math.Round(i*(N/K)-1)]);
}

Console.WriteLine(solutions.Count);
Console.WriteLine(string.Join(", ", solutions));

查看示例:DEMO

编辑:Math.FloorMath.Round 效果更好,因为 Math.Round 给出了 N=5、K= 的错误解3:

Math.Round->1,2,4
Math.Floor->0,2,4

查看示例:DEMO2

关于c# 从列表中均匀选择 N 个元素,不随机播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46196929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com