山东师范大学计算机实验教学中心 精品实验课程>>算法设计与分析 第七章 概率算法

Cover page images

算法设计与分析

第七章 概率算法

任课教师:徐连诚





第七章 概率算法

引言(1)

引言(2)

随机数

数值概率算法

用随机投点法计算π值

计算定积分(1)

计算定积分(2)

解非线性方程组

舍伍德(Sherwood)算法

线性时间选择算法

搜索有序表

跳跃表(1)

跳跃表(2)

跳跃表(3)

跳跃表(4)

跳跃表(5)

跳跃表(6)

跳跃表(7)

拉斯维加斯(Las Vegas)算法(1)

拉斯维加斯(Las Vegas)算法(2)

n后问题(1)

n后问题(2)

整数因子分解(1)

整数因子分解(2)

Pollard算法(1)

Pollard算法(2)

蒙特卡罗(Monte Carlo)算法

基本思想(1)

基本思想(2)

主元素问题(1)

主元素问题(2)

template
bool Majority(Type *T, int n)
{// 判定主元素的蒙特卡罗算法
  int i=rnd.Random(n)+1;
  Type x=T[i];    // 随机选择数组元素
  int k=0;
  for (int j=1;j<=n;j++) if (T[j]==x) k++;
  return (k>n/2);  // k>n/2 时T含有主元素
}
template
bool MajorityMC(Type *T, int n, double e)
{// 重复调用算法Majority
  int k=ceil(log(1/e)/log(2));
  for (int i=1;i<=k;i++)
  if (Majority(T,n)) return true;
  return false;
}

素数测试(1)

素数测试(2)

void power( unsigned int a, unsigned int p, unsigned int n,  unsigned int &result, bool &composite)
{// 计算mod n,并实施对n的二次探测
    unsigned int x;
    if (p==0) result=1;
    else
    {  power(a,p/2,n,x,composite);  // 递归计算
       result=(x*x)%n;            // 二次探测
       if ((result==1)&&(x!=1)&&(x!=n-1)composite=true;
       if ((p%2)==1) result=(result*a)%n;  // p是奇数
    }
}
bool Prime(unsigned int n)
{//测素数的蒙特卡罗法
    RandomNumber rnd;
    unsigned int a, result;
    bool composite=false;
    a=rnd.Random(n-3)+2;
    power(a,n-1,n,result,composite);
    if (composite||(result!=1)) return false; else return true;
}