Tải bản đầy đủ (.pdf) (57 trang)

Phân tích và thiết kế và giải thuật - Chương 1 Các khái niệm cơ bản pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.59 MB, 57 trang )

4
Ch ng1
CÁCKHÁINI M C N B N
Mônh c:Phântíchvàthi tk gi ithu t
5
N i dung
1. Ki u d li u tr u t ng
2. quy
3. Phân tíchgi i thu t
6
1.Ki u d li utr ut ng
• Mô t m tc utrúcd li utheocáctácv operations) làm
vi
ctrên c utrúc d li uthì ti n l i h n là di n t nó theo
nh
ng chiti t thi công (implementation details).
• Chúngtanêntáchnh
ngkháini mv c utrúcd li ura
kh
i nh ngchiti tthi công.
• Khim
tc utrúcd li u c nhngh atheocáchnh
v ytas cóm tki ud li utr ut ng (abstractdata type)
hay ADT.
M tki u d li utr u t ng là m tmôhìnhtoán
h
c icùng v inh ngtác v c nhngh atrên
mô hìnhnày.
7
Vàithí d v Ki u d li utr u t ng
• M t t p (set)làm tt ph pg mzero hay nhi uph nt .


M
tph nt không cphépxu thi nnhi uh nm t
l
ntrongt p. M t t p g m n ph n t cký hi u là {a
1
a
2

n
}
nh ngv trí c am tph nt trongm tt plà
khôngquantr
ng.
• M
t at p(multiset)làm t t pmàtrong ó m t ph n t
c phép xu t hi nnhi u h n m t l n.Thí d { 2} là
m
t at p. M t a t p có th có nh ngtác v sau:
initialize (kh i t o)
insert (thêm vào)
is_empty (th a t pcór ng)
delete (xoá)
findmin (tìm ph n t bé nh t)
8
Vàithí d v Ki u d li utr u t ng
• M t chu i (sequence)làm tt ph pc th t c azero hay
nhi
uph nt ; cký hi ulà<a
1
2


n
>. V
trí c a
m
tph nt trongm tchu i là cóý nghi .M t chu icóth
có nh ngtá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àitoán b ng
th y chl i c aki ud li utr ut ng th xétbàitoán
sau:
Cho m
t m ng(array) g m n s A[1 n] ãyxác nh k ph n
t
l nnh ttrongm ng ik n.Thí d uA là {5
6} à k thì k t qu là {5 6}.
Không d
xây d ng m t gi ithu t gi i bàitoántrên.
Tath
dùngki ud li utr ut ng at p(multiset) v i các
tác v
:
initialize(M
insert(x
deleteMin(M

findMin(M)
10
Suy ngh tr n a t pM tacóth vi t m tgi ithu tnh
sau:
(
for 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;
Trongth
d trên,tath yki ud li utr ut ng ã l m
ngi nhóavi cxây d ng gi ithu tb ngcáchkhông b n
tâm nnh ng chiti tthi cônghayhi nth c hóa.
11
Thic ng m tki ud li utr ut ng
Qu trìnhdùngm tc utrúc d li uc th hi nth chóa
m
tADT cg ilàthicôngki ud li utr ut ng.Trong
s
thi công này, ph n d li utr u t ng c hi nth c hóa
b
ng m t c utrúc d li u c th và ph ncáctác v tr u
t
ng c hi nth c hóa b ngcáctác v c th h n.
Abstract
Data
Operations

Data
Structure
Concrete
operations
12
Thicông m tki u d li utr u t ng
Có th d ng m ng (array) hay danhsáchliênk t(linkedlist)
thicông t ph p(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 at pnh trongthí d tr c,ta
có th
dùng hàng icó utiên (priority queue thi
công. Và sau
ó tacóth dùng c utrúc d li u heap thi
công hàng
i có utiên.
13
2. quy
H th ctruyh i
Th d 1:Hàmtnhgiaith a
N
= N.(N-1 v iN 1
= 1
Nh
ng nhngh ahàm quymàch anh ng i s nguyên
cg ilành ng h th ctruyh i(recurrencerelation)
function (

begin
if
0
then factorial:= 1
else factorial:= N*factorial(N-1);
end;
14
H th ctruy h i
Th d 2: S Fibonacci
H
th ctruyh i:
F
N
= F
N-1
+ F
N-2
for N
2
F
0
= F
1
= 1
1, 1, 2, 3, 5, 8,13, 21, …
function
( integer): integer;
begin
if N<= 1
then fibonacci:= 1

else fibonacci:=fibonacci(N-1)+
fibonacci(N-2);
end;
15
M tcáchkhác:Tacóth d ngm tm ng ch anh ngtr s
itr ctrongkhitnhhàmfibonacci.Tacóm t gi ithu t
không
quy.
procedure
const 25;
var i:integer;
F: array[0 max] of integer;
begin
F[0]:=1; F[1]:=1;
for i:=2to max do
F[i]:=F[i-1]+ F[i-2]
end;
16
Chi nl cChi tr
Nhi ugi ithu thaycóc utr c quy: gi i m tv n
gi ithu t g i ch nh nó m thaynhi u l n i phó v i
nh
ng v n con (subproblem)cóquanh ch tch v i nhau.
Nh
ng gi ithu t nh v ytuântheo cáchti p c n chi tr
divide andconque :
Gi
ithu tphânrãv n thànhnh ngv n con, gi i
nh
ngv n con nàyvàk th pnh ngl igi i c anh ng

v
n conthànhl igi ichov n nguyênth y.
Chi
n l c này bao g m csau ây m i c p qu
phân chia (divid
tr (conque
k t h p (combin
17
Th d : Xétvi cv chnh ngv chcáchnhau1 inchtrên1
câyth
c:cóm tnétv cht i i n½inch,nétv chng n
h
n nh ng o n ¼ inch, nét v ch ng n h nn a nh ng
o n1/8inch, v.v
procedure
( integer);
/*l:left positionoftheruler;r:right
position
oftheruler*/
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 t c

mark
x, v m t
v
ch h n v t i v
trí x.
18
Kh quy
V n :Gi ithu tkhông quy th ng làm vi c h u hi u
và d
ki msoát h n1 gi ithu t quy.
Làm cáchnào
chuy n i m tch ngtrình quy
thànhm
tch ngtrìnhkhông- -quyt ng ng.
Ph
ngpháp:
Cho m tth t c quyP, m i l ncóm tl nhg i quy
nP, giá tr hi nhànhc acácthams vàcácbi nc cb
cc tvàocácng nx p(sta x lý sau.
M i l ncóm ts quay v quyv P,giá tr c acác
tham s
và cácbi n c c b s ckhôiph cl i t cácng n
x
p.
19
Kh quy
Vi c i phó v i ach kh h i (return address) cth c
hi
nnh sau:
Gi

s th t cPch a m t l nh g i quy t i b c l nh
K,
a ch kh h i K s cl ut i m tng nx p và s
c dùng quay v m cth cthith t cP hi n hành.
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;
Thí d
Th t c
hanoi là m
tth
t c quygi i bài
toánThápHàN
i
20
procedure hanoi(n,beg,aux,end:
integer);
/*StacksSTN,STBEG,STAUX,
STEND,andSTADDcorrespond,
respectively,tovariablesN,BEG,AUX,
ENDandADD*/
label 1,3,5;
var t: integer;

begin
top:=0; /*preparation forstacks*/
1: if n=1then
begin writeln(beg,end); goto 5 end;
top:= top+1; /* firstrecursivecall*/
STN[top]:=n;STBEG[top]:=beg;
STAUX [top]:=aux;
STEND [top]:=end;
STADD [top]:=3;
/*savingreturnaddress*/
n:=n-1; t:=aux;aux:=end;
end:= t;
goto 1;
3:writeln(beg,end);
top:= top+1; /*second
recursivecall*/
STN[top]:=n;
STBEG[top]:=beg;
STAUX[top]:aux;
STEND[top]:=end;
STADD[top]:=5;
/*savingreturnaddress*/
n:=n-1; t:=beg;beg:=aux;
aux:= t; goto 1;
5. /* translationofreturnpoint*/
if top<>0then
begin
n:=STN[top];
beg:=STBEG [top];
aux:=STAUX [top];

end:=STEND [top];
add:=STADD [top];
top:= top
1; goto add
end
end;
21
S duy tc y quy
Cách ngi nnh t duy tcácn ttrongm tcâynh
phântheo th t n i l nh m tth t c quynh sau:
//duy
tth t n i(Inordertraversal)
type

record
…… ; l,r:link
end;
procedure traverse(t: link);
begin
if t<> z then /*zisdummy node */
begin
traverse(t↑.l);
visit(t);
traverse(t↑.r)
end
end;
22
Th t cduy tc yti nth t Pre orde
procedure (
begin

if
z then
begin
visit(t);
traverse(t↑.1);traverse(t↑.r)
end
end;
Tr
ckhikh quyth t cnày,tacóth lo i b l nh g i
quyth haid dàngvìkhôngcómãch ngtrình isau
nó.
L
nh g i quyth haicóth cchuy nthànhm tl nh
goto
nh s
23
Kh quy uôi
procedure (
label
begin
if z thengoto 1;
visit(t);
traverse(t↑. l);
t:= t↑.r; goto 0;
1: end;
K
thu tnày cg i là kh quy uôi (tail ecursion
removal).
24
procedure ( link);

label 0, 1, 2, 3;
begin
0:if t=zthen goto 1;
visit(t);
push(t); t:= t↑.l; goto 0;
3:t:= t↑.r; goto 0;
1: if stack_empty thengoto 2;
t:= pop; goto 3;
2: end;
Chúý
: Doch có m t ach kh h ,màlàc nh,nên
takhôngph
i nh i nó vàostack.
Bâygi
ápd ng ph ngphápt ngquát,tacóth kh l nh
g
i quycònl itrongch ngtrình.
25
procedure ( link);
label 0,2;
begin
0: while t<> z do
begin
visit(t);
push(t↑.r);t:= t↑.1;
end;
if stack_empty thengoto 2;
t:=pop; goto 0;
2: end;
Ta có th

lo i b vàiphát bi u goto b ngcáchdùng vòngl p
while nh
sau.
26
procedure ( 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;
M
tl nn atacóth lo i b hail nh goto c nl i b ngcách
dùngvòngl
prepeat .
27
procedure ( link);
begin
push(t);
repeat
t:= pop;
if t<>zthen
begin
visit(t);
push(t↑.r); push(t↑.1);

end;
until stack_empty;
end;
Haiv
ngl pl ngnhaucóth c ngi nhóa
nh
sau:
28
tránh anh ngcâycon r ngvàostack,tacóth s a
ch
ngtrìnhtrênthà
procedure ( 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 ngtrìnhkhông quy hoàn ch nh duy t cây
nh
phân.

×