Professional Documents
Culture Documents
Dequy
Dequy
cng
Phng php thit k mt thut ton
quy
Xy dng mt thut ton quy trn
mng
Xy dng mt thut ton quy trn danh
sch lin kt n
Xy dng mt thut ton quy trn cy
nh phn (lu tr mc ni)
i cng
Chng
s ho bi ton
Phn tch trng hp chung (biu din bi
ton di dng bi ton cng loi nhng
khc phm vi gii quyt)
Xc nh trng hp suy bin
V d: Tnh an
Tham
s ho bi ton:
Function Power(a: real; n: byte):real;
Phn tch trng hp chung:
an = a.an-1 hay Power(a,n) = a* Power(a,n-1)
Tr.hp suy bin: n = 0 ( Power(a,0) = 1 )
phc tp tnh ton: O(n)
a[1] n a[n]}
Cch 2: CTC([var] dau, cuoi: word; ...) {x l t
phn t u l a[dau] n phn t cui l a[cuoi]}
V d: Sp xp mng a gm n phn t
Tham
Sort(n-1);
if a[n-1]>a[n] then
begin swap(a[n-1],a[n]);
Sort(n-1);
end;
end;
End;
Li gi t chng trnh chnh: Sort(n);
phc tp tnh ton: O(n2)
V d: Sp xp mng a gm n phn t
Tham
Sort(dau+1, cuoi);
if a[dau]>a[dau+1] then
begin swap(a[dau],a[dau+1]);
Sort(dau+1, cuoi);
end;
end;
End;
Li gi t chng trnh chnh: Sort(1,n);
phc tp tnh ton: O(n2)
CTC(F^.next, ...)
V d: Lit k gi tr trng Info ca mi nt thuc
danh sch F
Procedure List(F: TroNut);
Begin
If F<>nil then
begin
writeln(F^.Info);
List(F^.Next);
end;
End;
Sp xp mt danh sch F
Procedure Sort(F: TroNut);
Begin
If (F<>nil) and (F^.Next<>nil) then
begin Sort(F^.Next);
If F^.Info>F^.Next^.Info then
begin swap(F^.Info, F^.Next^.Info);
Sort(F^.Next);
end;
end;
End;
Th tc b sung mt nt c gi tr trng
Info bng X vo danh sch tng dn F
Procedure BS(var F: TroNut; X:Integer);
var q: TroNut;
Begin If (F=nil) or (F^.Info >= X) then
begin new(q); q^.info:=X; q^.next:= F;
F:=q;
end
Else BS(F^.Next, X);
End;
Th tc xo mt nt c gi tr trng Info
bng X ca danh sch tng dn F
Procedure Xoa(var F: TroNut; X:Integer);
var q: TroNut;
Begin
If (F<>nil) and (F^.Info <= X) then
If F^.Info=X then
begin q:=F;
F:= F^.Next;
Dispose(q);
end
Else Xoa(F^.Next, X);
End;
V d: Tm chiu cao ca cy T
Function ChieuCao(T: Tronut): Word;
Begin
If T = nil
then ChieuCao:= 0
else
ChieuCao:=max(ChieuCao(T^.left),ChieuCao(T^.Right))+1;
End;
V d: Tm a ch nt cha ca nt tr bi p
(thuc cy T)
Function Cha(T, p: TroNut):TroNut;
Begin
If (T=nil) or (T=p)
then Cha:=nil
else
If (T^.Left=p) or (T^.Right=p)
then Cha:=T
else
if Cha(T^.Left, p)<>nil
then Cha:= Cha(T^.Left, p)
else Cha:= Cha(T^.Right, p);
End;
V d: Kim tra cy T l mt ng
Function LaDong(T: TroNut): Boolean;
{cho kt qu l True nu cy T l mt ng}
Begin
If (T = nil) or (T^.Left=nil and T^.Right=nil)
then LaDong:= True
else If T^.Left=nil
then LaDong:=(T^.Info> T^.Right^.Info) and LaDong(T^.Right)
else
If T^.Right=nil
then LaDong:= (T^.Info> T^.Left^.Info)
and LaDong(T^.Left)
else LaDong:= (T^.Info> T^.Left^.Info)
and (T^.Info> T^.Right^.Info)
and LaDong(T^.Left)
and LaDong(T^.Right);
End;