猜想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
=====================================================================================
本文只代表本人的見解,可能存在錯誤,僅用於技術交流。如果你喜歡該文,可以掃下麵的二維碼打賞我(打賞敬請備註“博客園打賞”五字)。