Tag: 随机

制作一组随机的int

我试图做的是生成随机int值的数组,其中随机值在min和max之间取得。 到目前为止,我提出了这个代码: int Min = 0; int Max = 20; int[] test2 = new int[5]; Random randNum = new Random(); foreach (int value in test2) { randNum.Next(Min, Max); } 但它还没有完全发挥作用。 我想我可能只缺一行或其他东西。 任何人都可以帮助我推动我朝着正确的方向前进吗?

如何生成唯一的订单号?

我正在寻找一种生成唯一订单ID的好方法。 你能看到下面的代码有什么问题吗? int customerId = 10000000; long ticks = DateTime.UtcNow.Ticks; long orderId = customerId + ticks; int orderNumber = orderId.GetHashCode(); 在创建订单之前,我将检查数据库中的数字是否唯一。

在c#中随机重新排列项目列表的最佳方法是什么?

我有一个对象列表,我想在每个请求上随机重新排序。 这样做的最佳方式是什么?

如何制作长度为5的随机数字和字母串?

可能重复: 这是生成一串随机字符的好方法吗? 如何在C#中生成随机的8个字符,字母数字字符串? 这是我到目前为止的代码。 private void button1_Click(object sender, EventArgs e) { string rand1 = RandomString(5); string rand2 = RandomString(5); string rand3 = RandomString(5); string rand4 = RandomString(5); string rand5 = RandomString(5); textBox1.Text = rand1 + “-” + rand2 + “-” + rand3 + “-” + rand4 + “-” + rand5; } private static Random random […]

跨平台随机数发生器

当您需要能够从种子生成随机数时,并保证它在不同版本的.NET Framework和Mono Framework中是相同的数字,以及跨不同的体系结构(x86,x64),你是什么做? 我目前正在考虑将数百万个随机字节存储在一个文件中,作为这个问题的临时解决方案,但我认为可能有更好的方法(希望不要太复杂)。

如何生成“随机”但也是“唯一”数字?

如何生成随机数。 诸如java等语言如何生成随机数,尤其是如何为GUID完成。 我发现像Pseudorandomnumber生成器这样的算法使用初始值。 但我需要创建一个随机数程序,其中一次发生的数字应该永远不会重复,即使系统重新启动等等。我认为我需要将值存储在任何地方,以便我可以检查数字是否重复,但当列表超出限制时,它会太复杂。

C#Mersenne Twister随机整数发生器实现(SFMT)蒙特卡罗模拟

到目前为止,我一直在使用此处的C# Mersenne Twister生成随机数: http://www.centerspace.net/resources.php 我刚发现SFMT的速度应该是这里的两倍: http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/ 有人能指出我在SFMT的C#实现吗? 我的要求是在(和包括)0和2 ^ 20(1048576)之间生成一个整数。 我需要每天花费数万亿次进行24小时制模拟,所以我准备好花几天时间来完善它。 目前我通过添加一种符合我要求的新方法调整了Center Space Mersenne Twister: public uint Next20() { return (uint)(genrand_int32() >> 12); } 使用方法genrand_int32()我想生成我自己的版本genrand_int20() ,它在(和包括)0和2 ^ 20之间生成一个整数,以保存在上面的转换和转移但我不懂数学。 究竟我该怎么做? 还使用uint比int更快 ,或者只是可寻址数字的问题? 因为我只需要1048576,我只关心速度。 此外,它将在带有.NET 2的Windows Server 2003 R2 SP2(32位)盒上运行。处理器是AMD Opteron 275 (4核) 。

我需要在.net中使用称重选项的随机算法

我的.net项目中有一个要求,我需要从集合中选择一个项目,每个项目都有一个权重(整数从1到10)分配给它。 我需要一个随机生成器来考虑这个权重,即权重越高,选择对象的机会就越多。 虽然算法描述也很好,但是.net中的任何代码示例都很受欢迎。 编辑:快速复制/粘贴C#代码,以防有人偶然发现。 class RandomWeightedSelector { private List items = new List(); public void Add(T item, uint weight = 1) { for (int i = 0; i < weight; i++) items.Add(item); } public T GetRandom() { return items[new Random().Next(0, items.Count)]; } }

在.NET中生成所有整数的随机,非重复序列

在.NET中是否有一种方法可以以随机顺序生成所有 32位整数( Int32 )的序列,而不会重复,并且以内存效率的方式生成? 内存效率意味着最多只能使用几百兆字节的主内存。 理想情况下,序列应该类似于IEnumerable ,并且只有在请求时才会延迟返回序列中的下一个数字。 我做了一些快速的研究,我找到了一些部分解决方案: 使用最大线性反馈移位寄存器 – 如果我理解正确的话,它只会按递增顺序生成数字并且不会覆盖整个范围 在集合上使用Fisher-Yates或其他混洗算法 – 这会在大范围内违反内存限制 保持一个类似集合的集合并继续生成一个随机整数 (可能使用Random ),直到它不重复,即它不在集合中 – 除了可能无法满足内存需求之外,生成最后一个时它会变得非常慢序列中的数字。 超过32位的随机排列,但我想不出一种确保不可重复性的方法。 还有另一种方法来看待这个问题 – 也许利用固定的价值范围 – 这将提供满足内存要求的解决方案吗? 也许.NET类库带有一些有用的东西? 更新1 感谢大家对解决方案的见解和创意建议。 我将尝试尽快实施和测试(正确性和内存效率)这里提出的2或3个最有希望的解决方案,发布结果然后选择“赢家”。 更新2 我试着在下面的评论中实现hvd的建议。 我尝试使用.NET中的BitArray和我的自定义实现,因为.NET只限于int.MaxValue条目,因此不足以覆盖整个整数范围。 我喜欢这个想法的简单性,如果它工作正常,我愿意“牺牲”那512 MB的内存。 不幸的是,运行时间非常慢,花费数十秒来生成我的机器上的下一个随机数,该机器具有3.5 GHz Core i7 CPU。 所以不幸的是,如果要求生成许多随机数,这是不可接受的。 我猜它是可以预测的,如果我没有弄错的话,它是一个O(M x N)算法,其中N是2 ^ 32而M是请求的整数的数量,因此所有这些迭代都需要付出代价。 理想情况下,我想在O(1)时间内生成下一个随机数,同时仍满足内存要求,这里建议的下一个算法可能适用于此。 我会尽快给他们试一试。 更新3 我刚刚测试了线性同余发生器 ,我可以说我对结果非常满意。 对于这个post中的赢家位置来说,它看起来像是一个强有力的竞争者。 正确性 :所有整数只生成一次(我使用了一个位向量来检查)。 随机性 :相当不错。 […]

将“average”参数添加到.NET的Random.Next()以获得曲线结果

我希望能够为Random.Next(Lower, Upper)添加“ average ”参数。 此方法将具有min , max和average参数。 我创建了一个像这样的方法一段时间用于测试(它使用列表并且非常糟糕),所以我想了解如何编写正确的实现。 拥有此function的原因是我游戏中的许多程序/随机事件。 假设你希望大多数时候树木高10单位,但仍然可以低到5或15.一个正常的Random.Next(5,15)会返回结果,但这种方法会有更多的钟声向它的结果曲线。 意义10将是最常见的,并且在每个方向上出去都不太常见。 例如,将平均值降低到7将会产生相对较小的树(或者正在使用的任何树),但是大的树仍然是可能的,但这种情况并不常见。 以前的方法(伪代码) Loop from min to max Closer to average numbers are added to the list more times A random element is selected from the list ,更接近平均值的元素被添加更多,因此更有可能选择它们。 好吧,这就像把一堆糖果放在一个袋子里然后随机挑一个。 是的,慢。 你对改进这个有什么看法? 插图:(不完全准确,但你看到了这个想法) 注意:许多人建议使用钟形曲线,但问题是如何在这种意义上改变曲线的峰值以支持一侧。