VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • C#教程之验证对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


相关教程