《算法设计与分析基础》第一、二章

1. 求最大公约数的两种方法:

 

第一种,欧几里德算法:gcd(m,n)=gcd(m,m%n);

直到m%n为零时,计算结束,最大公约数为此时的m。

 

第二种,质因数解法:分别找到m和n的所有质因数,最大公约数就是公共质因数的乘积。

求质因数的方法是“埃拉托色尼筛”:设要求质因数的数为x,将从2到x的每个数存入数组。然后对于数组中满足2<=i<=√n从i*i开始到n为止,消除是i的倍数的数,剩下的数就是质因数。

 

A[i]=i;

for(i=2;i<=√n;++i){

    if(A[i]!=0)

      j=i*i;

    while(j<=n){

       A[j]=0;

       j+=i;

   }

}

 

2. 欧几里德算法是可以扩展的:

可以参照这篇文章:http://blog.csdn.net/Fioman/archive/2008/05/18/2455698.aspx

 

3. 基本的效率类型:1<logn<n<nlogn<n^2<n^3<2^n<n!

 

4. 斐波那契数列: F(n)=F(n-1)+F(n-2); F(0)=0;F(1)=1;

 

递归算法的效率很低,因为有很多函数值被重复计算,复杂度是o(([1+sqrt(5)]/2)^n),很慢;写成非递归的行时候会快很多,成为o(n)级别。使用卡西尼恒等式F(n+1)F(n-1)-F(n)^2=(-1)^n来计算的话,可以达到o(logn)级别。

 

可参照这里:http://www.360doc.com/content/10/1229/10/5159948_82232380.shtml

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值