当前位置: 移动技术网 > IT编程>开发语言>.net > 验证对Random的两个猜想

验证对Random的两个猜想

2018年11月10日  | 移动技术网IT编程  | 我要评论

猜想1random.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

=====================================================================================

本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网