Abstract Data Operations Data Structure Concrete operations... có th dùng hàng i có u tiên priority queue thicông.
Trang 1Ch 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
Trang 6Gi i m t bài toán b ng
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] ãy xác nh k ph n
t l n nh t trong m ng i k n Thí d u A là {5
6} à k thì k t qu là {5 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(Minsert(x
deleteMin(MfindMin(M)
Trang 7Suy ngh tr n a t p M ta có th vi t m t gi i thu t nh
sau:
(for 1 to k do
Trang 8Qu trình dùng m t c u trúc d li u c th hi n th c hóa
m t ADT c g i là thi công ki u d li u tr u t ng Trong
s 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 u
t ng c hi n th c hóa b ng các tác v c th h n
Abstract Data
Operations
Data Structure
Concrete operations
Trang 9có th dùng hàng i có u tiên (priority queue thi
công Và sau ó ta có th dùng c u trúc d li u heap thi
công hàng i có u tiên
Trang 13Chi n l c Chi tr
Nhi u gi i thu t hay có c u tr c quy: gi i m t v n
gi i thu t g i ch nh nó m t hay nhi u l n i phó v i
nh 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 chi tr
divide and conque :
Gi i thu t phân rã v n thành nh ng v n con, gi i
nh ng v n con này và k t h p nh ng l i gi i c a nh ng
v n con thành l i gi i cho v n nguyên th y
Chi n l c này bao g m c sau ây m i c p qu
phân chia (divid
tr (conque
k t h p (combin
Trang 14v ch h n v t i vtrí x.
Trang 15Kh quy
V n : Gi i thu t không quy th ng làm vi c h u hi u
và 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 quy
thà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 quy
n 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 (sta x lý sau
M i l n có m t s quay v quy v P, giá tr c a các
tham s và các bi n c c b s c khôi ph c l i t các ng n
x p
Trang 16hanoi(n-1, aux, beg, end);
end end;
Thí d Th t c
hanoi là m t th
t c quy gi i bài
toán Tháp Hà N i
Trang 17procedure hanoi(n, beg, aux, end:
integer);
/* Stacks STN, STBEG, STAUX,
STEND, and STADD correspond,
respectively, to variables N, BEG, AUX,
END and ADD */
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;
/* 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;
Trang 18Cách n gi n nh t duy t các n t trong m t cây nh
phâ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
↑record
…… ; l, r: linkend;
procedure traverse(t: link);
Trang 19Th t c duy t c y ti n th t Pre orde
L nh g i quy th hai có th c chuy n thành m t l nhgoto nh s
Trang 25tránh a nh ng cây con r ng vào stack, ta có th s a
Trang 26If (n=m or m = 0) then return 1
else begin a:= comb(n -1, m);
Trang 27int int int
int top, topF;
int stackN[100]; int stackM[100];
else { // 1st recursive call
top = top +1 ; stackN[top] = n;
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;
} }
Trang 28Phân tích ph c t p c a m t gi i thu d oán các tài
Trang 29li u nhâp thông th ng” (typical input data).
• Tr ng h p x u nh t (worst case): th i gian tính toán mà m t gi i thu t c n i v i m t “d li u
nhâp x u nh t”
Trang 30Khung th c c a s ph n tích
B 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 ntrên” (upper bound , hay
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 operatio
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 i
l ng
B c : th c hi n phân tích toán h c tìm ra các giá tr
trung bình và giá tr x u nh t c a các i l ng quan tr ng
Trang 31Hai tr ng h p ph n tích
gian tính toán c a m t gi i thu t.
h i m t s phân tích toán h c c u k , ph c t p.
Trang 33NlgN
5 N2 (quadratic) khi gi i thu t là v ng l p l ng hai
6 N (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 y
N /2, N1/2 , (lgN)2 …
Trang 34Khá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à
nh ngh a: M t hàm g(N) c g i là O(f(N)) n u t n t i hai
h ng s c và N sao cho g(N) nh h n c f(N) v i m i
N > N
Trang 35K 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 (lowe bound ) thì th ng khó xác nh
Trang 40V 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 u
nh 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
Trang 41Trong tr ng h p x u nh t, m ng không h có hai ph n t
nào b ng nhau ho c m ng có hai ph n t cu i cùng b ng
nhau 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
Trang 42i = 1 j ch y t 2 cho n n t c n – 1 l n so sánh
i = 2 j ch y t cho n n t c n – 2 l n so sánh
Trang 45
while k ≤ m and not exit do
if P[k] ≠ T[s+k] then exit := trueelse k:= k+1;
if not exit then
print “Pattern occurs with shift s;
end
end
Trang 47Ph n tích gi i thu t quy: các công th c truy
h 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 i
v i b d li u nh p k ch th c N tùy thu c vào th i gian
ch 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 c
g 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
Trang 48.
Trang 50= C(2 n-2 )/ 2 n-2 + 1 +1
.
= n C(2 n ) = n.2 n
CN = NlgN
CN NlgN
Cách suy ra ph c t p:
Trang 51=C(2n-i)/ 2n -i + 1/2n – i +1 + … + 1/2n
Trang 52M t s h th c truy h i có v gi ng nhau nh ng m c
khác nhau.
Trang 56Và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ích
Trang 57Vài chu i s thông d ng