RT
N=100
怎么把N分为不规则的100份 从大到小的递归排序
输出效果为(100个不规则的数字):10(固定) 8 7 5 3 2 ……0.01
N=100
怎么把N分为不规则的100份 从大到小的递归排序
输出效果为(100个不规则的数字):10(固定) 8 7 5 3 2 ……0.01
解决方案
10
Random rnd = new Random(); int nCount = 100; int n = 10; double[] dArr = new double[n]; double dBase = (double)nCount / n; //默认都是一样的 for (int i = 0; i < n; i++) dArr[i] = dBase; for (int i = 0; i < n / 2; i++) { //生成 0 - dbase 之间的随机数 double d = rnd.NextDouble() * dBase; dArr[i] -= d; //其中一个减掉d 另一个加上d dArr[n - 1 - i] += d; } Array.Sort(dArr); foreach (var v in dArr) Console.WriteLine(v); //=============== 3.20536261108022 3.23604574577699 5.6426536923473 6.24905226111834 8.57602051858605 11.423979481414 13.7509477388817 14.3573463076527 16.763954254223 16.7946373889198
10
这不就是换算成
总数X=100*100
随机分成 Y=100份
最大值为10*100(不懂固定是什么意思,是必定会有,还是最大只允许这个)
最小值为1
简单的就是Z=Random(10*100),然后循环X-Z,假如剩余值>剩余次数*1,那么就还可以继续Random,否则就是剩余的全都是1
总数X=100*100
随机分成 Y=100份
最大值为10*100(不懂固定是什么意思,是必定会有,还是最大只允许这个)
最小值为1
简单的就是Z=Random(10*100),然后循环X-Z,假如剩余值>剩余次数*1,那么就还可以继续Random,否则就是剩余的全都是1
5
20
哦,竟然还有 0.01。真够抠门的。
假如不考虑“最大为10”这个条件,其实可以产生100个随机数值,假设其合计是s,那么就再把没一个数值都乘以 100.0/s。但是这不保证最小值恰好是0.01、最大值恰好是10。并且其实看起来不应该是随机正态分布,那样才好玩儿一点。
假如不考虑“最大为10”这个条件,其实可以产生100个随机数值,假设其合计是s,那么就再把没一个数值都乘以 100.0/s。但是这不保证最小值恰好是0.01、最大值恰好是10。并且其实看起来不应该是随机正态分布,那样才好玩儿一点。
5
不应该是随机正态分布 –> 不应该是随机均匀分布
要想保证最小值必须是 0.01、最大值必须是10,那么其实就是计算另外 98 个值了,而且其区间必须在0~9.99之间,合计恰好为89.99。
本人写一个“随机均匀分布”的例子
要想保证最小值必须是 0.01、最大值必须是10,那么其实就是计算另外 98 个值了,而且其区间必须在0~9.99之间,合计恰好为89.99。
本人写一个“随机均匀分布”的例子
var rnd = new Random(); var datas = (from n in Enumerable.Range(0, 98) select 0.01 * rnd.Next(100, 1000)).ToList(); var p = 89.99 / datas.Sum(); datas = (from n in datas select p * n).ToList(); datas.Add(10); datas.Add(0.01); datas = datas.OrderByDescending(x => x).ToList();
显然这里是随机均匀分布的,不好玩!
50
实际的业务处理肯定不会随随便便地说“分为不规则的100份”这么简单的话。说这么简单,那么肯定就“不好玩儿”了,肯定没有领会人家设计的初衷。人家的数据设计,肯定是有一些“分布”曲线模式,而不是均匀分布的。那么这里的重点就在这个模式。
而你对需求的描述,似乎一点也没有涉及到数据分布模式的说明。
人家的系统的“拆分”可能远没有你在问题中说明的这个简单规则。所以你无法模仿人家,原因是你不懂人家的规则。
而你对需求的描述,似乎一点也没有涉及到数据分布模式的说明。
人家的系统的“拆分”可能远没有你在问题中说明的这个简单规则。所以你无法模仿人家,原因是你不懂人家的规则。