验证对Random的两个猜想
程序员文章站
2023-04-08 14:27:21
猜想1:Random.Next()产生的随机数不会有重复。 猜想2:大量级执行Random.Next(int i)分布在各个数值上的概率是均匀的。 写作时间:2018-11-09 本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏” ......
猜想1:random.next()产生的随机数不会有重复。
猜想2:大量级执行random.next(int i)分布在各个数值上的概率是均匀的。
验证猜想1
/*如果random.next()产生的随机数不存在重复,那么_cunfangsuijishudelist.count应该等于执行总次数*/ list<int> _zhixingcishulist = new list<int>(); _zhixingcishulist.add(100);//一百 _zhixingcishulist.add(1000);//一千 _zhixingcishulist.add(10000);//一万 _zhixingcishulist.add(100000);//十万 _zhixingcishulist.add(1000000);//一百万 stringbuilder _stringbuilder = new stringbuilder(); foreach (int key in _zhixingcishulist) { list<int> _cunfangsuijishudelist = new list<int>(); random _random = new random(); for (int i = 0; i < key; i++) { int _suijishu = _random.next(); //如果列表不存在该数字,则将该数字加入列表。 if (_cunfangsuijishudelist.contains(_suijishu) == false) { _cunfangsuijishudelist.add(_suijishu); } } _stringbuilder.appendformat("执行{0}次结果:{1}" + environment.newline, key, _cunfangsuijishudelist.count);
} console.write(_stringbuilder.tostring()); console.readline();
执行结果截图:
从结果看,执行一百次、一千次及一万次时,不存在重复,执行十万次时,出现一次重复,一百万次出现二百三十二次重复。说明random.next()会产生重复随机数,但只有在超过一定量级时才会,并且量级越大重复值个数越多。
验证猜想2
static void main(string[] args) { list<int> _zhixingcishulist = new list<int>(); _zhixingcishulist.add(1000);//一千 _zhixingcishulist.add(10000);//一万 _zhixingcishulist.add(100000);//十万 _zhixingcishulist.add(1000000);//一百万 stringbuilder _stringbuilder = new stringbuilder(); foreach (int key in _zhixingcishulist) { dictionary<int, list<int>> _zidian = new dictionary<int, list<int>>(); for (int i = 0; i < 10; i++) { _zidian.add(i, new list<int>()); } random _random = new random(); for (int i = 0; i < key; i++) { int _suijishu = _random.next(10); _zidian[_suijishu].add(_suijishu); } _stringbuilder.appendformat("执行{0}次数值分布:" + environment.newline, key); foreach (keyvaluepair<int, list<int>> zidiankey in _zidian) { _stringbuilder.appendformat("{0}:{1}" + environment.newline, zidiankey.key, zidiankey.value.count); } _stringbuilder.append(environment.newline); } console.write(_stringbuilder.tostring()); console.readline(); }
执行结果截图:
猜想成立,分布在各个数值上的概率是均匀的。
写作时间:2018-11-09
=====================================================================================
本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。
上一篇: 就是你瞎了