算法_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算法
蒙特卡洛算法
相关文章推荐
- 10+ 最流行的 jQuery Tree 菜单插件
- 开源一个完整的iOSApp《丁丁美图》供初学者学习
- javascript闭包
- 接口和抽象类有什么区别
- 关于方法区内存溢出!
- 无线智能小车(一)
- 【02】SimpleAdapter和OnScrollListener
- Collocations
- struts(tags)
- 搜索(DLX):HOJ 1017 - Exact cover
- 单例模式
- bzoj 1059: [ZJOI2007]矩阵游戏
- 【计算机视觉】粒子滤波跟踪
- AngularJS 使用 UI Router 实现表单向导
- Eclipse 使用 maven 构建demo
- 我的决心书Linux
- Android官方提供的支持不同屏幕大小的全部方法
- ios-基础之【4】-协议
- zero-copy
- struts(result)