您的位置:首页 > 其它

算法_9:随机算法

2016-03-01 22:40 393 查看

数值概率算法

/article/2933156.html

随机数

伪随机数

线性同余法:选择4个数,模数m, 倍数 a, 增量 c, 种子 x0x_0, 满足 2<=a<m,0<=c<m,0<=x0<m2<=a

生成伪随机数序列: 0<=xn<m0<=x_n : xn+1=(axn+c)mod mx_{n+1}=(ax_n+c) mod \ m; x0=d,d是该随机序列的种子x_0=d, d是该随机序列的种子

gcd(m , a )=1, 且a是素数

//产生0 ~ 2^{32} 之间的随机数
#include<stdlib.h>
#include<stdio.h>
#include<time.h> //当前时钟为种子
main()
{
int i;
srand((ussigned)time(NULL)); //srand设置种子数, 0~65535
for(i=0;i<10;i++)
printf("%d",rand()); //打印10个随机数
printf("\n");
}

//生成0~1的随机数
#include<stdio.h>
#include<time.h> //当前时钟为种子
main()
{
int i;
srand((ussigned)time(NULL)); //srand设置种子数, 0~65535
for(i=0;i<10;i++)
printf("%.1f",rand()/(pow(2,16)*1.0)); //打印10个随机数
printf("\n");
}

// 生成0-99 的随机数
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
main( )
{int i;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
printf( "%d\n", rand()%100);
}

//20个0-99 不重复的随机数
定义一个组数,存入0~99,随机取一个,做个标记,这样取20个就不会有重复。
程序代码:
#include <stdio.h>
#include <time.h>
int main(void)
{
int i,n,a[100];
srand(time(0));
for(i=0;i<100;i++)
a[i]=i;
i=0;
while(1)
{
n=rand()%100;
if(a
!=-1)
{
printf("%d ",n);
a
=-1;
if((++i)==20)break;
}
}
printf("\n\n");
return 0;
}


总结:

1.产生一个随机数(从0到32767)

srand((unsigned) time(NULL)); //为了提高不重复的概率

rand(); //产生随机数

2.产生从m到n的随机数(包括m,不包括n)

srand((unsigned) time(NULL)); //为了提高不重复的概率

rand()%(n - m + 1) + m; //使用时将m和n换为具体数即可

随机投点法计算pi值

设直径为r的圆和外切正方形。向正方形随机投n个点,设落在圆内的点的数为k,由于投入点在正方形内均匀分布,则落入圆内的点的概率是:

(PI∗pow(r,2))4∗pow(r,2)=PI4\frac{(PI*pow(r,2))}{4* pow(r,2)}=\frac{PI}{4}

n足够大的时候, k与n之比就逼近这个概率, 所以PI 约等于 (4* k)/n

这里写代码片


计算定积分



舍伍德算法

/article/1427082.html

/article/1386192.html

舍伍德算法消除算法所需计算时间与输入实例间的关联

设:A是一个确定性的算法,输入实例为x时,所需的计算时间是tA(x)t_A(x) 。 XnX_n 是算法A的输入规模为n的全体,输入规模是n时的算法A所需的平均时间是:

t¯A(n)=∑x∈XntA(x)/|Xn|\overline{t}_A(n)=\sum_{x \in X_n}t_A(x)/|X_n|

希望获取随机化的算法 B,使得每一个x∈Xnx \in X_n均有tB(x)=t¯A(n)+s(n)t_B(x)=\overline{t}_A(n)+s(n),

算法B关于n规模的随机实例的平均时间是:

t¯B(n)=∑x∈XntB(x)/|Xn|\overline{t}_B(n)=\sum_{x \in X_n}t_B(x)/|X_n|

易得:t¯B(x)=t¯A(n)+s(n)\overline t_B(x)=\overline{t}_A(n)+s(n),

当s(n)和t¯A(n)比较可以忽略,舍伍德可以得到比较好的算法s(n)和\overline{t}_A(n)比较可以忽略,舍伍德可以得到比较好的算法

线性时间选择算法

随机洗牌算法

拉斯维加斯算法

大质数分解:pollard rtho算法

蒙特卡洛算法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: