概率算法 蒙特卡罗算法

/***Date:2014.12.11***/

//概率算法思想:统计学思路。

//基本过程:1)将问题转化为应的容易计算面积的几何图形S,问题结果对应几何图形中的某一部分S1;

////////////2)向几何图形中随机撒点;

////////////3)统计几何图形S、S1中的点数,根据二者面积关系以及二者中的点数来计算得到结果;

////////////4)判断结果是否达到需要精度结果,若符合则输出,否则继续(2)步骤。

//蒙特卡罗(Monte Carlo)算法

//均匀撒点:利用随机函数实现,产生(0,1)之间随机坐标值[x,y];

//区域判断:通过计算 x^2 + y^2 <=1 实现。

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <time.h>

double MontePI(int n)

{

double PI,x,y;

int i,sum;

sum = 0;

srand((unsigned)time(NULL));//64位要强转一下,要不然虽可执行,但不安全,PS,我电脑VS都64位

for (i = 1;i < n;i ++)

{

x=(double)rand()/RAND_MAX;

y=(double)rand()/RAND_MAX;

if (x*x + y*y <= 1)

{

sum ++;

}

}

PI = 4.0 * sum /n;

return PI;

}

int main()

{

int n;

double PI;

printf("蒙特卡罗概率算法计算 π:\n");

printf("输入点的数量(数量越多,结果越接近真实值):");

scanf_s("%d",&n);

PI = MontePI(n);

printf("π =  %f\n",PI);

system("pause");

return 0;

}

时间: 2024-08-07 13:13:33

概率算法 蒙特卡罗算法的相关文章

初识蒙特卡罗算法

蒙特卡罗算法,在我看来,是一个很神奇的算法,它可以模拟出很多场景,并且模拟出来的数据,可能与真实的数据相差无几,但模拟的成本远远低于真实数据的获取. 今天,我就用蒙特卡罗算法,做两个简单的模拟.一个是π值计算,另外一个求积分. 一.π值 π值是一个无理数,无限不循环,公元480年左右,南北朝时期的数学家祖之冲进得出精确到小数点后7位的结果,今天,我们用计算机来模拟一把,我模拟的结果如何. 首先来说明模拟的思路,如下图所示,通过推导出正方形和内切圆面积存在比例关系,只要计算出它俩的面积比值,我们就

蒙特卡罗算法(Monte Carlo method)

蒙特卡罗方法概述 蒙特卡罗方法又称统计模拟法.随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法.将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解.为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名. 蒙特卡罗方法的基本思想 用事件发生的"频率"来决定事件的"概率".高速电子计算机使得用数学方法在计算机上大量.快速地模拟这样的试验成为

算法期末考试练习题

一.选择题 1.算法分析中,记号O表示(B),记号?标售(A),记号Θ表示(D) A 渐进下界 B 渐进上界 C 非紧上界 D 紧渐进界 E 非紧下界 2.以下关于渐进记号的性质是正确的有:(A) A  f(n) =Θ(g(n)),g(n) =Θ(h(n)) ⇒f(n) =Θ(h(n)) B  f(n) =O(g(n)),g(n) =O(h(n)) ⇒h(n) =O(f(n)) C  O(f(n))+O(g(n)) = O(min{f(n),g(n)}) D  f(n) = O(g(n)) ⇔g

ACM 算法实现

实验一 统计数字问题 1.问题描述:一本书的页码从自然数1 开始顺序编码直到自然数n.书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0.例如,第6 页用数字6 表示,而不是06 或006 等.数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9.2.题目分析:考虑由0,1,2,…,9组成的所有n位数.从n个0到n个9共有个n位数,在这些n位数中,0,1,2,…,9每个数字使用次数相同,设为. 满足如下递归式:由此可知,.据此,可从低位向高位进行

【先进的算法】Lasvegas算法3SAT问题(C++实现代码)

转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46469557 1.SAT问题描写叙述 命题逻辑中合取范式 (CNF) 的可满足性问题 (SAT)是当代理论计算机科学的核心问题, 是一典型的NP 全然问题.在定义可满足性问题SAT之前.先引进一些逻辑符号. 一个 SAT 问题是指: 对于给定的 CNF 是否存在一组关于命题变元的真值指派使得A 为真. 显然, 假设A 为真, 则 CNF 的每一个子句中必有一个命题变元为 1 (真

Lasvegas+回溯算法解决3SAT问题(C++实现代码)

转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46507919 1.SAT问题描述 命题逻辑中合取范式 (CNF) 的可满足性问题 (SAT)是当代理论计算机科学的核心问题, 是一典型的NP 完全问题.在定义可满足性问题SAT之前,先引进一些逻辑符号. 一个 SAT 问题是指: 对于给定的 CNF 是否存在一组关于命题变元的真值指派使得A 为真. 显然, 如果A 为真, 则 CNF 的每个子句中必有一个命题变元为 1 (真) .

算法设计原则

在平时的工作中遇到纯粹的算法设计的工作内容并不多,但是算法在编程中的重要性是不言而喻的,再怎么拔高算法的地位都不为过. 那么在设计算法中有什么可以遵循的原则吗? 答案是有的,算法在设计的过程中可以遵循如下五个原则. 1.穷举算法思想 穷举算法思想就是从所有的可能结果中一个一个的试验,知道试出正确的结果.具体的操作步骤如下: 1)对每一种可能的结果,计算其结果: 2)判断结果是否符合题目要求,如果符合则该结果正确,如果不符合则继续进行第1)步骤. 穷举算法思想的经典例子为鸡兔同笼为题(又称龟鹤同笼

Lasvegas算法解决3SAT问题(C++实现代码)

转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46469557 1.SAT问题描述 命题逻辑中合取范式 (CNF) 的可满足性问题 (SAT)是当代理论计算机科学的核心问题, 是一典型的NP 完全问题.在定义可满足性问题SAT之前,先引进一些逻辑符号. 一个 SAT 问题是指: 对于给定的 CNF 是否存在一组关于命题变元的真值指派使得A 为真. 显然, 如果A 为真, 则 CNF 的每个子句中必有一个命题变元为 1 (真) .

算法设计与分析 - 李春葆 - 第二版 - pdf-&gt;word v3

1 1.1 第1章─概论 2 3 1.1.1 练习题 4 1. 下列关于算法的说法中正确的有( ). 5 Ⅰ.求解某一类问题的算法是唯一的 6 Ⅱ.算法必须在有限步操作之后停止 7 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 8 Ⅳ.算法执行后一定产生确定的结果 9 A. 1个 B.2个 C.3个 D.4个 10 2. T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是( ). 11 A.T(n)= T(n-1)+1,T(1)=1 B.T(n)= 2n2 12 C.T(n)