gpt4 book ai didi

c# - 如何在 C# 中编写线性同余生成器 (LCG)?或者有什么众所周知的实现吗?

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

我想生成一个随机序列数组,这些序列重复并且每个数字只使用一次。例如,给定 0-9 的范围和 2 个不同的种子,您可能会得到

Seed 1: 7 3 5 9 0 8 1 2 6 4 | 7 3 5 9 0 8 1 2 6 4 | 7 3 5 9 0 8 1 2 6 4
Seed 2: 2 5 7 1 4 9 6 8 3 0 | 2 5 7 1 4 9 6 8 3 0 | 2 5 7 1 4 9 6 8 3 0

据我了解,线性同余随机数生成器或 LCRNG 或 LCG 可以给我这个 http://en.wikipedia.org/wiki/Linear_congruential_generator

知道 C# 中是否存在实现,或者我将如何开始编写一个实现。

Mersenne Twister 与 LCG 有何不同?

不确定我的所有问题都得到了解答,但这是我最终使用的。因为我将样本大小限制在从最大值到最小值的范围内,所以我选择了一个不同的素数,只要给出相同的初始种子,它就会保持不变。我这样做是因为我想要相同的序列给定相同的种子和相同的测试可重复性的最小/最大界限。

请批评我在这里所做的任何事情,这正是我突然想到的:

using System;
using System.Collections.Generic;

namespace FULLCYCLE
{
public class RandomNumber
{
private int _value;
private int _prime;
private static List<int> primes = new List<int>()
{
11,
23,
47,
97,
797,
1597,
6421,
25717,
51437,
102877,
411527,
823117,
1646237,
3292489,
6584983,
13169977,
26339969,
52679969,
105359939,
210719881,
421439783,
842879579,
1685759167
};

public RandomNumber( int seed )
{
_prime = primes[seed%primes.Count];
_value = seed;
}

public int Next( int min, int max )
{
int maxrate = (max-min+1);
if (_value > maxrate)
{
_value = _value % maxrate;
}

_value = (_value + _prime) % maxrate;
return _value + min;
}
}
}

最佳答案

为什么不直接使用现有的 Random 类和一个 Knuth shuffle在你的输入序列上?

关于c# - 如何在 C# 中编写线性同余生成器 (LCG)?或者有什么众所周知的实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3935365/

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