57
4 Ch ng 1 CÁC KHÁI NI M C N B N Mônh c: Phântích và thi tk gi i thu t

Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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

Page 2: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

5

N i dung

1. Ki u d li u tr u t ng2. quy3. Phân tích gi i thu t

Page 3: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 4: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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)

Page 5: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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)

Page 6: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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)

Page 7: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 8: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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

Page 9: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 10: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiê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;

Page 11: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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;

Page 12: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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;

Page 13: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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)

Page 14: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 15: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 16: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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

Page 17: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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;

Page 18: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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;

Page 19: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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:

Page 20: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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).

Page 21: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 22: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 23: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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 .

Page 24: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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:

Page 25: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 26: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiê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.

Page 27: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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;

}}

Page 28: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 29: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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”

Page 30: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 31: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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).

Page 32: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 33: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiê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 …

Page 34: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 35: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 36: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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 .

Page 37: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 38: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 39: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 40: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 41: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 42: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiê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).

Page 43: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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].

Page 44: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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

Page 45: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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

Page 46: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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).

Page 47: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 48: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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:

Page 49: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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

Page 50: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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:

Page 51: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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

Page 52: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 53: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 54: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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

Page 55: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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.

Page 56: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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).

Page 57: Ch ng1thicông t php(set). Cóth dùng m ng (array) hay danhsáchliên k t (linkedlist) thi công chu i. V iki ud li utr ut ng atpnh trongthíd tr c,ta cóth dùng hàng icó utiên

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