《演算法設計與分析基礎》第一、二章
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. 歐幾里德演算法是可以擴充套件的:
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)級別。