You are on page 1of 75

CU TRC D LIU

V THUT TON

CHNG 1: CC KHI NIM


C BN

NI DUNG
1.1. V d m u
1.2. Thut ton v phc tp
1.3. K hiu tim cn
1.4. Gi ngn ng
1.5. Mt s k thut phn tch thut ton

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

V d m u
Bi ton tm dy con ln nht:
Cho dy s
a1, a2, , an
Dy s ai, ai+1 , , aj vi 1 i j n c gi l dy con ca dy
cho v jk=i ak c gi l trng lng ca dy con ny
Bi ton t ra l: Hy tm trng lng ln nht ca cc dy con, tc
l tm cc i gi tr jk=i ak. n gin ta gi dy con c trng
lng ln nht l dy con ln nht.

V d: Nu dy cho l -2, 11, -4, 13, -5, 2 th cn a ra


cu tr li l 20 (l trng lng ca dy con 11, -4, 13)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton trc tip


Thut ton n gin u tin c th ngh gii bi ton t ra
l: Duyt tt c cc dy con c th
ai, ai+1 , , aj vi 1 i j n
v tnh tng ca mi dy con tm ra trng lng ln nht.
Trc ht nhn thy rng, tng s cc dy con c th ca dy
cho l
C(n,2) + n = n2/2 + n/2 .

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton trc tip


Thut ton ny c th ci t trong on chng trnh sau:
int maxSum = 0;
for (int i=0; i<n; i++) {
for (int j=i; j<n; j++) {
int sum = 0;
for (int k=i; k<=j; k++)
sum += a[k];
if sum > maxSum
maxSum = sum;
}
}

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton trc tip


Phn tch thut ton: Ta s tnh s lng php cng
m thut ton phi thc hin, tc l m xem dng lnh
Sum += a[k]
phi thc hin bao nhiu ln. S lng php cng s l
n 1 n 1

n 1

n 1

( j i 1) (1 2 ... (n i))
i 0 j i

i 0

i 0

(n i)( n i 1)
2

1 n
1 n 2 n 1 n(n 1)(2n 1) n(n 1)
k (k 1) k k

2 k 1
2 k 1
2
6
2
k 1
n3 n 2 n

6 2 3

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton nhanh hn


rng tng cc s hng t i n j c th thu c
t tng ca cc s hng t i n j-1 bi 1 php cng, c
th l ta c:
j

j 1

a[k ] a[ j ] a[k ]
k i

k i

Nhn xt ny cho php rt bt vng lp for trong cng.

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton nhanh hn


Ta c th ci t nh sau
int maxSum = a[0];
for (int i=0; i<n; i++) {
int sum = 0;
for (int j=i; j<n; j++) {
sum += a[j];
if sum > maxSum
maxSum = sum;
}
}

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton nhanh hn


Phn tch thut ton. Ta li tnh s ln thc hin php cng
v thu c kt qu sau:
n2 n
(n i ) n (n 1) ... 1

2 2
i 0
n 1

rng s ny l ng bng s lng dy con. Dng nh


thut ton thu c l rt tt, v ta phi xt mi dy con ng 1
ln.

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton qui


Ta cn c th xy dng thut ton tt hn na! Ta s s
dng k thut chia tr. K thut ny bao gm cc
bc sau:
Chia bi ton cn gii ra thnh cc bi ton con cng dng
Gii mi bi ton con mt cch qui
T hp li gii ca cc bi ton con thu c li gii ca bi ton
xut pht.

p dng k thut ny i vi bi ton tm trng lng


ln nht ca cc dy con: Ta chia dy cho ra thnh 2
dy s dng phn t chnh gia v thu c 2 dy s
(gi tt l dy bn tri v dy bn phi) vi di gim
i mt na.
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton qui


t hp li gii, nhn thy rng ch c th xy ra mt
trong 3 trng hp:
Dy con ln nht nm dy con bn tri (na tri)
Dy con ln nht nm dy con bn phi (na phi)
Dy con ln nht bt u na tri v kt thc na phi (gia).

Do , nu k hiu trng lng ca dy con ln nht


na tri l wL, na phi l wR v gia l wM th
trng lng cn tm s l

max(wL, wR, wM).


Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton qui


Vic tm trng lng ca dy con ln nht na tri
(wL) v na phi (wR) c th thc hin mt cch qui
tm trng lng wM ca dy con ln nht bt u
na tri v kt thc na phi ta thc hin nh sau:
Tnh trng lng ca dy con ln nht trong na tri kt
thc im chia (wML) v
Tnh trng lng ca dy con ln nht trong na phi bt
u im chia (wMR).
Khi wM = wML + wMR.
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton qui


m im chia ca dy tri, m+1 l im chia ca dy phi

a1, a2,,am, am+1, am+2,,an


Tnh WML ca dy con
ln nht trong na tri
kt thc ti am

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Tnh WMR ca dy con


ln nht trong na phi
bt u t am+1

Thut ton qui

tnh trng lng ca dy con ln nht na tri (t


a[i] n a[j]) kt thc a[j] ta dng thut ton sau:
MaxLeft(a, i, j);
{
maxSum = -; sum = 0;
for (int k=j; k>=i; k--) {
sum = sum+a[k];
maxSum = max(sum, maxSum);
}
return maxSum;
}

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton qui


tnh trng lng ca dy con ln nht na phi (t
a[i] n a[j]) bt u t a[i] ta dng thut ton sau:
MaxRight(a, i, j);
{
maxSum = -; sum = 0;
for (int k=i; k<=j; k++){
sum = sum+a[k];
maxSum = max(sum, maxSum);
}
return maxSum;
}

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton qui


S ca thut ton qui c th m t nh sau:
MaxSub(a, i, j);
{
if (i = j) return a[i]
else
{
m = (i+j)/2;
wL = MaxSub(a, i, m);
wR = MaxSub(a, m+1, j);
wM = MaxLeft(a, i, m)+
MaxRight(a, m+1, j);
return max(wL, wR, wM);
}
}
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton qui


Phn tch thut ton:
Ta cn tnh xem lnh gi MaxSub(a,1,n) thc hin thut
ton i hi bao nhiu php cng?
Truc ht nhn thy MaxLeft v MaxRight i hi
n/2 + n/2 = n php cng
V vy, nu gi T(n) l s php cng cn tm, ta c cng thc
qui sau:

T ( n) n
n
n
T ( 2 ) T ( 2 ) n 2T ( 2 ) n
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

n 1
n 1

Thut ton qui


Ta khng nh rng T(2k) = k.2k. Ta chng minh bng qui np
C s qui np: Nu k=0 th T(20) = T(1) = 0 = 0.20.
Chuyn qui np: Nu k>0, gi s rng T(2k-1) = (k-1)2k-1 l
ng. Khi
T(2k) = 2T(2k-1)+2k = 2(k-1).2k-1 + 2k = k.2k.
Quay li vi k hiu n, ta c
T(n) = n log n .

Kt qu thu c l tt hn thut ton th hai !

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

So snh cc thut ton


Cng mt bi ton ta xut 3 thut ton i hi s
lng php ton khc nhau v v th s i hi thi gian
tnh khc nhau.

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton Quy hoch ng


Vic pht trin thut ton da trn DP bao gm 3 giai on:
1. Phn r: Chia bi ton cn gii thnh nhng bi ton con nh
hn c cng dng vi bi ton ban u.
2. Ghi nhn li gii: Lu tr li gii ca cc bi ton con vo mt
bng.
3. Tng hp li gii: Ln lt t li gii ca cc bi ton con
kch thc nh hn tm cch xy dng li gii ca bi ton
kch thc ln hn, cho n khi thu c li gii ca bi ton
xut pht (l bi ton con c kch thc ln nht).

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton QH
Phn r. Gi si l trng lng ca dy con ln nht
trong dy a1, a2, ..., ai , i = 1, 2, ..., n.
R rng sn l gi tr cn tm.
Tng hp li gii.
Trc ht, ta c
s1 = a1.
Gi s i > 1 v sk l bit vi k = 1, 2, ..., i-1. Ta cn tnh si l
trng lng ca dy con ln nht ca dy

a1, a2, ..., ai-1, ai .


Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton QH
Do dy con ln nht ca dy ny hoc l c cha phn t ai hoc l khng
cha phn t ai, nn n ch c th l mt trong hai dy:
Dy con ln nht ca dy a1, a2, ..., ai-1
Dy con ln nht ca dy a1, a2, ..., ai kt thc ti ai.
T suy ra
si = max {si-1, ei}, i = 2, , n.
trong ei l trng lng ca dy con ln nht ca dy a1, a2, ..., ai kt
thc ti ai.
tnh ei, ta cng c th s dng cng thc qui sau:
e1 = a1;
ei = max {ai, ei-1 + ai}, i = 2, ..., n.
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Thut ton QH
MaxSub(a);
{
smax = a[1];
(* smax trng lng ca dy con ln nht *)
maxendhere = a[1]; (* maxendhere trng lng ca dy con ln nht kt thc ti a[i] *)
imax = 1;
(* imax - v tr kt thc ca dy con ln nht *)
for i = 2 to n {
u = maxendhere + a[i];
v = a[i];
if (u > v) maxendhere = u
else maxendhere = v;
if (maxendhere > smax)then {
smax := maxendhere;
imax := i;
}
}
}

Phn tch thut ton:


D thy s php ton cng phi thc hin trong thut ton (s ln thc
hin cu lnh u = maxendhere + a[i];) l n.
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

NI DUNG
1.1. V d m u
1.2. Thut ton v phc tp
1.3. K hiu tim cn
1.4. Gi ngn ng
1.5. Mt s k thut phn tch thut ton

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Khi nim bi ton tnh ton


nh ngha. Bi ton tnh ton F l nh x t tp cc xu nh phn di
hu hn vo tp cc xu nh phn di hu hn:
F : {0, 1}* {0, 1}*.
V d:
Mi s nguyn x u c th biu din di dng xu nh phn l cch
vit trong h m nh phn ca n.
H phng trnh tuyn tnh Ax = b c th biu din di dng xu l
ghp ni ca cc xu biu din nh phn ca cc thnh phn ca ma
trn A v vect b.
a thc mt bin P(x) = a0 + a1 x + ... + an xn hon ton xc nh bi
dy s n, a0, a1, ..., an, m biu din dy s ny chng ta c th s
dng xu nh phn.
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Khi nim thut ton


nh ngha. Ta hiu thut ton gii bi ton t ra l mt th tc xc nh
bao gm mt dy hu hn cc bc cn thc hin thu c u ra cho
mt u vo cho trc ca bi ton.
Thut ton c cc c trng sau y:
u vo (Input): Thut ton nhn d liu vo t mt tp no .
u ra (Output): Vi mi tp cc d liu u vo, thut ton a ra cc d liu
tng ng vi li gii ca bi ton.
Chnh xc (Precision): Cc bc ca thut ton c m t chnh xc.
Hu hn (Finiteness): Thut ton cn phi a c u ra sau mt s hu hn
(c th rt ln) bc vi mi u vo.
n tr (Uniqueness): Cc kt qu trung gian ca tng bc thc hin thut
ton c xc nh mt cch n tr v ch ph thuc vo u vo v cc kt qu
ca cc bc trc.
Tng qut (Generality): Thut ton c th p dng gii mi bi ton c dng
cho.
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Gii bi ton l g?
What is Problem Solving?

Problem solving
L qu trnh t bi ton v pht trin chng trnh my tnh gii bi
ton t ra

Li gii bi ton bao gm:


Thut ton (Algorithms)
Algorithm: l dy cc bc cn thc hin t d liu vo (input) a ra
kt qu u ra (output) ca bi ton trong thi gian hu hn.

Cu trc d liu:
Cch t chc lu tr d liu vo - ra
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

phc tp ca thut ton


nh gi phc tp tnh ton ca thut ton l nh gi lng
ti nguyn cc loi m thut ton i hi s dng. C hai loi ti
nguyn quan trng l thi gian v b nh. Trong gio trnh
ny ta c bit quan tm n nh gi thi gian cn thit thc
hin thut ton m ta s gi l thi gian tnh ca thut ton.
Thi gian tnh ph thuc vo d liu vo.
nh ngha. Ta gi kch thc d liu u vo (hay di d
liu vo) l s bt cn thit biu din n.
Ta s tm cch nh gi thi gian tnh ca thut ton bi mt hm
ca di d liu vo.
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Php ton c bn
o thi gian tnh bng n v o no?

nh ngha. Ta gi php ton c bn l php ton c


th thc hin vi thi gian b chn bi mt hng s
khng ph thuc vo kch thc d liu.
tnh ton thi gian tnh ca thut ton ta s m s
php ton c bn m n phi thc hin.

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Cc loi thi gian tnh


Chng ta s quan tm n
Thi gian ti thiu cn thit thc hin thut ton vi mi b d liu u
vo kch thc n. Thi gian nh vy s c gi l thi gian tnh tt nht
ca thut ton vi u vo kch thc n.
Thi gian nhiu nht cn thit thc hin thut ton vi mi b d liu
u vo kch thc n. Thi gian nh vy s c gi l thi gian tnh ti
nht ca thut ton vi u vo kch thc n.
Thi gian trung bnh cn thit thc hin thut ton trn tp hu hn cc
u vo kch thc n. Thi gian nh vy s c gi l thi gian tnh trung
bnh ca thut ton.
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

NI DUNG
1.1. V d m u
1.2. Gii bi ton v cng ngh phn mm
1.3. Thut ton v phc tp
1.4. K hiu tim cn
1.5. Gi ngn ng
1.6. Mt s k thut phn tch thut ton

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

K hiu tim cn
Asymptotic Notation

, O
c s dng m t thi gian tnh ca thut ton
Thay v ni chnh xc thi gian tnh, ta ni (n2)
c xc nh i vi cc hm nhn gi tr nguyn
khng m
Dng so snh tc tng ca hai hm

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

K hiu
i vi hm g(n), ta k hiu (g(n)) l tp cc hm
(g(n)) = {f(n): tn ti cc hng s c1, c2 v n0 sao cho
0 c1g(n) f(n) c2g(n), vi mi n n0 }

Ta ni rng g(n) l nh gi tim


cn ng cho f(n)

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

V d
10n2 - 3n = (n2) ?
Vi gi tr no ca cc hng s n0, c1, v c2 th bt ng
thc trong nh ngha l ng?
Ly c1 b hn h s ca s hng vi s m cao nht,
cn c2 ly ln hn, ta c
n2 10n2 3n 11n2, vi mi n 1.
i vi hm a thc: so snh tc tng cn nhn
vo s hng vi s m cao nht
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

K hiu O (c l ln - big O)
i vi hm g(n) cho trc, ta k hiu O(g(n)) l tp cc hm
O(g(n)) = {f(n): tn ti cc hng s dng c v n0 sao cho:
f(n) cg(n) vi mi n n0 }

Ta ni g(n) l cn trn tim cn ca f(n)

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

K hiu
i vi hm g(n) cho trc, ta k hiu (g(n)) l tp cc hm
(g(n)) = {f(n): tn ti cc hng s dng c v n0 sao cho:
cg(n) f(n) vi mi n n0 }

Ta ni g(n) l cn di tim cn cho f(n)

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Lin h gia , , O
i vi hai hm bt k g(n) v f(n),
f(n) = (g(n))
khi v ch khi
f(n) = O(g(n)) v f(n) = (g(n))
tc l
(g(n)) = O(g(n)) (g(n))

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Cch ni v thi gian tnh


Ni Thi gian tnh l O(f(n)) hiu l: nh gi trong tnh hung ti
nht (worst case) l O(f(n)). Thng ni: nh gi thi gian tnh
trong tnh hung ti nht l O(f(n))

Ngha l thi gian tnh trong tnh hung ti nht c xc nh


bi mt hm no g(n) (f(n))
Thi gian tnh l (f(n)) hiu l: nh gi trong tnh hung tt nht
(best case) l (f(n)). Thng ni: nh gi thi gian tnh trong
tnh hung tt nht l (f(n))

Ngha l thi gian tnh trong tnh hung tt nht c xc nh


bi mt hm no g(n) (f(n))

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

V d
Sp xp chn (Insertion sort) i hi thi gian
(n2) trong tnh hung ti nht, v th bi ton sp
xp c thi gian l O(n2).
Mi thut ton sp xp u i hi duyt qua tt
c cc phn t, v th bi ton sp xp c thi gian
(n) trong tnh hung tt nht.
Trn thc t, s dng (chng hn) sp xp trn
(merge sort), bi ton sp xp c thi gian
(n log n) trong tnh hung ti nht.
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

K hiu tim cn trong cc ng thc


c s dng thay th cc biu thc cha cc
ton hng vi tc tng chm
V d,

4n3 + 3n2 + 2n + 1 = 4n3 + 3n2 + (n)


= 4n3 + (n2) = (n3)
Trong cc ng thc, (f(n)) thay th cho mt hm
no g(n) (f(n))
Trong v d trn, (n2) thay th cho 3n2 + 2n + 1

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

S tng t gia
so snh cc hm s v so snh cc s

fg ab
f (n) = O(g(n)) a b
f (n) = (g(n)) a b
f (n) = (g(n)) a = b

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Lin h vi khi nim gii hn


lim [f(n) / g(n)] = 0 f(n) (g(n))
n

lim [f(n) / g(n)] < f(n) (g(n))


n

0 < lim [f(n) / g(n)] < f(n) (g(n))


n

0 < lim [f(n) / g(n)] f(n) (g(n))


n

lim [f(n) / g(n)] = f(n) (g(n))


n

lim [f(n) / g(n)] khng xc nh khng th ni g


n

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Cc tnh cht
Truyn ng (Transitivity)
f(n) = (g(n)) & g(n) = (h(n)) f(n) = (h(n))
f(n) = O(g(n)) & g(n) = O(h(n)) f(n) = O(h(n))
f(n) = (g(n)) & g(n) = (h(n)) f(n) = (h(n))

i xng (Symmetry)
f(n) = (g(n)) khi v ch khi g(n) = (f(n))

i xng chuyn v (Transpose Symmetry)


f(n) = O(g(n)) khi v ch khi g(n) = (f(n))

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

V d
A
5n2 + 100n

B
3n2 + 2

log3(n2)

log2(n3)

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

V d
A
5n2 + 100n

B
3n2 + 2

A (n2), n2 (B) A (B)

log3(n2)

log2(n3)

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

A (B)

V d
A
5n2 + 100n

B
3n2 + 2

A (B)

A (n2), n2 (B) A (B)

log3(n2)

log2(n3)

A (B)

logba = logca / logcb; A = 2lgn / lg3, B = 3lgn, A/B =2/(3lg3)

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

V d
A
5n2 + 100n

B
3n2 + 2

A (B)

A (n2), n2 (B) A (B)

log3(n2)

log2(n3)

A (B)

logba = logca / logcb; A = 2lgn / lg3, B = 3lgn, A/B =2/(3lg3)

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

V d
Vi mi cp hm sau y, hoc f(n) = O(g(n)), f(n) = (g(n)),
hoc f(n) = (g(n)). Hy xc nh quan h no l ng.
f(n) = (g(n))
f(n) = log n2; g(n) = log n + 5
f(n) = n; g(n) = log n2

f(n) = (g(n))

f(n) = log log n; g(n) = log n

f(n) = O(g(n))

f(n) = n; g(n) = log2 n

f(n) = (g(n))

f(n) = n log n + n; g(n) = log n

f(n) = (g(n))

f(n) = 10; g(n) = log 10

f(n) = (g(n))

f(n) = 2n; g(n) = 10n2

f(n) = (g(n))

f(n) = 2n; g(n) = 3n

f(n) = O(g(n))

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Cn trn v cn di
Upper Bound and Lower Bound

nh ngha (Upper Bound). Cho bi ton P, ta ni cn trn


cho thi gian tnh ca P l O(g(n)) nu gii P tn ti thut
ton gii vi thi gian tnh l O(g(n)) .
nh ngha (Lower Bound). Cho bi ton P, ta ni cn di
cho thi gian tnh ca P l (g(n)) nu mi thut ton gii P
u c thi gian tnh l (g(n)) .
nh ngha. Cho bi ton P, ta ni thi gian tnh ca P l
(g(n)) nu P c cn trn l O(g(n)) v cn di l (g(n)) .

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Mt s lp thut ton

Mt s lp thut ton c bit:

O(1): hng s (constant)


O(log n): logarithmic
O(n): tuyn tnh (linear)
O(n log n): trn tuyn tnh (superlinear)
O(n2): bnh phng (quadratic)
O(n3): bc ba (cubic)
O(an): hm m (exponential ) (a > 1)
O(nk): a thc (polynomial) (k 1)

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

NI DUNG
1.1. V d m u
1.2. Thut ton v phc tp
1.3. K hiu tim cn
1.4. Gi ngn ng
1.5. Mt s k thut phn tch thut ton

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

M t thut ton: gi ngn ng


m t thut ton c th s dng mt ngn ng lp trnh no
. Tuy nhin iu c th lm cho vic m t thut ton tr
nn phc tp ng thi rt kh nm bt.
V th, m t thut ton ngi ta thng s dng gi ngn
ng (pseudo language), trong cho php va m t thut
ton bng ngn ng i thng va s dng nhng cu trc
lnh tng t nh ca ngn ng lp trnh.
Di y ta lit k mt s cu lnh chnh c s dng trong
gio trnh m t thut ton.

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

M t thut ton: phng ngn ng


Khai bo bin
integer x,y;
real u, v;
boolean a, b;
char c, d;
datatype x;

Cu lnh gn
x = expression;
hoc
x expression;
V d: x 1+4; y=a*y+2;

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

M t thut ton: gi ngn ng


Cu trc iu khin
if condition then
dy cu lnh
else
dy cu lnh
endif;
while condition do
dy cu lnh
endwhile;

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

M t thut ton: phng ngn ng


repeat
dy cu lnh;
until condition;
for i=n1 to n2 [step d]
dy cu lnh;
endfor;

Vo-Ra
read(X); /* X l bin n hoc mng */
print(data) hoc print(thng bo)

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Cu lnh case:
Case
cond1: stat1;
cond2: stat2;
.
.
.
condn: stat n;
endcase;

M t thut ton: gi ngn ng


Hm v th tc (Function and procedure)
Function name(cc tham s)
begin
m t bin;
cc cu lnh trong thn ca hm;
return (gi tr)
end;
Procedure name(cc tham s)
begin
m t bin;
cc cu lnh trong thn ca hm;
end;
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Truyn tham s:
Tham tr
Tham bin
Bin cc b
Bin ton cc

M t thut ton: phng ngn ng


V d: Thut ton tm phn t ln nht trong mng A(1:n)
Function max(A(1:n))
begin
datatype x; /* gi gi tr ln nht tm c */
integer i;
x=A[1];
for i=2 to n do
if x < A[i] then
x=A[i];
endif
endfor ;
return (x);
end max;
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

M t thut ton: gi ngn ng


V d: Thut ton hon i ni dung hai bin
Procedure swap(x, y)
begin
temp=x;
x = y;
y = temp;
end swap;

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

NI DUNG
1.1. V d m u
1.2. Thut ton v phc tp
1.3. K hiu tim cn
1.4. Gi ngn ng
1.5. Mt s k thut phn tch thut ton

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Cc k thut c bn
phn tch phc tp ca thut ton
Cu trc tun t. Gi s P v Q l hai on ca thut ton, c
th l mt cu lnh nhng cng c th l mt thut ton con.
Gi Time(P), Time(Q) l thi gian tnh ca P v Q tng ng.
Khi ta c
Quy tc tun t: Thi gian tnh i hi bi P; Q, ngha l P
thc hin trc, tip n l Q, s l
Time(P; Q) = Time(P) + Time(Q) ,
hoc trong k hiu Theta:
Time(P; Q) = (max(Time(P), Time(Q)).
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Vng lp for

for i =1 to m do P(i);
Gi s thi gian thc hin P(i) l t(i)
Khi thi gian thc hin vng lp for s l
m

t(i)
i 1

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

V d: Tnh s Fibonaci
function Fibiter(n)
begin
i=0; j=1;
for k=2 to n do
begin
j= j+i;
i= j-i;
end;
Fibiter= j;
end;

Nu coi cc php ton s hc i hi thi


gian l hng s c, v khng tnh n chi ph
t chc vng lp for th thi gian tnh ca
hm trn l (n).
Do (cng thc Muavre)
k
k
1 1 5 1 5

fk

5 2 2

suy ra s bit biu din fk l (k). Do thi


gian tnh ca mt ln lp l (k). Vy thi
gian tnh ca Fibiter l:
n

c.k c k c
k 1

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

n
k 1

n(n 1)
( n 2 )
2

Phn tch vng lp While v Repeat


Cn xc nh mt hm ca cc bin trong vng lp sao
cho hm ny c gi tr gim dn trong qu trnh lp. Khi

chng minh tnh kt thc ca vng lp ta ch cn ch ra


gi tr ca hm l s nguyn dng.
Cn xc nh s ln lp ta cn phi kho st xem gi tr
ca hm gim nh th no.
Vic phn tch vng lp Repeat c tin hnh tng t
nh phn tch vng lp While.

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

V d: Tm kim nh phn (Binary Search)


Input: Mng T[1..n] v s x
Output: Gi tr i: 1 i n sao cho T[i] = x.

Gi thit l x c
mt trong mng T

function Binary-Search(T[1..n], x);


begin
i:=1; j:=n;
while i < j do
k:= (i+j) div 2;
case
x < T[k]: j:=k-1;
x = T[k]: i:=k; j:=k; Binary-Search=k; exit; {Found!}
x > T[k]: i:=k+1;
end case
endwhile
end;
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Phn tch Binary-Search


Gi d= j-i+1. d s phn t ca mng cn tip tc kho st
K hiu i, j, i*, j* theo th t l gi tr ca i, j trc v sau khi
thc hin ln lp. Khi
Nu x < T[k], th i*=i, j*=(i+j) div 2 - 1, v th d*=j*- i*+1
= (i+j) div 2 - 1- i + 1 (i+j)/2 - i < (j - i + 1)/2 = d/2.
Nu x > T[k], th j*=j, i*=(i+j) div 2 + 1, v th d*=j*i*+1 = j - (i+j) div 2 j -(i+j-1)/2 - i = (j - i + 1)/2 = d/2.
Nu x = T[k], th d* = 1 cn d 2

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Binary-Search (tip)
Vy lun c: d* d/2
Do vng lp kt thc khi d 1, nn t suy ra thut ton
phi kt thc.
Gi dp l gi tr ca j - i + 1 ln lp th p 1 v d0 = n. Khi

dp dp-1/2, p 1.
Thut ton kt thc ti bc p nu dp 1, iu xy ra khi p
= log n.
Vy thi gian tnh ca thut ton l O(log n)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Cc m t khc ca thut ton Binary Search


Function mid=bsearch1(L,p,q,key)

Function mid=bsearch2(L,p,q,key)

while q>p
mid=floor((p+q)/2);
if key<=L(mid)
q=mid;
else
p=mid+1;
end
end

while q>p
mid=floor((p+q)/2);
if key==L(mid)
break break
p=mid;

if key==L(p)
mid=p;
else
mid=0;
end

Tm thy ri th dng?!
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

elseif key<L(mid)
q=mid-1;
else
p=mid+1;
end
end

% Ch :

p c th c gi tr sai y

if key==L(p)
mid=p;
else
mid=0;
end

Hy th vi:
L = 1 , 2, 3
key = 1, 2, 3

Hm trn C
boolean binary_search_1(int* a, int n, int x) {
/* Test xem x c mt trong mng a[] kch thc n. */
int i;
while (n > 0) {
i = n / 2;
if (a[i] == x)
return true;
if (a[i] < x) { /* Tip tc tm na tri */
a = &a[i + 1];
n = n - i - 1; }
else /* Tip tc tm na phi */
n = i;
}
return false;
}
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Cu lnh c trng
nh ngha. Cu lnh c trng l cu lnh c
thc hin thng xuyn t nht l cng nh bt k cu
lnh no trong thut ton.
Nu gi thit thi gian thc hin mi cu lnh l b
chn bi hng s th thi gian tnh ca thut ton s
cng c vi s ln thc hin cu lnh c trng
=> nh gi thi gian tnh c th m s ln thc
hin cu lnh c trng

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

V d: FibIter

function Fibiter(n)
begin
i:=0; j:=1;
for k:=1 to n do
begin
j:= j+i;
i:= j-i;
end;
Fibiter:= j;
end;
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Cu lnh c
trng
S ln thc hin cu lnh
c trng l n.
Vy thi gian tnh ca thut
ton l O(n)

V d: Thut ton 1 v d m u
int maxSum =0;
for (int i=0; i<n; i++) {
for (int j=i; j<n; j++) {
int sum = 0;
for (int k=i; k<=j; k++)
sum += a[k];
if sum > maxSum
maxSum = sum;
}
}

Chn cu lnh c trng l sum+=a[k].


=> nh gi thi gian tnh ca thut ton l O(n3)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

V d: Sp xp
Nhn xt: Khi thut ton i hi thc hin nhiu vng lp lng nhau, th c
th ly cu lnh nm trong vng lp trong cng lm cu lnh c trng.
Tuy vy, cng cn ht sc thn trng khi s dng cch la chn ny.
V d. Sp xp kiu nht chim vo chung (Pigeonhole Sorting).
Sp xp n s nguyn dng c gi tr nm trong khong 1..s.
u vo: T[1..n]: mng cha dy cn sp xp.
u ra: T[1..n]: mng cha dy c sp xp khng gim.
Thut ton bao gm 2 thao tc:
m chim: Xy dng mng U[1..s], trong phn t U[k] m s
lng s c gi tr l k trong mng T.
Nht chim: Ln lt nht U[1] con chim loi 1 vo U[1] lng u tin,
U[2] con chim loi 2 vo U[2] lng tip theo, ...
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Sp xp kiu nht chim


procedure Pigeonhole-Sorting;
begin
(* m chim *)
for i:=1 to n do inc(U[T[i]]);
(* Nht chim *)
i:=0;
for k:=1 to s do
while U[k]<>0 do
begin
i:=i+1;
T[i]:=k;
U[k]:=U[k]-1;
end;
end;
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Sp xp kiu nht chim


Nu chn cu lnh bt k trong vng lp while lm cu lnh
c trng, th r rng vi mi k, cu lnh ny phi thc hin
U[k] ln. Do s ln thc hin cu lnh c trng l
s

U [k ] n
k 1

(do c tt c n s cn sp xp). T ta c thi gian tnh l


(n).
V d sau y cho thy nh gi cha chnh xc.
Gi s T[i] = i2, i = 1, ..., n. Ta c

Tham kho ti liu ca PGS. TS. Nguyn c Ngha

Sp xp kiu nht chim


1, nu k l s chnh phng
U [k ]
0, nu tri li,
Khi s = n2. R rng thi gian tnh ca thut ton khng phi
l O(n), m phi l O(n2).
Li y l do ta xc nh cu lnh c trng cha ng, cc
cu lnh trong thn vng lp while khng th dng lm cu lnh
c trng trong trng hp ny, do c rt nhiu vng lp rng
(khi U[k] = 0).
Nu ta chn cu lnh kim tra U[k] <> 0 lm cu lnh c
trng th r rng s ln thc hin n s l n + s. Vy thut ton
c thi gian tnh O(n+s) = O(n2).
Tham kho ti liu ca PGS. TS. Nguyn c Ngha

You might also like