欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

验证对Random的两个猜想

程序员文章站 2023-04-08 14:27:21
猜想1:Random.Next()产生的随机数不会有重复。 猜想2:大量级执行Random.Next(int i)分布在各个数值上的概率是均匀的。 写作时间:2018-11-09 本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏” ......

猜想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的两个猜想

从结果看,执行一百次、一千次及一万次时,不存在重复,执行十万次时,出现一次重复,一百万次出现二百三十二次重复。说明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(); }

执行结果截图:
验证对Random的两个猜想

猜想成立,分布在各个数值上的概率是均匀的。

 

写作时间:2018-11-09

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

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

验证对Random的两个猜想