验证对Random的两个猜想

Posted j20171203

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证对Random的两个猜想相关的知识,希望对你有一定的参考价值。

猜想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

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

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

技术分享图片
















以上是关于验证对Random的两个猜想的主要内容,如果未能解决你的问题,请参考以下文章

验证歌德巴赫的猜想

python编写一函数用于判断输入的数是不是是素数。验证哥德巴赫猜想:一个不小7的偶数均可以表示为两个素数?

ZZNUOJ_C语言1093:验证哥德巴赫猜想(函数专题)(完整代码)

PAT 乙级 1005. 继续(3n+1)猜想 (25)

1005 继续(3n+1)猜想 (25 分)

验证“哥德巴赫猜想”