Professional Documents
Culture Documents
BI GING IN T
Bin son bi: TS. Dng Tun Anh
Khoa Cng ngh Thng tin Trng .H. Bch Khoa I hc Quc Gia Tp H Ch Minh
cng Mn hc
1. Cc khi nim cn bn 2. Phn tch phc tp mt s gii thut sp th t v tm kim 3. Phn tch phc tp mt s gii thut lm vic trn cu trc d liu 4. Phn tch phc tp mt s gii thut lm vic trn th 5. Cc chin lc thit k gii thut 6. Vn NP-y
Ni dung
1. Kiu d liu tru tng 2. quy 3. Phn tch gii thut
Mt kiu d liu tru tng l mt m hnh ton hc i cng vi nhng tc v c nh ngha trn m hnh ny.
6
Suy ngh trn a tp M, ta c th vit mt gii thut nh sau: Initialize(M); for i:= 1 to k do Insert(A[i], M); for i:= k + 1 to n do if A[i] > FindMin(M) then begin DeleteMin(M); Insert(A[i],M) end; Trong th d trn, ta thy kiu d liu tru tng lm n gin ha vic xy dng gii thut bng cch khng bn tm n nhng chi tit thi cng hay hin thc ha.
10
Operations
Concrete operations
11
12
2. quy
H thc truy hi Th d 1: Hm tnh giai tha N! = N.(N-1)! vi N 1 0! = 1 Nhng nh ngha hm quy m cha nhng i s nguyn c gi l nhng h thc truy hi (recurrence relation). function factorial (N: integer): integer; begin if N = 0 then factorial: = 1 else factorial: = N*factorial (N-1); end;
13
H thc truy hi
Th d 2: S Fibonacci H thc truy hi: FN = FN-1 + FN-2 for N 2 F0 = F1 = 1 1, 1, 2, 3, 5, 8, 13, 21,
function fibonacci (N: integer): integer; begin if N <= 1 then fibonacci: = 1 else fibonacci: = fibonacci(N-1) + fibonacci(N-2); end;
14
Mt cch khc: Ta c th dng mt mng cha nhng tr s i trc trong khi tnh hm fibonacci. Ta c mt gii thut khng 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;
15
Chin lc Chia--tr
Nhiu gii thut hay c cu trc quy: gii mt vn gii thut gi chnh n mt hay nhiu ln i ph vi nhng vn con (subproblem) c quan h cht ch vi nhau. Nhng gii thut nh vy tun theo cch tip cn chia--tr (divide and conquer): Gii thut phn r vn thnh nhng vn con, gii nhng vn con ny v kt hp nhng li gii ca nhng vn con thnh li gii cho vn nguyn thy. Chin lc ny bao gm 3 bc sau y mi cp quy: phn chia (divide) tr (conquer) kt hp (combine)
16
Th d: Xt vic vch nhng vch cch nhau 1 inch trn 1 cy thc: c mt nt vch ti in inch, nt vch ngn hn nhng on inch, nt vch ngn hn na nhng on 1/8 inch, v.v... procedure rule(l, r, h: integer); /* l: left position of the ruler; r: right position of the ruler */ var m: integer; begin if h > 0 then begin m: = (1 + r) div 2; mark(m, h); rule(l, m, h-1); rule(m, r , h-1) end; end; Gi s th tc mark(x, h) v mt vch h n v ti v tr x.
17
Kh quy
Vn : Gii thut khng quy thng lm vic hu hiu v d kim sot hn 1 gii thut quy. Lm cch no chuyn i mt chng trnh quy thnh mt chng trnh khng--quy tng ng. Phng php: Cho mt th tc quy P, mi ln c mt lnh gi quy n P, gi tr hin hnh ca cc tham s v cc bin cc b c ct vo cc ngn xp (stack) x l sau. Mi ln c mt s quay v quy v P, gi tr ca cc tham s v cc bin cc b s c khi phc li t cc ngn xp.
18
Kh quy (tt.)
Vic i ph vi a ch kh hi (return address) c thc hin nh sau: Gi s th tc P cha mt lnh gi quy ti bc lnh K, a ch kh hi K+1 s c lu ti mt ngn xp v s c dng quay v mc thc thi th tc P hin hnh.
procedure hanoi(n, beg, aux, end); begin if n = 1 then writeln(beg, end) else begin hanoi(n-1, beg, end, aux) ; writeln(beg, end); hanoi(n-1, aux, beg, end); end end;
19
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 then begin n: = STN[top]; beg: = STBEG [top]; aux: = STAUX [top]; end: = STEND [top]; add: = STADD [top]; top: = top 1; goto add end end;
20
S duyt cy quy
Cch n gin nht duyt cc nt trong mt cy nh phn theo th t ni l nh mt th tc quy nh sau: // duyt th t ni (Inorder traversal) type link = node; node = record info: .; l, r: link end; procedure traverse(t: link); begin if t <> z then /* z is dummy node */ begin traverse(t.l); visit(t); traverse(t.r) end end;
21
Kh quy ui
procedure traverse (t: link); label 0,1; begin 0: if t = z then goto 1; visit(t); traverse(t. l); t: = t.r; goto 0; 1: end; K thut ny c gi l kh quy ui (tail-recursion removal).
23
By gi p dng phng php tng qut, ta c th kh lnh gi quy cn li trong chng trnh. procedure traverse(t: link); label 0, 1, 2, 3; begin 0: 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 mt a ch kh hi, 3, m l c nh, nn ta khng phi nhi n vo stack.
24
Ta c th loi b vi pht biu goto bng cch dng vng lp while nh sau. procedure traverse(t: link); label 0,2; begin 0: while t <> z do begin visit(t); push(t.r); t: = t.1; end; if stack_empty then goto 2; t: = pop; goto 0; 2: end;
25
Mt ln na ta c th loi b hai lnh goto cn li bng cch dng vng lp repeat . procedure traverse(t: link); begin push(t); repeat t: = pop; while t <> z do begin visit(t); push(t.r); t: = t.l; end; until stack_empty; end;
26
trnh a nhng cy con rng vo stack, ta c th sa chng trnh trn thnh: 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 chng trnh khng quy hon chnh duyt cy nh phn.
28
Kh hm quy
Nu th tc quy P l mt hm, ta cn b sung vo qui tc chuyn i tng qut mt s im sau y: 1. Ti cu lnh c gn a ch kh hi, ta phi khi phc tr hm t stack; nu cn th thm lnh s dng tr hm ny. 2. Ti cu lnh return, cn a vo pht biu nh tr biu thc i lin sau t kha return v ct tr hm tr v ny vo stack.
Th d: Hm tnh t hp function comb(m, n: int):int If (n=m or m = 0) then return 1 else begin a:= comb(n -1, m); b:= comb(n-1, m -1); return (a+b); end
29
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 call top = top +1 ; stackN[top] = n; stackM[top] = m; stackADD[top] =1; n = n-1; goto L0; L1:// 2nd recursive call top = 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 result topF = topF + 1; stackF[top] = c; if (add == 1) goto L1; else if (add == 2) goto L2; } return c; } }
30
Phn lp phc tp
Hu ht cc gii thut thng c mt thng s chnh, N, s mu d liu nhp m c x l. Th d: Kch thc ca mng (array) c sp th t hoc tm kim. S nt ca mt th. Gii thut c th c thi gian tnh ton t l vi 1. Nu tc v chnh c thc thi mt vi ln. thi gian tnh ton l hng s. 2. lgN (logarithmic) Gii thut tng chm hn s tng ca N. log2N lgN
35
3. N (linear) 4. NlgN 5. N2 (quadratic) 6. N3 (cubic) 7. 2N khi gii thut l vng lp lng hai khi gii thut l vng lp lng ba
36
K hiu O
K hiu O l mt cch hu ch pht biu cn trn v thi gian tnh ton m c lp i vi c tnh d liu nhp v chi tit hin thc ha. Chng ta c gng tm c cn trn ln cn di ca thi gian tnh ton trong phn tch trng hp xu nht. Nhng cn di (lower-bound ) th thng kh xc nh.
38
39
Cc kt qu tim cn v xp x
Kt qu ca mt s phn tch ton hc thng mang tnh xp x (approximate): n c th l mt biu thc gm mt chui nhng s hng gim dn tm quan trng. Ta th ng n cc s hng dn u trong biu thc ton hc. Th d: Thi gian tnh ton trung bnh ca mt chng trnh l: a0NlgN + a1N + a2 Ta c th vit li l: a0NlgN + O(N) Vi N ln, ta khng cn tm gi tr ca a1 hay a2.
40
Cc kt qu xp x
K hiu O cho ta mt cch tm ra kt qu xp x khi N ln. Do , thng thng chng ta c th b qua mt s i lng khi c tn ti mt s hng dn u trong biu thc. Example: nu biu thc l N(N-1)/2, chng ta c th bo rng n khong chng N2/2.
41
Nu C(n) l phc tp tnh ton ca gii thut c tnh theo thao tc so snh (A[i]> max). Hy xc nh C(n) trong trng hp xu nht.
42
43
i=1 i=2
i = n -2 i = n -1
j chy t 2 cho n n tc n 1 ln so snh j chy t 3 cho n n tc n 2 ln so snh . . j chy t n-1 cho n n tc 2 ln so snh j chy t n cho n n tc 1 ln so snh
Tm li, tng s ln so snh l: 1 + 2 + 3 + + (n-2) + (n-1) = n(n-1)/2 Vy phc tp tnh ton ca gii thut trong trng hp xu nht l O(n2).
45
46
Mt gii thut n gin nht tm tt c nhng s xut hin ca P trong T s dng mt vng lp m kim tra iu kin P[1..m] = T[s+1..s+m] vi mi tr trong n m + 1 tr c th c ca s. procedure NATIVE-STRING-MATCHING(T,P); begin n: = |T|; m: = |P|; for s:= 0 to n m do if P[1..m] = T[s+1,..,s+m] then print Pattern occurs with shift s; end
47
procedure NATIVE-STRING-MATCHING(T,P); begin n: = |T|; m: = |P|; for s:= 0 to n m do begin exit:= false; k:=1; while k m and not exit do if P[k] T[s+k] then exit := true else k:= k+1; if not exit then print Pattern occurs with shift s; end end
48
Gii thut NAIVE STRING MATCHER c hai vng lp lng nhau: - vng lp ngoi lp n m + 1 ln. - vng lp trong lp ti a m ln. Do , phc tp ca gii thut trong trng hp xu nht l: O((n m + 1)m).
49
Th d 2
Cng thc 2: Mt chng trnh quy m tch i b d liu nhp trong mt bc lm vic. H thc truy hi l: CN = CN/2 + 1 N2 C1 = 0 Cch suy ra phc tp:
Gi s N = 2n C(2n) = C(2n-1) + 1 = C(2n-2 )+ 1 + 1 = C(2n-3 )+ 3
.
..
Th d 3
Cng thc 3. Mt chng trnh quy m tch i b d liu nhp trong mt bc lm vic nhng phi xem xt tng phn t trong d liu nhp. H thc truy hi l for N 2 CN = 2CN/2 + N C1 = 0 Cch suy ra phc tp:
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 = NlgN CN NlgN
53
Th d 4
Cng thc 4. Mt chng trnh quy m tch i d liu nhp
thnh hai na trong mt bc lm vic . H thc truy hi l
C(N) = 2C(N/2) + 1
Cch suy ra phc tp:
for N 2 C(1) = 0
Gi s N = 2n. C(2n) = 2C(2n-1) + 1 C(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
54
Cui cng, khi i = n -1, ta c: C(2n)/2n = C(2)/2 + + 1/8 + + 1/2n = + + .+1/2n 1 C(2n) = 2n C(N) N Mt s h thc truy hi c v ging nhau nhng mc kh khi gii chng tm phc tp th c th rt khc nhau.
55
56
Th d: Tm kim tun t
Gi s X c xut hin trong mng v gi nh rng xc xut n xut hin ti mt v tr bt k trong mng l u nhau v xc xut mi trng hp xy ra l p = 1/n. S ln so snh tm thy X nu n xut hin ti v tr 1 l 1 S ln so snh tm thy X nu n xut hin ti v tr 2 l 2 S ln so snh tm thy X nu n xut hin ti v tr n l n Tng s tc v so snh trung bnh 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.
58
59
60