1. 程式人生 > >一些有關複雜度的問題

一些有關複雜度的問題

算出東西儘量記下來,不要重複計算啊!!

1.計算a^n f(a,n) 用遞迴的方法

package fads;

public class af {
	public static int f(int a,int n)
	{
		if  (n==0)  return 1;
		else
		{
			if((n&1)==0)//偶數     (n&1)==0      加括號
			{int m=f(a,n/2);
			 return   m*m;     }
			
			else  
			{int m=f(a,(n-1)/2);
				return m*m*a;}
} } public static int f2(int a,int n) { if (n==0) return 1; else { if((n&1)==0)//偶數 (n&1)==0 加括號 { return f(a,n/2)*f(a,n/2); } else { return f(a,(n-1)/2)*f(a,(n-1)/2)*a;} } } public static void main(String[] args) { for(int i=0;
i<6;i++) System.out.println(f(3,i)); } }

我們注意f和f2的區別,
f由於用m記下值,所以複雜度Ο(log n)
f2沒有記下值,重複計算,複雜度Ο(n)

2^ n=2^ (n-1)+2^(n-1)
利用該式來計算2^n
下面是虛擬碼
第一種寫法,加法複雜度是Ο(2^n)
第二種,加法複雜度是Ο(n)
Algorithm Power(int n)
{
if n = 0 return 1;
else return Algorithm Power(n − 1) + Algorithm Power(n − 1);}

Algorithm Power2(int n)

{if n = 0 return 1;
else

{int m=Algorithm Power(n − 1);
return m+m;}
}