控制随机抽中几率 [ C# | Random ] (2)

简介:

  普通随机抽取分别进行1000次和10000次测试显示:

          1000次

 

 

 10000次

 

 

 控制随机几率随机抽取分别进行1000次和10000次代码修改:

          1.     将rc.RandomExtract(rand)改为rc.ControllerRandomExtract(rand)

          2.     注释掉上面输出部分代码,加上以下代码:

            Dictionary < char , ushort >  items  =   new  Dictionary < char , ushort > ();
            
for  ( int  i  =   0 ,j  =  rc.datas.Count; i  <  j; i ++ )
            {
                items.Add(rc.datas[i],rc.weights[i]);
            }

            Console.WriteLine(
" \t\t出现次数\t占总共出现次数百分比\t权值 " );
            
            
foreach  (KeyValuePair < char int >  item  in  result)
            {
                Console.WriteLine(item.Key 
+   " \t\t "   +  item.Value.ToString()  +   " \t\t "   +  (( double )item.Value  /  ( double )(FOR_COUNT  *  COUNT)).ToString( " 0.00% " +   " \t\t\t "   +  items[item.Key]);
            }

          测试结果:

          1000次

 

 

 10000次

 

 

小结

     从上面统计结果可以看出,普通随机数分布比较均匀,随机抽中的几率相对持平;但是经过控制随机抽中几率,权值高的明显抽中几率要高,另外需要注意的是这里只输出了25个字母,也就是还有一个字母没有被抽中过,因为按算法他是始终不会出现的,除非一次抽26个!!

     需要注意的是:

          1.     合理的调配权值和随机数生成的大小也很有关系,大家可以看到权值5的和权值1的出现几率相差不是5倍,而是30-50倍。

          2.     如果数据源随机的数据大,比如上千上万条,按现在的程序是不可行的,可以先随机抽取比所需抽取个数多2-5倍的数据,然后直接按权值排序然后抽取前N位来达到目的。

          3.     最重要的一点就是注意随机性,这个算法如果不是建立在随机的机制上是毫无价值的!!



本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586455,如需转载请自行联系原作者

相关文章
|
9月前
|
算法 C#
54.c#:random类
54.c#:random类
161 1
|
9月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
260 3
|
9月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
238 3
|
3月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
61 3
|
2月前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
116 12
|
3月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
115 4
|
5月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
69 2