2014年4月22日 星期二

A演算法期中考(上)

演算法筆記

(小考摘要/ch-1,2)
1.è徵求註解?
Let f(n)=n, g(n)=n^2
Min(f(n),g(n))=n     //
Theta(f(n)+g(n))=theta(n+n^2)=theta(n^2)   //n不見了?
Min(f(n)),g(n))!=theta(f(n)+g(n))

n值很大的時候n^2的值會超級大 大到可以忽略n值了

所以就沒有寫n

就像n^2+3n+1 若只是要求近似值就只看n^2的值


2.èbig-oh代入法
Let f(n)=1, g(n)=n          //
Suppose g(n)=O(f(n))
g(n)<=C f(n)          //O(f(n))=代成<=C f(n)
n/1<=C*              //啥意思?可以省略嗎?
n<=C                //


3.èbig-oh代入法
f(n)=O((f(n))^2)       //
Let f(n)=1/n
f(n)<=C*(f(n))^2      //O( )=代成<=C*
1/n <=C*1/(n^2)
(n^2)/n <=C
N<=C


4.èbig-oh代入法
Let f(n)=2n
g(n)=n
Suppose 2^f(n) =O(2^g(n))
2^f(n) <=C*2^g(n)          //O( )=代成<=C*
2^(2n) <=C*(2^n)
(4/2)^2n <=C*(2^n)           //?
(2^n)(2^n) <=C*(2^n)
2^n <=C (4/2)^n <=C






5.ètheta代入法
f(n)= theta(f(n/2))
f(n) <=C*f(n/2)   //=theta( )代成 <=C*
If f(n)=2^n                             // 2^n <= C*(2^(n/2)) =(2^(1/2)) ^n(2/(SR.2))^n <=C
2^n <= C*2^(n/2)=( 2^1/2 )^n = (SR.2)^n    //

(2/1)^n <=C(SR.2)^n
(2/(SR.2))^n <=C

(問答題)
在排序分析中,通常最好的狀況是輸入的資料「已經排序過」,最差的狀況是「剛好反向」的順序,但是一般來說,輸入的資料應該介於這兩者之間。不過我們大部份著重在尋找最差情況的執行時間,也就是任何輸入量n的最長執行時間,請問理由為哪三個?
è
1.最保險,確保執行過程沒有更壞的情況。
2.最差情況常常發生時:如所尋資料不在該資料庫中。
3.平均情況與最差情況一樣糟。






(資料結構與排序、堆積/ch-3,4,5)

(習題與補充)
1.背包問題 (0/1 knapsack problem)

2.複雜度分析(complexity analysis)

3.遞迴公式(Recursion)

a.代入法SubstitutionM*2

(a1)  set f(n)={f(n-1)+c1if n>=1; c2 if n=0 } ask f(n)=?

f(n)=f(n-1)+c1
=(f(n-2)+c1)+c1
=f(n-2)+2c1
.....
=f(n-3)+3c1
.....
=f(0)+Nc1
=c2+Nc1

(a2)set f(n){f(n/2)+c1 if n=(2^k),k>=1 ; c2 if n=1} ask f(n)=?

let n=(2^k)  also k=log_2 N
f(n)=f(n/2)+c1=(f(n/(2^2))+c1)+c1=f(n/(2^2))+2c1
.....
f(n/(2^2))+kc1=f(1)+kc1=c2+kc1=c2+c1log_2 N,N>=1

(a3)階乘的遞迴呼叫
a3.1定義n!={1,if n=0; n*(n-1)!, if n>0}

a3.2程式Code
{int f;
if(n==0) return 1;  //終止條件
f=fact(n-1);  //遞迴呼叫
return (n*f);
}
b.歸納法InductionM
(b1) Fibonacci數列
定義Fib(n)={0,if n=0;1,ifn=1;Fib(n-1)+Fib(n-2),if n>=2}

程式Code
int Fib(int n)
{
 int i,j;
if(n==0)
return(0)  //end condition: n=0
if(n==1)
return(1) //e.c. :n=1
i=Fib(n-1);
j=Fib(n-2);
return (i+j);
}

(c.特徵多項式法)
ex.二項式係數
公式 c(n,k)=(n!/k!(n-k)!)
定義c(n,k)={1.if k=0 or k=n};  c(n-1,k-1)+c(n-1,k), if n>k>0}
程式Code
int C(int n, int k)
{
if(k==0 || k==n)return 1;   //e.c.
return (C(n-1,k-1)+C(n-1,k));  //recursive calling
}


(計算複雜度/黃ch8.6)
1.定義.9
2.Note.14
3.定理.8
4.定理.9
5.Note.15
6.定理.10
7.推廣.3
8.Note.16


1.è定義.9
2.èNote.14
a. f(n)=O(g(n))有時寫成f(n)O(g(n))
b. f(n)=Θ(g(n)) <=>f(n)=O(g(n))f(n)=Ω(g(n))
c. 複雜度種類
C1.常級O(1)   //constant
C2.對級O(lg n)  //O(log2 n), logarithmic
C3.線性級O(n)   //linear
C4.線性對級O(n lg n)  //O(n log2 n),log linear
C5.平方級O(n^2)   //quadratic
C6.立方級O(n^3)   //cubic
C7.多項式級O(n^m),m=0,1,2…  //polynomial
C8.指數級O(C^n), c>1  //exponential
C9.階乘級O(n!)  //factorial

d. f(n)=O(g(n))指除有限項外g(n)f(n)的上界g(n)的成長速率至少與f(n)一樣快但求g(n)時我們都要求找最小上界例如上例中按定義寫成f(n)=O(n^3)f(n)=O(2^n)皆可β.平方級f(n)=O(n^2)才最適
e. f(n)=Ω(g(n))指除有限項外g(n)f(n)的下限 f(n)的成長速率至少與 g(n)     一樣快同理求 g(n)時一般要求找最大下界
f. f(n)=Θ(g(n))可看成 f(n)g(n)的成長速率一樣快
3.è定理.8
4.è定理.9 set f(n)=(AkN^k)+(A(k-1)N^(k-1))+…..+A1N+A0, above A0,…,Ak R
and Ak>0, then …
(1) f(n)=Ω(n^k)
(2) f(n)=Θ(n^k)




4aè.19.(2)→g(n)=Θ(n^2)
(線性級=平方級取theta)
4bè.20. prove→lg.2(n!)=Θ(n lg n)
(階乘對數=線性對數級取theta)
4cè.21. prove→lg.a N=Θ(lg.b N)
(a底對數=b底對數取theta)

5è.Note.15
f(n)=O(g(n))
f(n)=Ω(g(n))
5aè.T(n)=O(2^n)   //指數級取big-O
6è.定理.10
if  f1(n)=O(g1(n)),f2(n)=O(g2(n)) then
(1)→二函數和(f1+f2)(n)=O(max(g1(n),g2(n)))
(2)→二函數積(f1f2)(n)=O(g1(n)g2(n))
7è.推廣.3
If  f1(n)=O(g(n)), f2(n)=O(g(n)), then N的二函數和(f1+f2)(n)=O(g(n)) //G函數取big-O

8è.Note.16
8aè.which of following is the largest as n
(1)n^100,(2)2^n,(3)(ln n)^n,(4)n^(SR<n>)N(N平方根)次方,(5)n!
→將這些函數 log得:
lg(n^100)=100 lg(n),
lg(2^n)=n lg(2),
lg(ln(n)^n)=n lg(lg(n)),
lg(n^(SR<n>))=SR<n> lg(n),
lg(n!)=Θ(n lg n)
//N階取log=n lg ntheta

所以成長速率最快者為第五的 n!

(黃補)
一、計算複雜度(ch-8.6)
二、遞迴式(ch-5.1,2)
六、搜尋樹(ch-7.5)

(謝補)
三、基本形式
四、排序
五、堆積heap ?
七、雜湊


(目次)
一、簡介
1.特性
2.步驟
3.表示
4.正確性
5.效能評估
6.最佳化

//黃ch-8 (三大演算法、傳輸網、配對論、複雜度)

二、效能
1.概說
2.時間複雜度(theta, big-O,omega)   //黃ch-8
3.空間複雜度
4.遞迴公式(取代、支配)   
//黃ch-5(關係式、基礎遞迴關係、轉換法求解、生成函數法求解、應用與其他)

三、基本形式(DS)  //謝ch-3,4
1. linked-list
2. stack
3. queue
4. BinaryTree
5.summary

四、排序sorting   //謝ch-7
1.基本法(選擇、氣泡、插入)
2.合併法
3.快速法
4.線性時序
5.小結

五、堆積heap  //?
1.概說
2.建立
3.堆積排序
4,優先權佇列
5,小結

六、搜尋樹searchingTree   //謝ch-6,8
1.線性搜尋
2.BS
3.BST
4.平衡樹(AVLT, RBT, BT)
5.小結

//黃ch-7(樹概說、有根、生成、最小生成、搜尋樹)

七、雜湊hash   //謝
1.雜湊函數
2.碰撞問題
3.單向
4.小結

期中考


(八、字串搜尋)
九、圖論          //黃ch-6

十、加權圖

(十一、網路流)
十二、貪婪演算法
十三、動態程序規畫

十九、NP完全的問題

(十四、回溯與分支設限)
(十五、數論)
(十六、計算幾何)
(十七、矩陣)
(十八、多項式與FFT)

(廿、平行演算法)



沒有留言:

張貼留言