Tag: 随机

播种多个随机数发生器

我最近在另一篇文章的评论中讨论了相同类型的多个随机数生成器的初始化,在讨论中我们询问了以下问题: 1)使用不同的种子创建相同随机数生成器的多个实例并在程序的不同部分使用这些随机数生成器是一个好主意吗? 2)特别是,使用.Net Random类创建随机数生成器的技术,如下所示,并在不同的程序上下文中使用每个RNG会导致问题: int size = 64; // The number of RNGs to use int seed; // Get seed using some normal technique Random[] r = new Random[size]; for (int i = 0; i < size; i++) { r[i] = new Random(seed + i); } 3)如果需要多个随机数流,你会建议什么? 4)当需要线程安全时,您如何建议生成随机数?

为什么C#的随机下限包含在内,但上限是否排他?

以此代码为例: Random rnd = new Random(); int rndNumber = rnd.Next(0,101); 人们可能会发生以下任何一种情况: -rndNumber包含0到101之间的随机整数 -rndNumber包含1到100之间的随机整数 实际发生的是,rndNumber包含0到100之间的随机整数。为什么会这样? 我明白上限是独家的,但为什么下限包括在内? 为什么这不一致?

随机数种子针对相同版本的.NET框架

如果我的应用程序以.NET framework 3.5为目标,每个CPU是否根据相同的种子返回相同的随机序列? 我正在检查你是否得到了与我相同的结果。 我也希望我分发应用程序的每个人都能得到相同的结果。 谢谢! Random a = new Random(44448); int i1 = a.Next(65, 90); MessageBox.Show(i1.ToString());

在平面地图上随机生成块

我试图在平面地图上随机生成块,并使它们彼此不重叠。 我已经制作了一个地图大小(500×500)的矩阵(c#数组),这些块的比例在1到5之间。代码可以工作但是如果生成的块与另一个块重叠,它就会被破坏而不会在其他地方重新生成。 我尝试生成的1000个块中只有大约80个不与另一个块重叠。 这是地图的图片,生成了大约80个块,绿色方块是块 void generateElement(int ratio, int minScale, int maxScale, GameObject g) { bool elementFound = false; for (int i = 0; i < ratio * generationDefault; i++) { GameObject el; // Randomly generate block size and position int size = Random.Range(minScale, maxScale + 1); int x = Random.Range(0, mapSizex + 1 – size); […]

从加权列表中选择一个随机项

我正在尝试编写一个程序,从美国人口普查姓氏列表中选择一个随机名称。 列表格式是 Name Weight Cumulative line —– —– —– – SMITH 1.006 1.006 1 JOHNSON 0.810 1.816 2 WILLIAMS 0.699 2.515 3 JONES 0.621 3.136 4 BROWN 0.621 3.757 5 DAVIS 0.480 4.237 6 假设我将数据加载到类似的结构中 Class Name { public string Name {get; set;} public decimal Weight {get; set;} public decimal Cumulative {get; set;} } 什么数据结构最适合保存名称列表,以及从列表中选择随机名称但名称分布与现实世界相同的最佳方法。 […]

RandomNumberGenerator与RNGCryptoServiceProvider

根据RandomNumberGenerator的 MSDN文档: 应用程序代码不直接使用此类。 此抽象类作为所有加密随机数生成器的基类提供。 对于加密随机数生成器的实现,请使用派生类RNGCryptoServiceProvider。 但是,我在不同代码库中的几个场景中看到了以下代码: byte[] bytes = new byte[…]; RandomNumberGenerator rng = RandomNumberGenerator.Create(); rng.GetBytes(bytes); 最值得注意的是StackExchange (我假设包含SO)以及BCrypt.Net 。 因此,我有点困惑 – 上面代码返回的是什么类型的RandomNumberGenerator ? 一些代码库使用RNGCryptoServiceProvider而不是RNGCryptoServiceProvider也是一个缺陷吗? 我假设RandomNumberGenerator.Create()正在我的工作中完成,我在这里完全没有,但从技术上讲(因为它是一个抽象类)上面的代码不应该抛出错误吗?

生成一系列随机数,在c#中加起来为N

如何在1-9之间生成30个随机数,在C#中总共加起来200(或任意N)? 我正在尝试生成一串可以加起来为N的数字。

如何从C#中的数组中获取随机值

可能重复: 访问列表中的随机项 我有一个数字数组,我想从这个数组中获取随机元素。 例如:{0,1,4,6,8,2}。 我想选择6并将此数字放在另一个数组中,新数组的值为{6,….}。 我使用random.next(0,array.length),但这给出了一个随机数的长度,我需要随机数组。 for (int i = 0; i < caminohormiga.Length; i++ ) { if (caminohormiga[i] == 0) { continue; } for (int j = 0; j < caminohormiga.Length; j++) { if (caminohormiga[j] == caminohormiga[i] && i != j) { caminohormiga[j] = 0; } } } for (int i = 0; i […]

每台机器使用相同的种子生成相同的随机数结果吗?

我当前卡在随机发生器中。 需求规范显示了这样的示例: Random rand = new Random(3412); 兰特结果不是直接给出,而是用于其他表现。 我写了与上面相同的代码,通过种子3412生成随机数。但是,其余性能的结果与样本完全不同。 生成结果是518435373,我使用了在线c#编译器上尝试过的相同代码,但得到的生成结果为11688046,其余的性能结果也与样本不同。 所以我只是想知道在不同的机器上应该是不同的? 顺便说一下,任何人都可以从你的机器上提供结果,看看它是否和我一样。

生成具有一定最大值的均匀随机整数

我想生成满足0 <= result <= maxValue统一整数。 我已经有一个生成器,它在内置的无符号整数类型的整个范围内返回统一值。 让我们调用这个byte Byte()的方法byte Byte() , ushort UInt16() , uint UInt32()和ulong UInt64() 。 假设这些方法的结果是完全一致的。 我想要的方法的签名是uint UniformUInt(uint maxValue)和ulong UniformUInt(ulong maxValue) 。 我在找什么: 正确性 我更喜欢在给定的时间间隔内分配返回值。 但如果显着提高性能,则可以接受非常小的偏差。 我的意思是指一个订单的偏差,允许区分符的概率为2/3给定2 ^ 64个值。 它必须适用于任何maxValue 。 性能 该方法应该很快。 效率 该方法确实消耗很少的原始随机性,因为取决于底层生成器,生成原始字节可能是昂贵的。 浪费几个比特很好,但消耗128比特来生成一个数字可能是过多的。 在某些成员变量中,还可以缓存前一次调用中的一些遗留随机性。 小心int溢出和包装行为。 我已经有了一个解决方案(我会将其作为答案发布),但这对我的口味来说有点难看。 所以我想获得更好的解决方案的想法。 关于如何使用大型maxValue进行unit testing的建议也不错,因为我无法生成具有2 ^ 64个桶和2 ^ 74个随机值的直方图。 另一个复杂因素是,对于某些错误,只有一些maxValue发行版有很多偏见,而其他发行版只有很小的偏差。