算法_9:随机算法

数值概率算法

http://blog.csdn.net/a316212802/article/details/42110691

随机数

  • 伪随机数
  • 线性同余法:选择4个数,模数m, 倍数 a, 增量 c, 种子 x0 , 满足 2<=a<m,0<=c<m,0<=x0<m
    生成伪随机数序列: 0<=xn<m : xn+1=(axn+c)mod m ; x0=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[n]!=-1) 
      { 
       printf("%d ",n); 
       a[n]=-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,由于投入点在正方形内均匀分布,则落入圆内的点的概率是:

(PIpow(r,2))4pow(r,2)=PI4

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

这里写代码片

计算定积分

算法_9:随机算法_第1张图片

舍伍德算法

http://blog.csdn.net/dyllove98/article/details/9531899
http://blog.csdn.net/liufeng_king/article/details/9038771

  • 舍伍德算法消除算法所需计算时间与输入实例间的关联
  • 设:A是一个确定性的算法,输入实例为x时,所需的计算时间是 tA(x) Xn 是算法A的输入规模为n的全体,输入规模是n时的算法A所需的平均时间是:
    t¯A(n)=xXntA(x)/|Xn|
  • 希望获取随机化的算法 B,使得每一个 xXn 均有 tB(x)=t¯A(n)+s(n) ,
    算法B关于n规模的随机实例的平均时间是:
    t¯B(n)=xXntB(x)/|Xn|
  • 易得: t¯B(x)=t¯A(n)+s(n) ,
    s(n)t¯A(n)

线性时间选择算法

随机洗牌算法

拉斯维加斯算法

大质数分解:pollard rtho算法

蒙特卡洛算法

你可能感兴趣的:(算法_9:随机算法)