You are on page 1of 75

CU TRC D LIU

V THUT TON
CHNG 1: CC KHI NIM
C BN
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
V d m u
Bi ton tm dy con ln nht:
Cho dy s
a
1
, a
2
, , a
n
Dy s a
i
, a
i+1
, , a
j
vi 1 i j n c gi l dy con ca dy
cho v
j
k=i
a
k
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
j
k=i
a
k
. 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
a
i
, a
i+1
, , a
j
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 = n
2
/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
1 1 1 1
0 0 0
2
1 1 1
3 2
( )( 1)
( 1) (1 2 ... ( ))
2
1 1 1 ( 1)(2 1) ( 1)
( 1)
2 2 2 6 2
6 2 3
n n n n
i j i i i
n n n
k k k
n i n i
j i n i
n n n n n
k k k k
n n n

= = = =
= = =
+
+ = + + + =
+ + + ( (
= + = + = +
(
(

= + +


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:
Nhn xt ny cho php rt bt vng lp for trong cng.
1
[ ] [ ] [ ]
j j
k i k i
a k a j a k

= =
= +

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:
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.
2
1
0
( ) ( 1) ... 1
2 2
n
i
n n
n i n n

=
= + + + = +

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 w
L
, na phi l w
R
v gia l w
M
th
trng lng cn tm s l
max(w
L
, w
R
, w
M
).
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Thut ton qui
Vic tm trng lng ca dy con ln nht na tri
(w
L
) v na phi (w
R
) c th thc hin mt cch qui
tm trng lng w
M
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 (w
ML
) v
Tnh trng lng ca dy con ln nht trong na phi bt
u im chia (w
MR
).
Khi w
M
= w
ML
+ w
MR
.
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
a
1
, a
2
,,a
m
, a
m+1
, a
m+2
,,a
n
Tnh W
ML
ca dy con
ln nht trong na tri
kt thc ti a
m
Tnh W
MR
ca dy con
ln nht trong na phi
bt u t a
m+1
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
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:
0 1
( )
( ) ( ) 2 ( ) 1
2 2 2
n
T n
n n n
T T n T n n
=

=

+ + = + >

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


Thut ton qui
Ta khng nh rng T(2
k
) = k.2
k
. Ta chng minh bng qui np
C s qui np: Nu k=0 th T(2
0
) = T(1) = 0 = 0.2
0
.
Chuyn qui np: Nu k>0, gi s rng T(2
k-1
) = (k-1)2
k-1
l
ng. Khi
T(2
k
) = 2T(2
k-1
)+2
k
= 2(k-1).2
k-1
+ 2
k
= k.2
k
.
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 s
i
l trng lng ca dy con ln nht
trong dy a
1
, a
2
, ..., a
i
, i = 1, 2, ..., n.
R rng s
n
l gi tr cn tm.
Tng hp li gii.
Trc ht, ta c
s
1
= a
1
.
Gi s i > 1 v s
k
l bit vi k = 1, 2, ..., i-1. Ta cn tnh s
i
l
trng lng ca dy con ln nht ca dy
a
1
, a
2
, ..., a
i-1
, a
i
.
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 a
i
hoc l khng
cha phn t a
i
, nn n ch c th l mt trong hai dy:
Dy con ln nht ca dy a
1
, a
2
, ..., a
i-1
Dy con ln nht ca dy a
1
, a
2
, ..., a
i
kt thc ti a
i
.
T suy ra
s
i
= max {s
i-1
, e
i
}, i = 2, , n.
trong e
i
l trng lng ca dy con ln nht ca dy a
1
, a
2
, ..., a
i
kt
thc ti a
i
.
tnh e
i
, ta cng c th s dng cng thc qui sau:
e
1
= a
1
;
e
i
= max {a
i
, e
i-1
+ a
i
}, 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) = a
0
+ a
1
x + ... + a
n
x
n
hon ton xc nh bi
dy s n, a
0
, a
1
, ..., a
n
, 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, O, O
c s dng m t thi gian tnh ca thut ton
Thay v ni chnh xc thi gian tnh, ta ni O(n
2
)
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 O
O(g(n)) = {f(n): tn ti cc hng s c
1
, c
2
v n
0
sao cho
0 s c
1
g(n) s f(n) s c
2
g(n), vi mi n > n
0
}
i vi hm g(n), ta k hiu O(g(n)) l tp cc hm
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
10n
2
- 3n = O(n
2
) ?
Vi gi tr no ca cc hng s n
0
, c
1
, v c
2
th bt ng
thc trong nh ngha l ng?
Ly c
1
b hn h s ca s hng vi s m cao nht,
cn c
2
ly ln hn, ta c
n
2
10n
2
3n 11n
2
, 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 n
0
sao cho:
f(n) s cg(n) vi mi n > n
0
}
Ta ni g(n) l cn trn tim cn ca f(n)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
K hiu 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 n
0
sao cho:
cg(n) s f(n) vi mi n > n
0
}
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, O, O
i vi hai hm bt k g(n) v f(n),
f(n) = O(g(n))
khi v ch khi
f(n) = O(g(n)) v f(n) = O(g(n))
tc l
O(g(n)) = O(g(n)) O(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)e O(f(n))
Thi gian tnh l O(f(n)) hiu l: nh gi trong tnh hung tt nht
(best case) l O(f(n)). Thng ni: nh gi thi gian tnh trong
tnh hung tt nht l O(f(n))
Ngha l thi gian tnh trong tnh hung tt nht c xc nh
bi mt hm no g(n) e O(f(n))
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
V d
Sp xp chn (Insertion sort) i hi thi gian
O(n
2
) trong tnh hung ti nht, v th bi ton sp
xp c thi gian l O(n
2
).
Mi thut ton sp xp u i hi duyt qua tt
c cc phn t, v th bi ton sp xp c thi gian
O(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
O(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,
4n
3
+ 3n
2
+ 2n + 1 = 4n
3
+ 3n
2
+ O(n)
= 4n
3
+ O(n
2
) = O(n
3
)
Trong cc ng thc, O(f(n)) thay th cho mt hm
no g(n) e O(f(n))
Trong v d trn, O(n
2
) thay th cho 3n
2
+ 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
f g ~ a b
f (n) = O(g(n)) ~ a s b
f (n) = O(g(n)) ~ a > b
f (n) = O(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) e o(g(n))
n
lim [f(n) / g(n)] < f(n) e O(g(n))
n
0 < lim [f(n) / g(n)] < f(n) e O(g(n))
n
0 < lim [f(n) / g(n)] f(n) e O(g(n))
n
lim [f(n) / g(n)] = f(n) e e(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) = O(g(n)) & g(n) = O(h(n)) f(n) = O(h(n))
f(n) = O(g(n)) & g(n) = O(h(n)) f(n) = O(h(n))
f(n) = O(g(n)) & g(n) = O(h(n)) f(n) = O(h(n))
i xng (Symmetry)
f(n) = O(g(n)) khi v ch khi g(n) = O(f(n))
i xng chuyn v (Transpose Symmetry)
f(n) = O(g(n)) khi v ch khi g(n) = O(f(n))
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
V d
A B
5n
2
+ 100n 3n
2
+ 2
log
3
(n
2
) log
2
(n
3
)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
V d
A B
5n
2
+ 100n 3n
2
+ 2 A e O(B)
A e O(n
2
), n
2
e O(B) A e O(B)
log
3
(n
2
) log
2
(n
3
)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
V d
A B
5n
2
+ 100n 3n
2
+ 2 A e O(B)
A e O(n
2
), n
2
e O(B) A e O(B)
log
3
(n
2
) log
2
(n
3
) A e O(B)
log
b
a = log
c
a / log
c
b; A = 2lgn / lg3, B = 3lgn, A/B =2/(3lg3)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
V d
A B
5n
2
+ 100n 3n
2
+ 2 A e O(B)
A e O(n
2
), n
2
e O(B) A e O(B)
log
3
(n
2
) log
2
(n
3
) A e O(B)
log
b
a = log
c
a / log
c
b; 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) = log n
2
; g(n) = log n + 5
f(n) = n; g(n) = log n
2
f(n) = log log n; g(n) = log n
f(n) = n; g(n) = log
2
n
f(n) = n log n + n; g(n) = log n
f(n) = 10; g(n) = log 10
f(n) = 2
n
; g(n) = 10n
2
f(n) = 2
n
; g(n) = 3
n
f(n) = O (g(n))
f(n) = O(g(n))
f(n) = O(g(n))
f(n) = O(g(n))
f(n) = O(g(n))
f(n) = O(g(n))
f(n) = O(g(n))
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 O(g(n)) nu mi thut ton gii P
u c thi gian tnh l O(g(n)) .
nh ngha. Cho bi ton P, ta ni thi gian tnh ca P l
O(g(n)) nu P c cn trn l O(g(n)) v cn di l O(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(n
2
): bnh phng (quadratic)
O(n
3
): bc ba (cubic)
O(a
n
): hm m (exponential ) (a > 1)
O(n
k
): 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)
Cu lnh case:
Case
cond1: stat1;
cond2: stat2;
.
.
.
condn: stat n;
endcase;
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
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;
Truyn tham s:
Tham tr
Tham bin
Bin cc b
Bin ton cc
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
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) = O(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
1
( )
m
i
t i
=

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 O(n).
Do (cng thc Muavre)
suy ra s bit biu din f
k
l O(k). Do thi
gian tnh ca mt ln lp l O(k). Vy thi
gian tnh ca Fibiter l:
|
|
.
|

\
|
|
|
.
|

\
|

|
|
.
|

\
|
+
=
k k
k
f
2
5 1
2
5 1
5
1

= =
O =
+
= =
n
k
n
k
n
n n
c k c k c
1
2
1
) (
2
) 1 (
.
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
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 s i s n sao cho T[i] = x.
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;
Gi thit l x c
mt trong mng T
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 s (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 s 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
*
s d/2
Do vng lp kt thc khi d s 1, nn t suy ra thut ton
phi kt thc.
Gi d
p
l gi tr ca j - i + 1 ln lp th p > 1 v d
0
= n. Khi

d
p
s d
p-1
/2, p > 1.
Thut ton kt thc ti bc p nu d
p
s 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)
while q>p
mid=floor((p+q)/2);
if key<=L(mid)
q=mid;
else
p=mid+1;
end
end
if key==L(p)
mid=p;
else
mid=0;
end
Function mid=bsearch2(L,p,q,key)
while q>p
mid=floor((p+q)/2);
if key==L(mid)
break
elseif key<L(mid)
q=mid-1;
else
p=mid+1;
end
end
if key==L(p)
mid=p;
else
mid=0;
end
Tm thy ri th dng?!
% Ch : p c th c gi tr sai y
p=mid; break
Hy th vi:
L = 1 , 2, 3
key = 1, 2, 3
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
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;
Cu lnh c
trng
S ln thc hin cu lnh
c trng l n.
Vy thi gian tnh ca thut
ton l O(n)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
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(n
3
)
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
(do c tt c n s cn sp xp). T ta c thi gian tnh l
O(n).
V d sau y cho thy nh gi cha chnh xc.
Gi s T[i] = i
2
, i = 1, ..., n. Ta c
1
[ ]
s
k
U k n
=
=

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


Sp xp kiu nht chim
1,
[ ]
0,
k
U k

=

nu l s chnh phng
nu tri li,
Khi s = n
2
. R rng thi gian tnh ca thut ton khng phi
l O(n), m phi l O(n
2
).
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(n
2
).

You might also like