概率算法

简介: 概率算法也叫随机化算法。分治算法、贪心算法、动态规划算法、回溯法、分治界限算法这些算法的每一计算步骤都是确定的,概率算法则允许算法在执行过程中随机地选择下一个计算步骤。

概率算法也叫随机化算法。分治算法、贪心算法、动态规划算法、回溯法、分治界限算法这些算法的每一计算步骤都是确定的,概率算法则允许算法在执行过程中随机地选择下一个计算步骤。在很多情况下,算法在执行过程中面临选择时,随机性选择比最优选择省时,因此概率算法可以在很大程度上降低算法的复杂度。
大致可分4类:

  1. 数值随机化算法
  2. 蒙特卡罗(Monte Carlo)算法
  3. 拉斯维加斯(Las Vegas)算法
  4. 舍伍德(Sherwood)算法

各算法特点对比:

1.数值随机化算法

用于数值计算,求得的往往是近似解,比如通过概率投点的思想计算圆周率、计算定积分.

这里写图片描述

如图,向边长为1的正方形内随机投n个点,记落入圆内的点的个数为k,根据几何概型,k/n近似等于圆的面积除以正方形对面积。只计算第一象限,1/4*pi*1*1除以1*1近似等于k/n,pi=4*k/n
程序验证:

#include <iostream>
#include <ctime>
#include <math.h>
using namespace std;
int main(){
   srand((unsigned)time(0));
   double x,y;

   int k=0,n=1000000;
   for(int i=0;i<n;i++){
      x=rand()/(double)(RAND_MAX);     //随机数x
      y=rand()/(double)(RAND_MAX);    //随机数y x、y在0到1之间
      if((pow(x,2)+pow(y,2))<=1) k++; 

   }

    cout<<(double)4*k/n<<endl;
}

n等于100:
这里写图片描述

n等于1000:
这里写图片描述
n等于100000000
这里写图片描述
可以看到,n约大pi的值越精确.当n等于1亿的时候,可以稳定到3.141
可以用相同的方法计算定积分.

2.蒙特卡罗(Monte Carlo)算法

能求得问题的一个解,但是这个解未必正确

3.拉斯维加斯(Las Vegas)算法

要么找到的解是正确的,要么找不到解

4.舍伍德(Sherwood)算法

一定能找到解,而且是正确解

后面三种算法的实例等到有时间再补充。

目录
相关文章
|
设计模式 机器学习/深度学习 SQL
软考高级系统架构设计师通关经验分享
为什么考系统架构设计师是国家设立的计算机技术与软件专业技术资格考试(简称软考)中的一个高级科目,属于工程师高级职称系列,具有一定含金量。浙江省每年通过软考高级的人数约为1000+人,其中系统架构设计师科目的通过人数约为200+人。从学习角度来说,通过准备系统架构设计师的考试的过程,可以查漏补缺,并且了解一些系统架构设计相关的基础知识,实现一定程度上的自我提升;从目的性的角度来说,通过考试,可以在一
12727 4
软考高级系统架构设计师通关经验分享
|
算法 Java 数据安全/隐私保护
如何使用OpenSSL工具生成根证书与应用证书
如何使用OpenSSL工具生成根证书与应用证书 一、步骤简记 [java] view plain copy   // 生成顶级CA的公钥证书和私钥文件,有效期10年(RSA 1024bits,默认)   openssl req -new -x509 -days 3650 -keyout CARoot1024.
3528 0
|
6月前
|
消息中间件 存储 Kafka
微服务中常用的几种通信方式
微服务中常用的几种通信方式
|
Kubernetes Cloud Native Java
灰度发布、蓝绿部署、金丝雀都是啥?
在滚动部署中,应用的新版本逐步替换旧版本。实际的部署发生在一段时间内。在此期间,新旧版本会共存,而不会影响功能和用户体验。这个过程可以更轻易的回滚和旧组件不兼容的任何新组件。
灰度发布、蓝绿部署、金丝雀都是啥?
|
7月前
|
搜索推荐
8个邮件营销平台分析及对比
本文对比了8个热门邮件营销平台:Aoksend适合初创企业,Constant Contact用户友好,Sendinblue提供多元营销服务,GetResponse功能全面,蜂邮EDM适合大规模活动,MailerLite价格实惠,Campaign Monitor专业定制,ActiveCampaign侧重营销自动化。选择时应考虑自身需求和预算。
|
7月前
|
缓存 关系型数据库 MySQL
MySQL数据库优化技巧:提升性能的关键策略
索引是提高查询效率的关键。根据查询频率和条件,创建合适的索引能够加快查询速度。但要注意,过多的索引可能会增加写操作的开销,因此需要权衡。
|
前端开发 JavaScript 算法
Github 最受欢迎的 35 个项目一览
Github 最受欢迎的 35 个项目一览
464 0
|
算法
秒懂算法 | 哈夫曼编码贪心算法
讲解哈夫曼编码算法的贪心策略及正确性证明。
541 0
秒懂算法 | 哈夫曼编码贪心算法
|
JSON JavaScript 前端开发
Vue 基于VSCode结合Vetur+ESlint+Prettier统一Vue代码风格
Vue 基于VSCode结合Vetur+ESlint+Prettier统一Vue代码风格
403 0