今天写最后一篇来结束这个系列,我们知道很多算法解决问题的步骤都是固定的,而概率算法每一步的选择都是随机的,

当在某些领域问题中通常比最优选择省时,所以就大大提高了算法的效率,降低了复杂度。

一:思想

这里主要讲一下“数值概率算法”,该算法常用于解决数值计算问题,并且往往只能求得问题的近似解,同一个问题同样的概率算法

求解两次可能得到的结果大不一样,不过没关系,这种“近似解”会随时间的增加而越接近问题的解。

二:特征

现实生活中,有很多问题我们其实都得不到正确答案,只能得到近似解,比如“抛硬币”求出正面向上的概率,”抛骰子“出现1点的

概率,再如:求“无理数π”的值,计算"“定积分”等等。针对这样如上的情况,使用概率算法求解是再好不过的了。

三: 举例

数值概率中,最经典的一个题目就是“计算定积分”,设f(x)=1-x2 ,计算定积分:I = ∫0 (1-x2)dx 的值。

分析:第一步: 我们画出函数f(x)=1-x2 在[0,1]的坐标图:

第二步:如果我们向矩形随机投点,那么落入“阴影区”的概率就是

P投点=S阴影/S正方形=∫0 (1-x2)dx /∫0 (1)dx=∫0 (1-x2)dx,

所以问题就演化为:求出随机点落入阴影区的概率即为定积分∫0 (1-x2)dx的近似值。

比如我们向正方形投入N个点。M个点落在阴影区,则概率P=m/n;

最后:上代码

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5  6 namespace Gailv 7 { 8     public class Program 9     {10         static void Main(string[] args)11         {12             while (true)13             {14                 Console.WriteLine("阴影区的投点概率为:" + Darts(10000));15             }16         }17 18         static double Darts(int n)19         {20             int count = 0;21 22             for (int i = 0; i < n; i++)23             {24                 double x = new Random().Next(0, 100) / 100.0;25 26                 double y = new Random().Next(0, 100) / 100.0;27 28                 if (y <= 1 - Math.Pow(x, 2))29                     count++;30             }31             return (double)count / n;32         }33     }34 }

转载于:https://www.cnblogs.com/huangxincheng/archive/2012/02/14/2350275.html

算法洗脑系列(8篇)——第八篇 概率思想相关推荐

  1. 算法洗脑系列(8篇)——第六篇 回溯思想

    记得广告中经常听到过,抱着试试看的态度买了3个疗程,效果不错........  也经常听人说过什么车到山前必有路,船到桥头自然直. 哈哈,这种思想就是回溯思想,也可称为试探思想. 一: 思想 有时我们 ...

  2. 算法洗脑系列(8篇)——第七篇 动态规划

    今天跟大家分享下算法思想中比较难的一种"动态规划",动态规划给人像是作战时常用的"迂回战术",或者说是 游击战,在运动中寻找突破口. 一: 思想 首先要了解&q ...

  3. python学习之路基础篇(第八篇)

    一.作业(对象的封装) 要点分析 1.封装,对象中嵌套对象 2.pickle,load,切记,一定要先导入相关的类二.上节内容回顾和补充 面向对象基本知识: 1.类和对象的关系 2.三大特性: 封装 ...

  4. linux中的shell有printf吗,Linux Shell系列教程之(八)Shell printf命令详解

    在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell printf命令有了一个简略的介绍,本篇给大家详细介绍下Shell中的printf命令. 一.Shell p ...

  5. 《两日算法系列》之第四篇:隐马尔可夫模型HMM

    目录 1. 定义与假设 2. 相关概念的表示 3. 三个基本问题 3.1. 概率计算问题 3.2. 学习问题 3.3. 预测问题 总结 1. 定义与假设 李雷雷所在城市的天气有三种情况,分别是:晴天. ...

  6. Raspberry-Pi-PICO系列--第八篇 高级篇使用SWD接口下载和调试(第二章)

    一.目的 在上一篇<Raspberry-Pi-PICO系列--第八篇 高级篇使用SWD接口下载和调试(第一章)> 我们已经介绍了如何准备openocd.如何编译picoprobe.如何进行 ...

  7. 洗脑 方法篇 洗脑集中营(转载)

    当传销风潮席卷全国的时候,只有一种人觉得恐惧,就是了解"洗脑"内幕并且没有被洗脑的人.参与传销者已经被彻底"洗脑",他们作为传销组织虔诚的信徒,生活在亢奋的幸福 ...

  8. Python金融系列第八篇:Fama-French 多因子模型

    作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai 第一篇:计算股票回报率,均值和方差 第二篇:简单线性回归 第三篇:随机变量和分布 第四篇:置信区间和假设 ...

  9. 【手写 Vue2.x 源码】第二十八篇 - diff 算法-问题分析与 patch 优化

    一,前言 首先,对 6 月的更文内容做一下简单回顾: Vue2.x 源码环境的搭建 Vue2.x 初始化流程介绍 对象的单层.深层劫持 数组的单层.深层劫持 数据代理的实现 对象.数组数据变化的观测 ...

最新文章

  1. android OkHttp form 上传图片和参数
  2. 10分钟搞懂:亿级用户的分布式数据存储解决方案
  3. UVA12325Zombie's Treasure Chest 宝箱
  4. LightOJ - 1027 A Dangerous Maze —— 期望
  5. C++ 在派生类中使用using声明改变基类成员的可访问性
  6. android url格式化,Android利用SpannableString实现格式化微博内容
  7. 树莓派摄像头_Arducam 8MP重磅来袭,为树莓派4B构建完全同步的双摄像头方案~
  8. .net core 调用c dll_C++ 调用C封装DLL库的两种方式
  9. Mysql 数据库字符集转换及版本升级/降级的详细教程
  10. 【Java从0到架构师】RocketMQ 基础 - 应用、核心组件、安装
  11. 自定义sql_基于Calcite自定义SQL解析器
  12. UINavigation​Controller 的详解(基于 API )
  13. mysql 数据导入导出说明
  14. 抽空写了个小游戏(未完待续)
  15. 大使、布道师、贡献者,OpenHarmony社区发起三大贡献者激励计划
  16. favicon.ico介绍,网页图标的制作动态网页图标
  17. android 服务检测,Android检测某个服务是否还活着代码
  18. OpenGL基础绘制
  19. 如何在sap里设置自定义打印纸张
  20. ABP框架下文件下載

热门文章

  1. 985毕业,3年大数据经验,面试阿里腾讯失败,只因做不好报表
  2. 从业16年,经历了这7个数据仓库的变化,总结出了这份干货
  3. 关于数据分析的4点心得:维度、指标、KPI
  4. GDS 的Tide配置(使用spring)
  5. 抠图为什么要用绿布_逆天抠图,Photoshop 2020天神下凡
  6. dajngo3,vue3前端项目搭建,vue项目结构的介绍
  7. python安装pillow图形处理库
  8. python字符串转义表
  9. python实现代码_python感知机实现代码
  10. 补码乘法实验原理_你真的理解补码吗?