Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
4
Ch ng 1
CÁC KHÁI NI M C N B N
Môn h c: Phân tích và thi t k gi i thu t
5
N i dung
1. Ki u d li u tr u t ng2. quy3. Phân tích gi i thu t
6
1.Ki u d li u tr u t ng
• Mô t m t c u trúc d li u theo các tác v (operations) làmvi c trên c u trúc d li u thì ti n l i h n là di n t nó theonh ng chi ti t thi công (implementation details).
• Chúng ta nên tách nh ng khái ni m v c u trúc d li u rakh i nh ng chi ti t thi công.
• Khi m t c u trúc d li u c nh ngh a theo cách nhv y ta s có m t ki u d li u tr u t ng (abstract data type)hay ADT.
M t ki u d li u tr u t ng là m t mô hình toánh c i cùng v i nh ng tác v c nh ngh a trênmô hình này.
7
Vài thí d v Ki u d li u tr u t ng• M t t p (set) là m t t p h p g m zero hay nhi u ph n t .
M t ph n t không c phép xu t hi n nhi u h n m tl n trong t p. M t t p g m n ph n t c ký hi u là {a1,a2,…,an}, nh ng v trí c a m t ph n t trong m t t p làkhông quan tr ng.
• M t a t p (multiset) là m t t p mà trong ó m t ph n tc phép xu t hi n nhi u h n m t l n. Thí d , {5,7,5,2} là
m t a t p. M t a t p có th có nh ng tác v sau:initialize (kh i t o)insert (thêm vào)is_empty (th a t p có r ng)delete (xoá)findmin (tìm ph n t bé nh t)
8
Vài thí d v Ki u d li u tr u t ng (tt)
• M t chu i (sequence) là m t t p h p có th t c a zero hay nhi u ph n t ; c ký hi u là <a1, a2,…, an>. V trí c am t ph n t trong m t chu i là có ý nghiã. M t chu i có thcó nh ng tác v sau:
initialize (kh i t o)length (chi u dài)head (ph n t u)tail (ph n uôi)concatenate (ghép k hai chu i)
9
Gi i m t bài toán b ng ADT
th y ích l i c a ki u d li u tr u t ng, th xét bài toánsau:Cho m t m ng (array) g m n s , A[1..n], hãy xác nh k ph nt l n nh t trong m ng, v i k n. Thí d , n u A là {5, 3, 1, 9, 6}, và k = 3, thì k t qu là {5, 9, 6}.
Không d xây d ng m t gi i thu t gi i bài toán trên.Ta th dùng ki u d li u tr u t ng a t p (multiset) v i cáctác v :
initialize(M),insert(x, M),deleteMin(M),findMin(M)
10
Suy ngh trên a t p M, ta có th vi t m t gi i thu t nhsau:
Initialize(M);for i:= 1 to k do
Insert(A[i], M);for i:= k + 1 to n do
if A[i] > FindMin(M) thenbegin
DeleteMin(M); Insert(A[i],M)end;
Trong thí d trên, ta th y ki u d li u tr u t ng ã làmn gi n hóa vi c xây d ng gi i thu t b ng cách không b n
tâm n nh ng chi ti t thi công hay hi n th c hóa.
11
Thi công m t ki u d li u tr u t ng
Quá trình dùng m t c u trúc d li u c th hi n th c hóam t ADT c g i là thi công ki u d li u tr u t ng. Trongs thi công này, ph n d li u tr u t ng c hi n th c hóa b ng m t c u trúc d li u c th và ph n các tác v tr ut ng c hi n th c hóa b ng các tác v c th h n.
AbstractData
Operations
DataStructure
Concreteoperations
12
Thi công m t ki u d li u tr u t ng (tt.)
Có th dùng m ng (array) hay danh sách liên k t (linked list)thi công t p h p (set).
Có th dùng m ng (array) hay danh sách liên k t (linked list)thi công chu i.
V i ki u d li u tr u t ng a t p nh trong thí d tr c, tacó th dùng hàng i có u tiên (priority queue) thicông. Và sau ó ta có th dùng c u trúc d li u heap thicông hàng i có u tiên.
13
2. quyH th c truy h i
Thí d 1: Hàm tính giai th aN! = N.(N-1)! v i N 1
0! = 1Nh ng nh ngh a hàm quy mà ch a nh ng i s nguyên
c g i là nh ng h th c truy h i (recurrence relation).
function factorial (N: integer): integer;begin
if N = 0then factorial: = 1else factorial: = N*factorial (N-1);
end;
14
H th c truy h i
Thí d 2: S Fibonacci
H th c truy h i:FN = FN-1 + FN-2 for N 2
F0 = F1 = 11, 1, 2, 3, 5, 8, 13, 21, …
function fibonacci (N: integer): integer;begin
if N <= 1then fibonacci: = 1else fibonacci: = fibonacci(N-1) +
fibonacci(N-2);end;
15
M t cách khác: Ta có th dùng m t m ng ch a nh ng tr si tr c trong khi tính hàm fibonacci. Ta có m t gi i thu t
không quy.
procedure fibonacci;const max = 25;var i: integer;F: array [0..max] of integer;begin
F[0]: = 1; F[1]: = 1;for i: = 2 to max do
F[i]: = F[i-1] + F[i-2]end;
16
Chi n l c Chia- -tr
Nhi u gi i thu t hay có c u trúc quy: gi i m t v ngi i thu t g i chính nó m t hay nhi u l n i phó v inh ng v n con (subproblem) có quan h ch t ch v i nhau.
Nh ng gi i thu t nh v y tuân theo cách ti p c n chia- -tr(divide and conquer):
Gi i thu t phân rã v n thành nh ng v n con, gi inh ng v n con này và k t h p nh ng l i gi i c a nh ngv n con thành l i gi i cho v n nguyên th y.
Chi n l c này bao g m 3 b c sau ây m i c p quy:phân chia (divide)tr (conquer)k t h p (combine)
17
Thí d : Xét vi c v ch nh ng v ch cách nhau 1 inch trên 1cây th c: có m t nét v ch t i i n ½ inch, nét v ch ng nh n nh ng o n ¼ inch, nét v ch ng n h n n a nh ng
o n 1/8 inch, v.v...
procedure rule(l, r, h: integer);/* l: left position of the ruler; r: rightposition
of the ruler */var m: integer;begin
if h > 0 thenbegin
m: = (1 + r) div 2; mark(m, h);rule(l, m, h-1);rule(m, r , h-1)
end;end;
Gi s th t cmark(x, h) v m tv ch h n v t i vtrí x.
18
Kh quy
V n : Gi i thu t không quy th ng làm vi c h u hi uvà d ki m soát h n 1 gi i thu t quy.
Làm cách nào chuy n i m t ch ng trình quythành m t ch ng trình không- -quy t ng ng.
Ph ng pháp:Cho m t th t c quy P, m i l n có m t l nh g i quyn P, giá tr hi n hành c a các tham s và các bi n c c b
c c t vào các ng n x p (stack) x lý sau.
M i l n có m t s quay v quy v P, giá tr c a cáctham s và các bi n c c b s c khôi ph c l i t các ng nx p.
19
Kh quy (tt.)Vi c i phó v i a ch kh h i (return address) c th chi n nh sau:
Gi s th t c P ch a m t l nh g i quy t i b c l nhK, a ch kh h i K+1 s c l u t i m t ng n x p và s
c dùng quay v m c th c thi th t c P hi n hành.
procedure hanoi(n, beg, aux, end);begin
if n = 1 then writeln(beg, end)elsebegin
hanoi(n-1, beg, end, aux) ;writeln(beg, end);hanoi(n-1, aux, beg, end);
endend;
Thí d : Th t chanoi là m t tht c quy gi i bài toán Tháp Hà N i
20
procedure hanoi(n, beg, aux, end:integer);/* Stacks STN, STBEG, STAUX,STEND, and STADD correspond,respectively, to variables N, BEG, AUX,END and ADD */label 1, 3, 5;var t: integer;begin
top: = 0; /* preparation for stacks */1: if n = 1 then
begin writeln(beg, end); goto 5 end;top: = top + 1; /* first recursive call */STN[top]: = n; STBEG[top]: = beg;STAUX [top]:= aux;STEND [top]: = end;STADD [top]: = 3;/* saving return address */
n: = n-1; t:= aux; aux: = end;end: = t;goto 1;
3: writeln(beg, end);top: = top + 1; /* second
recursive call */STN[top]: = n;STBEG[top]: = beg;STAUX[top]: aux;STEND[top]: = end;STADD[top]: = 5;/* saving return address */n: = n-1; t:= beg; beg: = aux;aux: = t; goto 1;
5. /* translation of return point */if top <> 0 thenbegin
n: = STN[top];beg: = STBEG [top];aux: = STAUX [top];end: = STEND [top];add: = STADD [top];top: = top – 1; goto add
endend;
21
S duy t cây quyCách n gi n nh t duy t các nút trong m t cây nhphân theo th t n i là nh m t th t c quy nh sau:
// duy t th t n i (Inorder traversal)type
link = node;node = record
info: …….; l, r: linkend;
procedure traverse(t: link);begin
if t <> z then /* z is dummy node */begin
traverse(t.l);visit(t);traverse(t.r)
endend;
22
Th t c duy t cây ti n th t (Pre-order)
procedure traverse (t: link)begin
if t <> z thenbegin
visit(t);traverse(t.1); traverse(t.r)
endend;
Tr c khi kh quy th t c này, ta có th lo i b l nh g iquy th hai d dàng vì không có mã ch ng trình i sau
nó.L nh g i quy th hai có th c chuy n thành m t l nhgoto nh sau:
23
Kh quy uôi
procedure traverse (t: link);label 0,1;begin0: if t = z then goto 1;
visit(t);traverse(t. l);t: = t.r; goto 0;
1: end;
K thu t này c g i là kh quy uôi (tail-recursionremoval).
24
procedure traverse(t: link);label 0, 1, 2, 3;begin0: if t = z then goto 1;
visit(t);push(t); t: = t.l; goto 0;
3: t: = t.r; goto 0;1: if stack_empty then goto 2;
t: = pop; goto 3;2: end;
Chú ý: Do ch có m t a ch kh h i, 3, mà là c nh, nênta không ph i nh i nó vào stack.
Bây gi áp d ng ph ng pháp t ng quát, ta có th kh l nhg i quy còn l i trong ch ng trình.
25
procedure traverse(t: link);label 0,2;begin0: while t <> z do
beginvisit(t);push(t.r); t: = t.1;
end;if stack_empty then goto 2;t: = pop; goto 0;
2: end;
Ta có th lo i b vài phát bi u goto b ng cách dùng vòng l pwhile nh sau.
26
procedure traverse(t: link);begin
push(t);repeat
t: = pop;while t <> z dobegin
visit(t);push(t.r); t: = t.l;
end;until stack_empty;
end;
M t l n n a ta có th lo i b hai l nh goto còn l i b ng cáchdùng vòng l p repeat .
27
procedure traverse(t: link);begin
push(t);repeat
t: = pop;if t <> z thenbegin
visit(t);push(t.r); push(t.1);
end;until stack_empty;
end;
Hai vòng l p l ng nhau có th c n gi n hóanh sau:
28
tránh a nh ng cây con r ng vào stack, ta có th s ach ng trình trên thành:
procedure traverse(t: link);begin
push(t);repeat
t: = pop;visit(t);if t.r < > z then push(t.r);if t.l < > z then push(t.l);
until stack_empty;end;ây là ch ng trình không quy hoàn ch nh duy t cây
nh phân.
29
Kh hàm quy
N u th t c quy P là m t hàm, ta c n b sung vào qui t cchuy n i t ng quát m t s i m sau ây:
Thí d : Hàm tính t h pfunction comb(m, n: int):intIf (n=m or m = 0) then
return 1elsebegin
a:= comb(n -1, m);b:= comb(n-1, m -1);return (a+b);
end
1. T i câu l nh có g n a chkh h i, ta ph i khôi ph c trhàm t stack; n u c n thìthêm l nh s d ng tr hàmnày.
2. T i câu l nh return, c n avào phát bi u nh tr bi uth c i li n sau t khóa returnvà c t tr hàm tr v này vàostack.
30
int comb(int n, int m){
int top, topF;int stackN[100]; int stackM[100];int stackADD[100];int stackF[100];int a, b, add, c;top = topF = 0; //stack initialize
L0: if (m == 0 || n ==m){ c = 1, goto L3;}
else { // 1st recursive calltop = top +1 ; stackN[top] = n;stackM[top] = m;stackADD[top] =1;n = n-1; goto L0;
L1:// 2nd recursive calltop = top +1 ; stackN[top] = n;stackM[top] = m;stackADD[top] =2;
n = n-1; m = m-1; go to L0;L2: a= stackF[topF], topF = topF –1;
b = stackF[topF], topF = topF –1;c = a + b;
L3: if (top >0){n = stackN[top];m = stackM[top];
add = stackADD[top];top = top –1;
// push the resulttopF = topF + 1; stackF[top] = c;if (add == 1) goto L1;else if (add == 2) goto L2;}return c;
}}
31
3. Phân tích ph c t p gi i thu t
V i ph n l n các bài toán, th ng có nhi u gi i thu t khácnhau gi i m t bài toán.Làm cách nào ch n gi i thu t t t nh t gi i m t bàitoán?Làm cách nào so sánh các gi i thu t cùng gi i c m tbài toán?
Phân tích ph c t p c a m t gi i thu t: d oán các tàinguyên mà gi i thu t ó c n.
Tài nguyên: Ch b nhTh i gian tính toán
Th i gian tính toán là tài nguyên quan tr ng nh t.
32
Hai cách phân tích
Th i gian tính toán c a m t gi i thu t th ng làm t hàm c a kích th c d li u nh p.
Chúng ta quan tâm n:
Tr ng h p trung bình (average case): th i giantính toán mà m t gi i thu t c n i v i m t “dli u nhâp thông th ng” (typical input data).
Tr ng h p x u nh t (worst case): th i gian tínhtoán mà m t gi i thu t c n i v i m t “d li unhâp x u nh t”
33
Khung th c c a s phân tíchB c 1: c tr ng hóa d li u nh p và quy t nh ki u
phân tích thích h p.Thông th ng, ta t p trung vào vi c- ch ng minh r ng th i gian tính toán luôn nh h n m t “c n
trên” (upper bound), hay- d n xu t ra th i gian ch y trung bình i v i m t d li u
nh p ng u nhiên.B c 2: nh n d ng thao tác tr u t ng (abstract operation)
mà gi i thu t d a vào ó làm vi c.Thí d : thao tác so sánh trong gi i thu t s p th t .
T ng s thao tác tr u t ng th ng tùy thu c vào m t vài il ng.
B c 3: th c hi n phân tích toán h c tìm ra các giá trtrung bình và giá tr x u nh t c a các i l ng quan tr ng.
34
Hai tr ng h p phân tích
• Th ng thì không khó tìm ra c n trên c a th igian tính toán c a m t gi i thu t.
• Nh ng phân tích tr ng h p trung bình th ng òih i m t s phân tích toán h c c u k , ph c t p.
• V nguyên t c, m t gi i thu t có th c phân tíchn m t m c chính xác r t chi li. Nh ng trong
th c t , chúng ta th ng ch tính c l ng(estimating) mà thôi
• Tóm l i, chúng ta tìm ki m m t c l ng thô v th igian tính toán c a m t gi i thu t (nh m m c íchphân l p ph c t p).
35
Phân l p ph c t p
H u h t các gi i thu t th ng có m t thông s chính, N, sm u d li u nh p mà c x lý.
Thí d :Kích th c c a m ng (array) c s p th t ho c tìm ki m.S nút c a m t th .
Gi i thu t có th có th i gian tính toán t l v i
1. N u tác v chính c th c thi m t vài l n. th i gian tính toán là h ng s .
2. lgN (logarithmic) log2N lgNGi i thu t t ng ch m h n s t ng c a N.
36
3. N (linear)
4. NlgN
5. N2 (quadratic) khi gi i thu t là vòng l p l ng hai
6. N3 (cubic) khi gi i thu t là vòng l p l ng ba
7. 2N m t s gi i thu t có th i gian ch y lu th a.
M t vài gi i thu t khác có th có th i gian ch yN3/2, N1/2 , (lgN)2 …
37
ph c t p tính toán
Chúng ta t p trung vào phân tích tr ng h p x u nh t. Khiphân tích, b qua nh ng th a s h ng s xác nh s phthu c hàm c a th i gian tính toán i v i kích th c d li unh p.
Thí d : Th i gian tính toán c a s p th t b ng ph ng pháptr n (mergesort ) là t l v i NlgN.
Khái ni m “t l v i” (proportional to)Công c toán h c làm chính xác khái ni m này là
ký hi u – O (O-notation).
nh ngh a: M t hàm g(N) c g i là O(f(N)) n u t n t i haih ng s c0 và N0 sao cho g(N) nh h n c0f(N) v i m iN > N0.
38
Ký hi u O
Ký hi u O là m t cách h u ích phát bi u c n trên v th igian tính toán mà c l p i v i c tính d li u nh p vàchi ti t hi n th c hóa.
Chúng ta c g ng tìm c “c n trên” l n “c n d i” c a th igian tính toán trong phân tích tr ng h p x u nh t.
Nh ng c n d i (lower-bound ) thì th ng khó xác nh.
39
Phân tích tr ng h p trung bình
V i ki u phân tích này, ta ph i- c tr ng hóa d li u nh p c a gi i thu t- tính giá tr trung bình c a s l n m t phát bi u c
th c thi.- tính th i gian tính toán trung bình c a toàn gi i
thu t.
Nh ng th ng thì khó- xác nh th i gian ch y c a m i phát bi u.- c tr ng hóa chính xác d li u nh p trong th c t .
40
Các k t qu ti m c n và x p x
K t qu c a m t s phân tích toán h c th ng mang tính x px (approximate): nó có th là m t bi u th c g m m t chu inh ng s h ng gi m d n t m quan tr ng.
Ta th ng ý n các s h ng d n u trong bi u th c toánh c.
Thí d : Th i gian tính toán trung bình c a m t ch ng trìnhlà:
a0NlgN + a1N + a2Ta có th vi t l i là:
a0NlgN + O(N)V i N l n, ta không c n tìm giá tr c a a1 hay a2.
41
Các k t qu x p x
Ký hi u O cho ta m t cách tìm ra k t qu x p x khi Nl n.
Do ó, thông th ng chúng ta có th b qua m t s il ng khi có t n t i m t s h ng d n u trong bi uth c.
Example: n u bi u th c là N(N-1)/2, chúng ta có th b or ng nó kho ng ch ng N2/2.
42
Phân tích m t gi i thu t l p
Thí d 1 Cho m t gi i thu t tìm ph n t l n nh t trongm t m ng 1 chi u.procedure MAX(A, n, max)/* Set max to the maximum of A(1:n) */begin
integer i, n;max := A[1];for i:= 2 to n do
if A[i] > max then max := A[i]end
N u C(n) là ph c t p tính toán c a gi i thu t c tínhtheo thao tác so sánh (A[i]> max). Hãy xác nh C(n)trong tr ng h p x u nh t.
43
Phân tích m t gi i thu t l p (tt.)
Thao tác c n b n c a th t c MAX là thao tác so sánh.
T ng s thao tác so sánh c a th t c MAX chính là s l nthân vòng l p c th c thi: (n-1).
V y ph c t p tính toán c a gi i thu t là O(n).
ây là ph c t p c a c hai tr ng h p trung bình và x unh t.
Ghi chú: N u thao tác c n b n là phát bi u gán (max := A[i])thì O(n) là ph c t p trong tr ng h p x u nh t.
44
Phân tích m t gi i thu t l p (tt.)
Thí d 2: Gi i thu t ki m tra xem có ph i m i ph n t trongm ng 1 chi u là khác bi t nhau.
function UniqueElements(A, n)begin
for i:= 1 to n –1 dofor j:= i + 1 to n do
if A[i] = A[j] return falsereturn true
end
Trong tr ng h p x u nh t, m ng không h có hai ph n tnào b ng nhau ho c m ng có hai ph n t cu i cùng b ngnhau. Lúc ó m t s so sánh di n ra m i khi thân vòng l ptrong c th c hi n.
45
i = 1 j ch y t 2 cho n n t c n – 1 l n so sánhi = 2 j ch y t 3 cho n n t c n – 2 l n so sánh
.
.i = n -2 j ch y t n-1 cho n n t c 2 l n so sánhi = n -1 j ch y t n cho n n t c 1 l n so sánh
Tóm l i, t ng s l n so sánh là:
1 + 2 + 3 + … + (n-2) + (n-1) = n(n-1)/2
V y ph c t p tính toán c a gi i thu t trong tr ng h p x unh t là O(n2).
46
Phân tích m t gi i thu t l p (tt.)
Thí d 3 (So trùng dòng ký t - string matching): Tìm t t cnh ng s xu t hi n c a m t khuôn m u (pattern) trong m tv n b n (text).
V n b n là m t m ng T[1..n] g m n ký t và ki u m u là m tm ng P[1..m] g m m ký t .
Ki u m u P xu t hi n v i d ch chuy n (shift) s trong v nb n T (t c là, P xu t hi n b t u t v trí s+1 trong v n b nT) n u 1 s n – m và T[s+1..s+m] = P[1..m].
47
M t gi i thu t n gi n nh t tìm t t c nh ng s xu thi n c a P trong T s dùng m t vòng l p mà ki m tra i uki n P[1..m] = T[s+1..s+m] v i m i tr trong n – m + 1 tr cóth có c a s.
procedure NATIVE-STRING-MATCHING(T,P);begin
n: = |T|; m: = |P|;for s:= 0 to n – m doif P[1..m] = T[s+1,..,s+m] then
print “Pattern occurs with shift” s;end
48
procedure NATIVE-STRING-MATCHING(T,P);begin
n: = |T|; m: = |P|;for s:= 0 to n – m dobegin
exit:= false; k:=1;while k m and not exit do
if P[k] T[s+k] then exit := trueelse k:= k+1;
if not exit thenprint “Pattern occurs with shift” s;
endend
49
Gi i thu t NAIVE STRING MATCHER có haivòng l p l ng nhau:- vòng l p ngoài l p n – m + 1 l n.- vòng l p trong l p t i a m l n.Do ó, ph c t p c a gi i thu t trong tr ng h px u nh t là:O((n – m + 1)m).
50
Phân tích gi i thu t quy: các công th c truyh i c n b n
Có m t ph ng pháp c n b n phân tích ph c t p c acác gi i thu t quy.
Tính ch t c a m t gi i thu t quy th i gian ch y iv i b d li u nh p kích th c N tùy thu c vào th i gianch y c a nh ng b d li u nh p nh h n.
Tính ch t này c mô t b ng m t công th c toán h c cg i là h th c truy h i (recurrence relation).
d n xu t ra ph c t p c a m t gi i thu t quy, chúng ta ph i gi i h th c truy h i này.
51
Phân tích gi i thu t quy b ng ph ng pháp l p
Công th c 1: M t ch ng trình quy mà l p qua b d li unh p lo i i m t ph n t . H th c truy h i c a nó nh sau:
CN = CN-1 + N N 2C1 = 1
CN = CN-1 + N= CN-2 + (N – 1) + N= CN-3 + (N – 2) + (N – 1) + N
.
.
.= C1 + 2 + … + (N – 2) + (N – 1) + N= 1 + 2 + … + (N – 1) + N= N(N-1)/2= N2/2
Cách suy ra ph ct p b ng ph ngpháp l p:
52
Thí d 2Công th c 2: M t ch ng trình quy mà tách ôi b dli u nh p trong m t b c làm vi c. H th c truy h i là:CN = CN/2 + 1 N 2
C1 = 0Cách suy ra ph c t p:
Gi s N = 2n
C(2n) = C(2n-1) + 1= C(2n-2 )+ 1 + 1= C(2n-3 )+ 3
.
. .
= C(20 ) + n= C1 + n = n
CN = n = lgNCN lgN
53
Thí d 3Công th c 3. M t ch ng trình quy mà tách ôi b d li unh p trong m t b c làm vi c nh ng ph i xem xét t ng ph n ttrong d li u nh p. H th c truy h i là
CN = 2CN/2 + N for N 2C1 = 0
Assume N = 2n
C(2n) = 2C(2n-1) + 2n
C(2n)/2n = C(2n-1)/ 2n-1 + 1= C(2n-2)/ 2n-2 + 1 +1
.
.= n
C(2n ) = n.2n
CN = NlgNCN NlgN
Cách suy ra ph c t p:
54
Thí d 4Công th c 4. M t ch ng trình quy mà tách ôi d li u nh pthành hai n a trong m t b c làm vi c . H th c truy h i làC(N) = 2C(N/2) + 1 for N 2
C(1) = 0
Cách suy ra ph c t p:Gi s N = 2n.
C(2n) = 2C(2n-1) + 1C(2n)/ 2n = 2C(2n-1)/ 2n + 1/2n
=C(2n-1)/ 2n-1 + 1/2n
=[C(2n-2)/ 2n-2 + 1/2n-1 ]+ 1/2n
.
.
.=C(2n-i)/ 2n -i + 1/2n – i +1 + … + 1/2n
55
Cu i cùng, khi i = n -1, ta c:
C(2n)/2n = C(2)/2 + ¼ + 1/8 + …+ 1/2n
= ½ + ¼ + ….+1/2n
1C(2n) = 2n
C(N) N
M t s h th c truy h i có v gi ng nhau nh ng m ckhó khi gi i chúng tìm ph c t p thì có th r tkhác nhau.
56
Nguyên t c phân tích ph c t p trung bình
tính ph c t p trung bình c a m t gi i thu t A, ta ph i làmm t s b c:
1. Quy t nh m t không gian l y m u (sampling space) di n tnh ng d li u u vào (kích th c n) có th có. Gi s khônggian l y m u là S = { I1, I2,…, Ik}
2. Ta ph i nh ngh a m t phân b xác xu t p trên S mà bi u di nm c ch c ch n mà d li u u vào ó có th x y ra.
3. Ta ph i tính t ng s tác v c n b n c gi i thu t A th c hi nx lý m t tr ng h p m u. Ta dùng v(Ik) ký hi u t ng s tác
v c th c hi n b i A khi d li u u vào thu c tr ng h pIk.
57
Phân tích ph c t p trung bình (tt.)
4. Ta tính tr trung bình c a s tác v c n b n b ng cách tính kv ng sau:
Cavg(n) = v(I1).p(I1) + v(I2).p(I2) + …+v(Ik).p(Ik).
Thí d : Cho m t m ng A có n ph n t . Tìm ki m v trí mà trX xu t hi n trong m ng A.
begini := 1;
while i <= n and X <> A[i] doi := i+1;
end
58
Thí d : Tìm ki m tu n t
Gi s X có xu t hi n trong m ng và gi nh r ng xác xu tnó xu t hi n t i m t v trí b t k trong m ng là u nhau
và xác xu t m i tr ng h p x y ra là p = 1/n.
S l n so sánh tìm th y X n u nó xu t hi n t i v trí 1 là 1S l n so sánh tìm th y X n u nó xu t hi n t i v trí 2 là 2…S l n so sánh tìm th y X n u nó xu t hi n t i v trí n là n
T ng s tác v so sánh trung bình là:C(n) = 1.(1/n) + 2.(1/n) + …+ N.(1/n)
= (1 + 2 + …+ n).(1/n)= (1+2+…+n)/n = n(n+1)/2.(1/n) = (n+1)/2.
59
Vài chu i s thông d ng
Có m t vài chu i s thông d ng trong vi c phân tíchph c t p gi i thu t.
Chu i s c ngS1 = 1 + 2 + 3 + … + nS1 = n(n+1)/2 n2/2S2 = 1 + 22 + 32 + …+ n2
S2 = n(n+1)(2n+1)/6 n3/3
Chu i s nhânS = 1 + a + a2 + a3 + … + an
S = (an+1 -1)/(a-1)If 0< a < 1, thenS 1/(1-a)Và khi n , S ti n v 1/(1-a).
60
Vài chu i s thông d ng (tt.)
T ng chu i s i u hoà (Harmonic sum)
Hn = 1 + ½ + 1/3 + ¼ +…+1/nHn = loge n +
0.577215665 c g i là h ng s Euler.
M t chu i s khác c ng r t thông d ng khi phân tích cácthao tác làm vi c trên cây nh phân:
1 + 2 + 4 +…+ 2m-1 = 2m -1