验证对Random的两个猜想
程序员文章站
2022-05-25 16:53:51
猜想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
=====================================================================================
本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。
上一篇: Photoshop制作荷叶上的水滴效果
推荐阅读
-
WordPres对前端页面调试时的两个PHP函数使用小技巧
-
使用pandas对两个dataframe进行join的实例
-
ORM实例中,对delete方法需要权限验证,这个验证的方法加在哪里好?
-
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%100000000...
-
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。
-
Authority权限验证类对模块的验证
-
在Asp.Net MVC中实现CompareValues标签对Model中的属性进行验证
-
javascript - 网站应该怎么对会员的微信帐号进行真实性验证?
-
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法_PHP
-
初始化为0的变量,两个线程对它操作,一个加一 一个减一