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

    技术2022-05-20  48

    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


    最新回复(0)