You are on page 1of 172

1

Chng 1:
Cc phng php phn tch thut
ton
Trnh Huy Hong
Khoa Cng ngh thng tin
i hc S phm TPHCM
2
Ni dung
Mt s kin thc Ton cn thit
Thut ton l g?
Vai tr ca phn tch thut ton
Cc phng php phn tch thut ton
B khung cho qu trnh phn tch thut ton
M gi
RAM
Thi gian thc hin chng trnh
phc tp ca chng trnh
3
Mt s k thut Ton hc thng dng
Chng minh qui np
Chng minh mnh ng vi trng hp u
tin (n=n
0
)
Gi s mnh ng n trng hp th k (n=k)
Chng minh mnh ng vi trng hp th
k+1 (n=k+1)
Kt lun mnh ng vi mi trng hp (mi
n >= n
0
)
4
Mt s k thut Ton hc thng dng
(tt)
Cc tng dy s thng dng
2
1) n(n
0 1 2 ... 2) (n 1) (n n i
n
0 i
+
= + + + + + + =

=
Dy s hc
x - 1
1
x
0 i
i
=

=
if |x| < 1
1 - x
1 x
x
1 n
n
0 i
i

=
+
=

Dy hnh hc
if x = 1
5
Thut ton l g?
Thut ton l mt th tc tnh ton c
nh ngha r rng bin i cc u vo
thnh cc u ra nhm t c quan h
u vo u ra mong mun
Algorithm Input
Output
V d:
input: Dy s.
output: Dy s c sp xp th t.
6
Thut ton l g? (tt)
Nu cho trc mt bi ton, th mt cch
gii bi ton c phn nh ra thnh mt s
hu hn bc, c kt thc cui cng v t
c kt qu mong mun gi l thut ton
(V c Thi, 1999)
7
Vai tr ca vic phn tch thut ton
Phn tch thut ton = Xc nh cc c trng lin quan n
hiu nng. (D on ti nguyn c yu cu.)
Thi gian, b nh, ng truyn
Thi gian thi hnh (running time) l quan tm chnh bi n l ti
nguyn quan trng nht v khng th phc hi.
Ti sao phi phn tch thut ton?
Chn cch hiu qu nht trong s cc thut ton c th c cho
cng mt vn .
Liu mt gii php tt nht c thi gian thi hnh chp nhn
c trong thc t hay khng?
Liu mt thut ton c ti u hay cha? Liu c mt
thut ton no khc tt hn khng?
8
Phn tch thc nghim
Da trn thi gian thc thi ca thut ton
c ci t trn cc u vo c th.
Ph thuc vo mi trng phn cng (vi x
l, xung nhp ng h, RAM, a cng,) v
phn mm (h iu hnh, ngn ng lp
trnh, bin dch hoc thng dch,)
9
Phn tch thc nghim (tt)
Hn ch:
Cc thc nghim ch c tin hnh trn mt s
cc u vo kim tra. Chng cn phi c tnh
i din cao.
Rt kh so snh tnh hiu qu ca hai thut
ton tr khi chng chy trn cng mt mi trng
phn cng v phn mm.
Cn phi ci t v thi hnh thut ton
10
tng
C mt b khung phn tch tha
Xem xt tt c u vo c th
Cho php nh gi hiu qu tng i ca hai
thut ton bt k c lp vi mi trng phn
cng v phn mm
C th c tin hnh bng cch nghin cu m
t cp cao ca thut ton m khng cn phi tht
s ci t v thi hnh thut ton
11
Mc tiu
Lin kt mi thut ton vi mt hm f(n)
c trng thi gian thc thi ca thut ton
vi n l kch thc u vo.
Cng l mc tiu ca mn hc
12
Cc thnh phn ca b khung
Mt ngn ng: m t cc thut ton
Mt my tnh: thi hnh cc m t thut
ton bi ngn ng trn
Mt o: biu t thi gian thc thi ca
bn m t thut ton trn my tnh
13
Ngn ng: ngn ng m gi
M t thut ton cp cao ngi c c
th hiu ng thi r rng c ng sc tch.
Da trn cc cu thnh chung ca ngn ng
C, C++, Java.
14
Cu thnh ca m gi
Biu thc:
k hiu ton hc chun
php gn l
so snh bng l =.
Khai bo hm:
Algorithm Tn_Thut_Ton(tham s 1, tham s 2,)
Cu trc iu kin:
If iu_kin then
Cc hnh ng
15
Cu thnh ca m gi (tt)
Vng lp while:
While iu_kin do
Cc hnh ng
Vng lp repeat:
Repeat
Cc hnh ng
Until iu_kin
Vng lp for
For nh_ngha_bin_tng do
Cc hnh ng
16
Cu thnh ca m gi (tt)
Truy xut mng:
A[i]: phn t th i ca mng A. Bt u t 0.
Lu phn t u tin ca mng c ngha l
phn t 1.
Gi hm:
tn_hm(cc_tham_s)
Kt thc hm:
Return gi_tr: tr v gi tr cho hm gi hm ny
17
V d: Tm phn t ln nht ca mng
Algorithm arrayMax(A, n):
Input: Mt mng A lu n >=1 s nguyn
Output: Phn t ln nht trong A
currentMax A[1]
for i 2 to n do
if currentMax < A[i] then
currentMax A[i]
return currentMax
18
My tnh:
M hnh my tnh truy xut ngu nhin
Cu to: CPU ni vi mt b nh. B nh bao gm
cc nh. Mi nh c th lu 1 s (khng gii
hn kch thc), 1 k t hoc 1 a ch.
H tr cc thao tc c s:
Gn gi tr vo bin
Gi mt phng thc
Thi hnh mt thao tc s hc (cng, tr,)
So snh hai s
Truy xut phn t mng
Kt thc hm
Tham chiu i tng
19
M hnh my tnh truy xut ngu nhin
Cc thao tc c s c thi gian thi hnh gn bng
nhau.
Cc thao tc c s c thi gian thi hnh khng ph
thuc kch thc u vo ca n.
Thi gian thc thi ca thut ton = S lng cc
thao tc c s ca thut ton trong m hnh my
tnh truy xut ngu nhin (RAM)
c gi l phc tp ca thut ton
20
phc tp thut ton
phc tp thut ton thng ph thuc
vo:
Kch thc ca input (u vo)
S phn t ca dy
S nh v cnh trong th
Cc c trng khc ca d liu u vo
Dy gn nh c th t hay cha?
21
Cc cch xc nh phc tp thut
ton
phc tp trong trng hp xu nht
S thao tc c s ti a m thut ton thi hnh trong tt c cc
input c th
D tm thy
phc tp trong trng hp trung bnh
Gi tr trung bnh ca thi gian thc thi cho tt c cc input c th.
Cn phi c hm phn phi xc sut cho s xut hin ca input.
iu ny thng rt kh xc nh
phc tp trong trng hp tt nht
S thao tc c s t nht m thut ton thi hnh cho bt k mt
input no
Khng c ch lm (???)
22
m s thao tc c s
Xt v d thut ton arrayMax
currentMax A[1]: c 2 thao tc c s (truy xut phn t
mng v gn)
Bt u vng lp bin i c gn bng 2 1 thao tc c s
Trc khi thc hin thn vng lp for iu kin i<=n phi c
kim tra. Tng cng n s kim tra n ln c n thao tc c s
Thn vng lp for c thc hin n-1 ln. Ti mi ln lp A[i]
c so snh vi currentMax (2 thao tc c s), A[i] c kh
nng c gn cho currentMax (2 thao tc c s), v bin i s
c tng (2 thao tc c s) c 4 hoc 6 thao tc c s
c t 4(n-1) n 6(n-1) thao tc c s trong thn vng lp.
Kt thc hm tr v gi tr ln nht (1 thao tc c s)
23
m s thao tc c s
Tng s thao tc c s trong thut ton
Trng hp tt nht
2+1+n+4(n-1)+1 = 5n
Trng hp xu nht
2+1+n+6(n-1)+1 = 7n-2
24
Phn tch xu nht vs Phn tch trung
bnh
Phn tch trung bnh:
C gi tr
Phi xc nh hm phn b xc sut ca d liu u vo
Kh
Phn tch xu nht:
D hn
Nguyn tc: thut ton thi hnh tt trong trng hp xu
nht d nhin s thi hnh tt trong mi trng hp
25
Thi gian thc hin
ca chng trnh
Thi gian thc hin mt chng trnh l mt
hm ca kch thc d liu vo, k hiu T(n)
trong n l kch thc ( ln) ca d liu
vo.
V d : Chng trnh tnh tng ca n s c
thi gian thc hin l T(n) = cn trong c l
mt hng s.
Thi gian thc hin chng trnh l mt hm
khng m, tc l T(n) > 0 n > 0.
26
n v o thi gian thc hin
n v ca T(n) khng phi l n v o thi
gian bnh thng nh gi, pht giy... m
thng c xc nh bi s cc lnh c
thc hin trong mt my tnh l tng.
V d: Khi ta ni thi gian thc hin ca mt
chng trnh l T(n) = Cn th c ngha l
chng trnh y cn Cn ch th thc thi.
27
Thi gian thc hin
trong trng hp xu nht
Ni chung th thi gian thc hin chng
trnh khng ch ph thuc vo kch thc m
cn ph thuc vo tnh cht ca d liu vo.
V vy thng ta coi T(n) l thi gian thc
hin chng trnh trong trng hp xu nht
trn d liu vo c kch thc n, tc l: T(n)
l thi gian ln nht thc hin chng
trnh i vi mi d liu vo c cng kch
thc n.
28
T sut tng
Ta ni rng hm khng m T(n) c t sut
tng (growth rate) f(n) nu tn ti cc hng
s C v N
0
sao cho T(n) Cf(n) vi mi n
N
0
.
Ta c th chng minh c rng Cho mt
hm khng m T(n) bt k, ta lun tm c
t sut tng f(n) ca n.
29
T sut tng (tt)
V d 1: Gi s T(0) = 1, T(1) = 4 v tng qut
T(n) = (n+1)
2
. t N
0
= 1 v C = 4 th vi mi n
1 chng ta d dng chng minh c rng
T(n) = (n+1)
2
4n
2
vi mi n 1, tc l t sut
tng ca T(n) l n
2
.
V d 2: T sut tng ca hm T(n) = 3n
3
+ 2n
2
l n
3
. Thc vy, cho N
0
= 0 v C = 5 ta d dng
chng minh rng vi mi n 0 th 3n
3
+ 2n
2

5n
3
30
Khi nim phc tp
ca gii thut
Gi s ta c hai gii thut P
1
v P
2
vi thi gian thc hin
tng ng l T
1
(n) = 100n
2
(vi t sut tng l n
2
) v T
2
(n) =
5n
3
(vi t sut tng l n
3
).
Khi n>20 th T
1
< T
2
. S d nh vy l do t sut tng ca T
1
nh hn t sut tng ca T
2
.
Nh vy mt cch hp l l ta xt t sut tng ca hm thi
gian thc hin chng trnh thay v xt chnh bn thn thi
gian thc hin.
Cho mt hm T(n), T(n) gi l c phc tp f(n) nu tn ti
cc hng C, N
0
sao cho T(n) Cf(n) vi mi n N
0
(tc l
T(n) c t sut tng l f(n)) v k hiu T(n) l O(f(n)) (c l
ca f(n)).
31
Khi nim phc tp
ca gii thut (tt)
Ch : O(C.f(n))=O(f(n)) vi C l hng s. c bit
O(C)=O(1)
Cc hm th hin phc tp c cc dng thng
gp sau: log
2
n, n, nlog
2
n, n
2
, n
3
, 2
n
, n!, n
n
.
Ba hm cui cng ta gi l dng hm m, cc hm
khc gi l hm a thc.
Mt gii thut m thi gian thc hin c phc tp
l mt hm a thc th chp nhn c, cn cc gii
thut c phc tp hm m th phi tm cch ci
tin gii thut.
Trong cch vit, ta thng dng logn thay th cho
log
2
n cho gn.
32
o: K php O ln
Cch m s thao tc c s khng ph hp cho cc
thut ton phc tp.
Cch n gin hn: c lng s lng cc thao
tc c s n mt hng s no .
nh ngha: f(n) = O(g(n)) -c>0,-n
0
1:n
n
0
,f(n)cg(n)
ngha: f(n) tim cn n cg(n)
Lu : du = trong f(n) = O(g(n)) ngha l thuc
33
K php O ln
O(g(n)) = {f(n) :
hng s dng c v n
0,
tha
n n
0
,
Ta c 0 f(n) cg(n) }
ngha: Tp cc hm c t l
tng (bc tng) thp hn hoc
bng g(n).
g(n) l mt tim cn trn ca f(n).
34
K php O ln
V d: T(n) = 7n-2, T(n) = O(n), c=7, n
0
=1.
Mt thut ton c c lng s thao tc c
s f(n) = O(n) th s tt hn l O(n
2
).
35
K php
(g(n)) = {f(n) :
hng s c v n
0,
tha n
n
0
,
Ta c 0 cg(n) f(n)}
ngha: Tp cc hm c t l
tng (bc tng) cao hn hoc
bng g(n).
g(n) l mt tim cn di ca f(n).
36
Mt s mnh
d(n) = O(f(n)) ad(n) = O(f(n)), a>0
d(n) = O(f(n)), e(n) = O(g(n)) d(n)+e(n) =
O(f(n)+g(n))
d(n) = O(f(n)), e(n) = O(g(n)) d(n)e(n) = O(f(n)g(n))
d(n) = O(f(n)), f(n) = O(g(n)) d(n) = O(g(n))
f(n) l mt a thc bc d f(n) = O(n
d
)
n
x
=O(a
n
),x>0, a>1
logn
x
= O(logn), x>0
37
Phng php tnh
phc tp
Chng ta s ni n phng php tnh phc tp (thi gian thc
hin) ca:
Chng trnh khng gi chng trnh con.
Chng trnh c gi chng trnh con khng quy.
Chng trnh quy
Trc ht ta c hai quy tc quan trng l quy tc cng v quy tc
nhn
Quy tc cng: Nu T
1
(n) v T
2
(n) l thi gian thc hin ca hai on
chng trnh P
1
v P
2
; v T
1
(n)=O(f(n)), T
2
(n)=O(g(n)) th thi gian
thc hin ca on hai chng trnh ni tip nhau l
T(n)=O(max(f(n),g(n))).
Quy tc nhn: Nu T
1
(n) v T
2
(n) l thi gian thc hin ca hai on
chng trnh P
1
v P
2
v T
1
(n) = O(f(n)), T
2
(n) = O(g(n)) th thi gian
thc hin ca on hai on chng trnh lng nhau l T(n) =
O(f(n).g(n)).
38
Qui tc tng qut phn tch mt
chng trnh khng c chng trnh con
Thi gian thc hin ca mi lnh gn, READ, WRITE l O(1)
Thi gian thc hin ca mt chui tun t cc lnh c
xc nh bng qui tc cng. Nh vy thi gian ny l thi
gian thi hnh mt lnh no lu nht trong chui cc lnh.
Thi gian thc hin cu trc IF l thi gian ln nht thc
hin lnh sau THEN hoc sau ELSE v thi gian kim tra
iu kin. Thng thi gian kim tra iu kin l O(1).
Thi gian thc hin vng lp l tng (trn tt c cc ln lp)
thi gian thc hin thn vng lp. Nu thi gian thc hin
thn vng lp khng i th thi gian thc hin vng lp l
tch ca s ln lp vi thi gian thc hin thn vng lp.
39
V d 1: Th tc sp xp ni bt
void BubbleSort(int a[n])
{ int i,j,temp;
/*1*/ for(i= 0; i<=n-2; i++)
/*2*/ for(j=n-1; j>=i+1;j--)
/*3*/ if (a[j].key < a[j-1].key) {
/*4*/ temp=a[j-1];
/*5*/ a[j-1] = a[j];
/*6*/ a[j] = temp;
}
}
40
Tnh thi gian thc hin ca th tc
sp xp ni bt
y l chng trnh s dng cc vng lp xc nh. Ton b
chng trnh ch gm mt lnh lp {1}, lng trong lnh {1} l
lnh lp {2}, lng trong lnh {2} l lnh {3} v lng trong lnh {3}
l 3 lnh ni tip nhau {4}, {5} v {6}.
Chng ta s tin hnh tnh phc tp theo th t t trong ra.
Trc ht, c ba lnh gn {4}, {5} v {6} u tn O(1) thi gian,
vic so snh a[j-1] > a[j] cng tn O(1) thi gian, do lnh {3}
tn O(1) thi gian.
Vng lp {2} thc hin (n-i) ln, mi ln O(1) do vng lp {2}
tn O((n-i).1) = O(n-i).
Vng lp {1} c i chy t 1 n n-1 nn thi gian thc hin ca
vng lp {1} v cng l phc tp ca gii thut l
) O(n
2
1) n(n
i) (n T(n)
2
1 n
1 i
=

= =

=
41
Phn tch
cc chng trnh qui
C th thy hnh nh chng trnh quy A nh
sau:
phn tch cc cc chng trnh quy ta cn:
Thnh lp phng trnh quy.
Gii phng trnh quy, nghim ca phng trnh quy
s l thi gian thc hin ca chng trnh quy.
A
42
Chng trnh quy
Chng trnh quy gii bi ton kch thc n,
phi c t nht mt trng hp dng ng vi mt n
c th v li gi quy gii bi ton kch thc k
(k<n).
V d : Chng trnh quy tnh n!
int Giai_thua(int n) {
if (n==0) return 1;
else return (n* Giai_thua(n-1));
};
Trong v d trn, n=0 l trng hp dng v k=n-1.
43
Thnh lp
phng trnh quy
Phng trnh quy l mt phng trnh biu din mi lin
h gia T(n) v T(k), trong T(n) v T(k) l thi gian thc
hin chng trnh c kch thc d liu nhp tng ng l n
v k, vi k < n.
thnh lp c phng trnh quy, ta phi cn c vo
chng trnh quy.
ng vi trng hp quy dng, ta phi xem xt khi
chng trnh lm g v tn ht bao nhiu thi gian, chng hn
thi gian ny l c(n).
Khi quy cha dng th phi xt xem c bao nhiu li gi
quy vi kch thc k ta s c by nhiu T(k).
Ngoi ra ta cn phi xem xt n thi gian phn chia bi
ton v tng hp cc li gii, chng hn thi gian ny l d(n).
44
Thnh lp
phng trnh quy (tt)
Dng tng qut ca mt phng trnh quy s l:
C(n) l thi gian thc hin chng trnh ng vi trng
hp quy dng.
F(T(k)) l mt a thc ca cc T(k).
d(n) l thi gian phn chia bi ton v tng hp cc
kt qu.

+
=
d(n) F(T(k))
C(n)
T(n)
45
V d v phng trnh quy ca chng
trnh quy tnh n!
Gi T(n) l thi gian tnh n!.
Th T(n-1) l thi gian tnh (n-1)!.
Trong trng hp n = 0 th chng trnh ch thc hin mt lnh
return 1, nn tn O(1), do ta c T(0) = C
1
.
Trong trng hp n>0 chng trnh phi gi quy Giai_thua(n-1),
vic gi quy ny tn T(n-1), sau khi c kt qu ca vic gi
quy, chng trnh phi nhn kt qu vi n v return tch s.
Thi gian thc hin php nhn v return l mt hng C
2
. Vy ta
c phng trnh:

> +
=
0 n nu C 1) - T(n
0 = n nu C
T(n)
2
1
46
Gii phng trnh quy
C ba phng php gii phng trnh
quy:
Phng php truy hi.
Phng php on nghim.
Li gii tng qut ca mt lp cc phng
trnh quy.
47
Phng php truy hi
Dng quy thay th bt k T(m) vi m < n vo
pha phi ca phng trnh cho n khi tt c T(m)
vi m > 1 c thay th bi biu thc ca cc T(1)
hoc T(0).
V T(1) v T(0) lun l hng s nn chng ta c cng
thc ca T(n) cha cc s hng ch lin quan n n
v cc hng s.
T cng thc ta suy ra nghim ca phng trnh.
48
V d 1 v gii phng trnh quy bng
phng php truy hi
T(n) = T(n-1) + C
2
T(n) = [T(n-2) + C
2
] + C
2
= T(n-2) + 2C
2
T(n) = [T(n-3) + C
2
] + 2C
2
= T(n-3) + 3C
2

T(n) = T(n-i) + iC
2
Qu trnh trn kt thc khi n - i = 0 hay i = n.
Khi ta c T(n) = T(0) + nC
2
= C1 + nC
2
= O(n)

> +
=
0 n nu C 1) - T(n
0 = n nu C
T(n)
2
1
49
V d 2 v gii phng trnh
quy bng phng php truy hi

> +
|
.
|

\
|
=
=
1 n nu n C
2
n
2T
1 n nu C
T(n)
2
1
n C +
2
n
2T = T(n)
2
|
.
|

\
|
n 2C
4
n
4T n C
2
n
C
4
n
2T 2 T(n)
2 2 2
+
|
.
|

\
|
= +
(

+
|
.
|

\
|
=
n C 3
8
n
8T n C 2
4
n
C
8
n
2T 4 T(n)
2 2 2
+
|
.
|

\
|
= +
(

+
|
.
|

\
|
=
..
n iC
2
n
T 2 T(n)
2
i
i
+
|
.
|

\
|
=
Qu trnh suy rng s kt thc khi n/2
i
= 1 hay 2
i
= n
v do i = logn. Khi ta c:
T(n) = nT(1) + lognC
2
n = C
1
n + C
2
nlogn = O(nlogn).
50
Li gii tng qut cho mt lp cc
phng trnh quy
Trong mc ny, chng ta s nghin cu cc phn
sau:
Bi ton quy tng qut.
Thnh lp phng trnh quy tng qut.
Gii phng trnh quy tng qut.
Cc khi nim v nghim thun nht, nghim ring v hm
nhn.
Nghim ca phng trnh quy tng qut khi d(n) l hm
nhn.
Nghim ca phng trnh quy tng qut khi d(n) khng
phi l hm nhn.
51
Bi ton quy tng qut
gii mt bi ton kch thc n, ta chia bi ton cho
thnh a bi ton con, mi bi ton con c kch thc n/b. Gii
cc bi ton con ny v tng hp kt qu li c kt qu
ca bi ton cho.
Vi cc bi ton con chng ta cng s p dng phng php
tip tc chia nh ra na cho n cc bi ton con kch
thc 1. K thut ny s dn chng ta n mt gii thut
quy.
Gi thit rng mi bi ton con kch thc 1 ly mt n v
thi gian
Gi thit thi gian chia bi ton kch thc n thnh cc bi
ton con kch thc n/b v tng hp kt qu t cc bi ton
con c li gii ca bi ton ban u l d(n).
52
Thnh lp phng trnh quy tng qut
Nu gi T(n) l thi gian gii bi ton kch thc n
Th T(n/b) l thi gian gii bi ton con kch thc n/b.
Khi n = 1 theo gi thit trn th thi gian gii bi ton kch
thc 1 l 1 n v, tc l T(1) = 1.
Khi n ln hn 1, ta phi gii quy a bi ton con kch thc
n/b, mi bi ton con tn T(n/b) nn thi gian cho a li gii
quy ny l aT(n/b).
Ngoi ra ta cn phi tn thi gian phn chia bi ton v
tng hp cc kt qu, thi gian ny theo gi thit trn l d(n).
Vy ta c phng trnh quy:
( )

> +
|
.
|

\
|
=
=
1 n neu n d
b
n
aT
1 n neu 1
T(n)
53
Gii phng trnh quy tng qut
d(n)
b
n
aT T(n) +
|
.
|

\
|
=
d(n)
b
n
ad
b
n
T a d(n)
b
n
d
b
n
aT a T(n)
2
2
2
+
|
.
|

\
|
+
|
.
|

\
|
= +
(

|
.
|

\
|
+
|
.
|

\
|
=
d(n)
b
n
ad
b
n
d
b
n
aT a T(n)
2 3
2
+
|
.
|

\
|
+
(

|
.
|

\
|
+
|
.
|

\
|
=
........

1 - i
0 j
j
j
i
i
b
n
d a
b
n
T a T(n)
=
|
.
|

\
|
+
|
.
|

\
|
=
d(n)
b
n
ad
b
n
d a
b
n
T a
2
2
3
3
+
|
.
|

\
|
+
|
.
|

\
|
+
|
.
|

\
|
=
54
Gii phng trnh quy tng qut
(tt)
Gi s n = b
k
, qu trnh suy rng trn s kt thc khi i = k. Khi
ta c:

1 - i
0 j
j
j
i
i
b
n
d a
b
n
T a T(n)
=
|
.
|

\
|
+
|
.
|

\
|
=
1 T(1)
b
b
T
b
n
T
b
n
T
k
k
k i
= =
|
|
.
|

\
|
=
|
.
|

\
|
=
|
.
|

\
|
Thay vo trn ta c:
( )

1 - k
0 j
j - k j k
b d a a T(n)
=
+ =
55
Nghim thun nht v nghim ring
( )

1 - k
0 j
j - k j k
b d a a T(n)
=
+ =
Nghim
thun nht
a
k
= n
log
b
a
Nghim ring
Nghim ca phng trnh l:
MAX(NTN,NR).
56
Hm nhn
Mt hm f(n) c gi l hm nhn
(multiplicative function) nu f(m.n) = f(m).f(n)
vi mi s nguyn dng m v n.
V d:
Hm f(n) = n
k
l mt hm nhn, v f(m.n) = (m.n)
k
= m
k
.n
k
= f(m).f(n).
Hm f(n) = logn khng phi l mt hm nhn, v
f(n.m) = log(n.m) = logn+logm = logn.logm =
f(n).f(m)
57
Tnh nghim ring khi d(n) l hm
nhn
Khi d(n) l hm nhn, ta c:
d(b
k-j
) = d(b.b.b..b) =
d(b).d(b)d(b) = [d(b)]
k-j
( )
1 -
d(b)
a
1 -
d(b)
a
[d(b)]
d(b)
a
[d(b)] [d(b)] a b d a NR
k
k
1 - k
0 j
j
k
1 - k
0 j
j - k j
1 - k
0 j
j - k j

(

=
(

= = =
= = =
1 -
d(b)
a
[d(b)] - a
NR Hay
k k
=
58
Ba trng hp
Trng hp 1: a > d(b)
Trong cng thc trn ta c a
k
> [d(b)]
k
, theo quy tc ly phc
tp ta c NR l O(a
k
) = O(n
log
b
a
) = NTN.
Do T(n) l O(n
log
b
a
).
Trng hp 2: a < d(b)
Trong cng thc trn ta c [d(b)]
k
> a
k
, theo quy tc ly phc
tp ta c NR l O([d(b)]
k
) = O(n
log
b
d(b)
) > NTN.
Do T(n) l O(n
log
b
d(b)
).
1 -
d(b)
a
[d(b)] - a
NR
k k
=
59
Ba trng hp (tt)
1 -
d(b)
a
[d(b)] - a
NR
k k
=
Trng hp 3: a = d(b)
Cng thc trn khng xc inh nn ta
phi tnh trc tip nghim ring:
d(b)) a (do k a 1 a
d(b)
a
[d(b)] NR
k
1 - k
0 j
k
1 - k
0 j
j
k

= = =
(

=
= =
Do n = b
k
nn k = log
b
n v a
k
= n
log
b
a
.
Vy NR l n
log
b
a
log
b
n > NTN.
Do T(n) l O(n
log
b
a
log
b
n).
60
V d: GPT vi T(1) = 1 v
Phng trnh cho c dng phng
trnh tng qut.
d(n)=n l hm nhn.
a = 4 v b = 2.
d(b) = b = 2 < a.
T(n) = O(n
log
b
a
) = O(n
log4
) = O(n
2
).
n
T(n) 4T n
2
| |
= +
|
\ .
61
V d: GPT vi T(1) = 1 v
2
n
T(n) 4T n
2
| |
= +
|
\ .
Phng trnh cho c dng phng
trnh tng qut.
d(n)=n
2
l hm nhn.
a = 4 v b = 2.
d(b) = b
2
= 4 = a.
T(n) = O(n
log
b
a
log
b
n)
= O(n
log4
logn) = O(n
2
logn).
62
V d: GPT vi T(1) = 1 v
3
n
T(n) 4T n
2
| |
= +
|
\ .
Phng trnh cho c dng phng
trnh tng qut.
d(n)=n
3
l hm nhn.
a = 4 v b = 2.
d(b) = b
3
= 8 > a.
T(n) = O(n
log
b
d(b)
) = O(n
log8
) = O(n
3
).
63
Nghim ca phng trnh quy tng
qut khi d(n) khng phi l hm nhn
Trong trng hp hm tin trin khng phi
l mt hm nhn th chng ta khng th p
dng cc cng thc ng vi ba trng hp
ni trn m chng ta phi tnh trc tip NR,
sau ly MAX(NR,NTN).
64
V d: GPT vi T(1) = 1 v
PT thuc dng phng trnh tng qut nhng d(n) =
nlogn khng phi l mt hm nhn.
NTN = n
log
b
a
= n
log2
= n
Do d(n) = nlogn khng phi l hm nhn nn ta phi
tnh nghim ring bng cch xt trc tip
nlogn
2
n
2T T(n) +
|
.
|

\
|
=
65
V d (tt)
Theo gii phng trnh quy tng qut th n = b
k
nn k
= log
b
n, y do b = 2 nn
2
k
= n v k = logn,
NR= O(nlog
2
n) > NTN
T(n) = O(nlog
2
n).
( )
j - k j - k
1 - k
0 j=
j
1 - k
0 j
j - k j
log2 2 2 b d a NR

= =
=
) k O(2
2
1) k(k
2 ) j - (k 2 NR
2 k k
1 - k
0 j
k
=
+
= =

=
66
Vd: GPT vi T(1) = 1 v 1
2
n
T T(n) +
|
.
|

\
|
=
Phng trnh cho c dng phng
trnh tng qut.
d(n)=1 l hm nhn.
a = 1 v b = 2.
d(b) = 1 = a.
T(n) = O(n
log
b
a
log
b
n) = O(n
log1
logn)
= O(logn).
67
Vd: GPT vi T(1) = 1 v
logn
2
n
2T T(n) +
|
.
|

\
|
=
Phng trnh cho c dng phng
trnh tng qut.
d(n)=logn khng phi l hm nhn.
NTN = O(n
log
b
a
)=O(n
log2
)=O(n).
Tnh trc tip nghim ring.
68
n
Vd: GTP voi T(1) 1 va T(n) 2T logn
2
| |
= = +
|
\ .


=

= =
1
0
1
0
2 log 2 ) (
k
j
j k j
k
j
j k j
b d a NR


=

=
= =
1
0
1
0
1
0
2 2 ) ( 2
k
j
j
k
j
j
k
j
j
j k j k NR
)
1 2
1 2
( ) 2 (
1
0

= =

=
k
k
j
j
k O k O NR
NTN n n n O k O NR
k
= > = = ) log ( ) 2 (
) log ( ) ( n n O n T =
69
Bi tp
Chng minh cc mnh cho
Xt thut ton tm phn t c gi tr x trong mt
mng A cho trc.
Vit m gi m t thut ton trn
m s thao tc c s trong thut ton trn
Xc nh phc tp thut ton
Xt thut ton tm phn t c gi tr x trong mt ma
trn A c kch thc mxn cho trc.
Vit m gi m t thut ton trn
m s thao tc c s trong thut ton trn
Xc nh phc tp thut ton
70
V d minh ha
Pht biu bi ton:
Cho trc mt mng X cha n s cho trc,
mng trung bnh tin t A ca mng X l mt
mng c n phn t c nh ngha nh sau:
A[i] = avg(X[1]..X[i])
Hy vit thut ton xc nh mng trung bnh tin
t A ca mng X cho trc.
71
Thut ton 1:
AlgorithmprefixAverages1(X)
Input: Mt mng n phn t s X
Output: mt mng n phn t A tha A[i] l trung
bnh cng ca cc phn t X[1],X[i].
For i 1 to n do
a 0
For j 1 to i do
a a + X[i]
A[i] a / i
Return array A
72
Phn tch thut ton 1
Vng for ngoi (bin i) c thc hin n ln: O(n)
Tng bin i: n ln
So snh i vi n: n+1 ln
Gn 0 vo a: n ln
Gn gi tr vo A[i]: n ln
Vi mi gi tr ca bin i, vng for trong (bin j) c
thc hin i ln tng cng n s c thc hin
1+2++n = n(n+1)/2 ln: O(n
2
)
Tng bin j: n(n+1)/2 ln
So snh j vi i: (n+1)(n+2)/2 ln
Cng a[j] vo a: n(n+1)/2 ln
73
Phn tch thut ton 1 (tt)
Cu lnh tr v: thc hin t l vi n ln
Return: n ln
Truy xut phn t mng: n ln
Tng cng: thi gian thc thi ca thut ton
T(n) = O(n) + O(n
2
) + O(n) = O(n
2
+ 2n) = O(n
2
)
74
Thut ton 2
Lu rng: t S[i] = Sum(X[1]..X[i])
A[i] = S[i] / i
Algorithm prefixAverages2(X)
Input: Mt mng n phn t s X
Output: mt mng n phn t A tha A[i] l trung bnh cng
ca cc phn t X[1],X[i].
s 0
For i 1 to n do
s s + X[i]
A[i] s / i
Return array A
75
Phn tch thut ton 2
Gn 0 vo s: thc hin 1 ln: O(1)
Vng lp (bin i) c thc hin n ln: O(n)
Tng bin i: n ln
So snh i vi n: n+1 ln
Cng X[i] vo s: n ln
Gn s / i vo A[i]: n ln
Tr v mng A: O(n)
Return: n ln
Truy xut mng: n ln
76
Phn tch thut ton 2
Thi gian thc thi thut ton:
T(n) = O(1) + O(n) + O(n) = O(2n+1) = O(n)
77
Bi tp
Ci t hai thut ton 1 v 2 bng ngn ng C/C++.
Kho st thi gian thc thi hai thut ton ln lt vi
cc gi tr n khc nhau
Thi gian thc thi ca hai thut ton vi cng mt
gi tr n (rt ln, >10000) c khc nhau hay khng?
Nu c gii thch v sao c. Nu khng gii thch v
sao khng.
V th th hin thi gian thc thi ca mi thut
ton ph thuc vo n.
1
Chng 2:
Phn tch cc thut ton sp xp v tm kim
Trnh Huy Hong
Khoa Cng ngh thng tin
i hc S phm TPHCM
2
Mc ch
p dng k php O ln phn tch nh gi cc
phng php sp xp:
Sp xp bng phng php chn (selection sort)
Sp xp bng phng php chn (insertion sort)
Sp xp bng phng php i ch (bubble sort)
Sp xp bng phng php Shell (Shell Sort)
Sp xp bng phng php trn (merge sort)
Sp xp bng phng php vun ng (heap sort)
Sp xp nhanh (quick sort)
Sp xp bng phng php th (bucket sort)
Sp xp bng phng php c s (radix sort)
3
Sp xp bng phng php chn
tng:
Tm phn t nh nht a v u dy hin ti
Tip tc thc hin phn cn li ca dy
Thut ton:
Algorithm selectSort(A)
Input: Mt mng n phn t s A
Output: Mng A c sp xp tng dn.
For i 1 to n-1 do
min i
For j i+1 to n do
if A[j] < A[min] then
min j
swap(A, i, min)
Return array A
4
Phn tch SX bng pp chn
Vng lp ngoi (bin i) c thi hnh n-1 ln: O(n)
Tng i: n-1 ln
Kim tra i: n ln
Gn i vo min: n-1 ln
i ch: ti a n-1 ln
Vi mi gi tr ca i, vng lp trong (bin j) c thi
hnh n-1-i ln tng cng (n-1) + (n-2) + + 1 =
(n-1)n/2 ln: O(n
2
)
So snh: (n-1)n/2 ln
Gn: ti a (n-1)n/2 ln
5
Phn tch SX bng pp chn (tt)
Thi gian thc thi:
T(n) = O(n) + O(n
2
) = O(n
2
+n) = O(n
2
)
6
Sp xp bng phng php chn
tng:
Chn tng phn t mt vo dy c sp xp n bc hin ti,
vo ng v tr ca n bo m sau khi chn dy vn c th t
Thut ton:
Algorithm insertSort(A)
Input: Mt mng n phn t s A
Output: Mng A c sp xp tng dn.
For i 2 to n do
temp A[i]
j i - 1
while temp <A[j] and j>0 do
A[j+1] A[j]
j j - 1
A[j+1] temp
Return array A
7
Phn tch thut ton SX bng pp chn
Vng lp for (bin i) c thc hin n-1 ln
Tng i: n-1 ln
So snh i vi n: n ln
Gn gi tr vo cc bin temp, j, A[j+1]: n ln
Vi mi gi tr i, thn vng lp while (bin j) ti
thiu c thc hin 0 ln v ti a c thc
hin i ln
T
min
(n) = n-1
T
max
(n) = 1++(n-1) = (n-1)n/2 = O(n
2
)
T
tb
(n) = T
max
(n)
8
Sp xp bng phng php i ch
tng:
So snh hai phn t nu ngc v tr th i ch vi nhau (thng
thng l hai phn t lin tip)
Thut ton:
AlgorithmbubleSort(A)
Input: Mt mng n phn t s A
Output: Mng A c sp xp tng dn.
For i 1 to n-1 do
For j n downto i+1 do
if A[j] < A[j-1] then
swap(A,j-1,j)
Return array A
9
Phn tch SX bng pp i ch
Vng lp for ngoi (bin i) c thi hnh n-1 ln
Tng i: n-1 ln
So snh i: n ln
Vi mi gi tr i, vng lp for trong (bin j) c
thi hnh (n-1-i) ln
Tng j: n(n-1)/2 ln
So snh j: n(n+1)/2 ln
Php so snh: n(n-1)/2 ln
Php i ch: ti a n(n-1)/2 ln
10
Phn tch SX bng pp i ch
Thi gian thc thi: T(n) = O(n) + O(n
2
) =
O(n
2
)
11
Bi tp
Ci t 3 thut ton sp xp selection sort,insertion sort,
v bubble sort bng ngn ng C/C++.
Kho st thi gian thc thi 3 thut ton ln lt vi cc
gi tr n khc nhau vi cng mt dy s
Thi gian thc thi ca 3 thut ton vi cng mt gi tr n
(rt ln, >10000) vi cng mt dy s c khc nhau hay
khng? Nu c gii thch v sao c. Nu khng gii thch
v sao khng.
V th th hin thi gian thc thi ca mi thut ton
ph thuc vo n.
12
Sp xp bng phng php Shell
tng:
L mt m rng ca insertion Sort cho php dch
chuyn cc phn t xa nhau.
AlgorithmShellSort(A)
Input: Mt mng n phn t s A
Output: Mng A c sp xp tng dn.
13
h 1
repeat
h 3 * h + 1
until h > n
repeat
h h div 3
for i h+1 to n do
v A[i]
j i
while a[j-h] > v and j>h do
a[j] a[j-h]
j j-h
A[j] v
until h=1
Return array A
14
Phng php Chia v Tr
Mt m hnh thit k thut ton c 3 bc:
Chia:
Nu kch thc d liu u vo nh hn mt ngng no
th gii trc tip.
Ngc li chia nh d liu u vo thnh hai hoc nhiu tp
d liu ri nhau.
qui:
Gii mt cch qui cc bi ton con ly cc li gii
Tr:
Kt hp cc li gii ca cc bi ton con thnh li gii ca
bi ton ban u.
15
Sp xp bng phng php trn
p dng m hnh chia tr thit k thut ton sp
xp bng phng php trn.
Chia:
Nu mng A rng hoc ch c mt phn t th tr v chnh A (
c th t).
Ngc li A c chia thnh 2 mng con A
1
v A
2
, mi mng
cha n/2 phn t
qui:
Sp xp mt cch qui hai mng con A
1
v A
2
Tr:
To mng A bng cch trn hai mng c sp xp A
1
v A
2
.
16
Sp xp bng phng php trn (2)
AlgorithmmergeSort(A, n)
Input: Mt mng n phn t s A
Output: Mng A c sp xp tng dn.
For i 0 to n/2 do
A
1
[i] = A[i]
For i n/2+1 to n-1 do
A
2
[i-n/2-1] = A[i]
mergeSort(A
1
,n/2)
mergeSort(A
2
, n-n/2-1)
merge(A
1
,A
2
,A)
Return array A
17
Cy sp xp trn
PP sp xp trn
c th biu din
bng mt cy
nh phn.
Chiu cao ca
cy: [log
2
n
]+1
A
A
1
A
2
1. Chia i d liu
2. Gii qui 2. Gii qui
3. Trn
18
Trn hai mng c th t
Algorithmmerge (A
1
,A
2
,A)
Input: Mng A
1
, A
2
c th t tng dn.
Output: Mng A c hnh thnh t A
1
, A
2
v c th t tng dn.
while not(A
1
.isEmpty and A
2
.isEmpty)
if A
1
[0]<=A
2
[0] then
A.insertLast(A
1
[0])
A
1
.removeFirst
else
A.insertLast(A
2
[0])
A
2
.removeFirst
while not(A
1
.isEmpty)
A.insertLast(A
1
[0])
A
1
.removeFirst
while not(A
2
.isEmpty)
A.insertLast(A
2
[0])
A
2
.removeFirst
19
Phn tch SX bng pp trn
Hm merge c phc tp O(n
1
+n
2
) vi n
1
, n
2
l
kch thc ca A
1
, A
2
.
Gi s mng A ban u c kch thc n=2
m
.
Ti mc th i trong cy sp xp trn:
2
i
nt
Mi nt cha bi ton vi mng c n/2
i
phn t.
Thi gian thc thi: 2
i
*O(n/2
i)
= O(n)
Cy c log
2
n mc (chiu cao ca cy)
phc tp O(logn*n)
20
Phn tch SX bng pp trn (2)
n
n/2 n/2
n/2 n/2 n/2 n/2
.
.
.
O(n)
Chiu cao
O(n)
O(n)
O(logn)
21
Phn tch SX bng pp trn (3)
Gi t(n) l thi gian thc thi ca merge-sort
, 1
( )
( / 2 ) ( / 2 )
b n
t n
t n t n cn
s

=

+ +
( (
(

22
Phn tch SX bng pp trn (4)
2 2 2
2 3 2 3 3
, 1
( )
2 ( / 2)
( ) 2 (2 ( / 2 ) / 2)) 2 ( / 2 ) 2
( ) 2 (2 ( / 2 ) / 2 )) 2 2 ( / 2 ) 3
...
( ) 2 ( / 2 )
Thay i=m:
( ) 2 ( / 2 ) (1) log ( log )
i i
m m
b n
t n
t n cn
t n t n cn cn t n cn
t n t n cn cn t n cn
t n t n icn
t n t n mcn nt c nn O n n
s

=

+

= + + = +
= + + = +
= +
= + = + =
Gi s n=2
m
:
23
Sp xp nhanh (Quick Sort)
Chia:
Nu mng A rng hoc ch c mt phn t th tr v chnh A (
c th t).
Ngc li chn mt phn t x bt k ca A, chia A thnh 3 mng:
L: cha cc phn t ca A nh hn x
E: cha cc phn t ca A bng x
G: cha cc phn t ca A ln hn x
qui:
Sp xp mt cch qui hai mng con L v G
Tr:
To mng A bng cch lin tip 3 mng L, E, G theo th t.
24
Cy sp xp nhanh
Cy nh phn
Chiu cao khng
xc nh c,
ph thuc vo x.
Trong trng
hp xu nht,
chiu cao ca
cy l n-1 (mng
sp xp)
E(=x)
L(<x) G(>x)
1. Chia d liu theo x
2. Gii qui 2. Gii qui
3. Ghp
25
Sp xp nhanh
AlgorithmquickSort(A, left, right)
Input: A: mng s, left v tr cc tri, right v tr cc phi
Output: Mng A c sp xp tng dn.
if r>l then
j left
k right + 1
repeat
repeat
j j+1
until a[j]>=a[left]
repeat
k k-1
until a[k]<=a[left]
if j<k then
swap(a[j], a[k])
until j>k
swap(a[left], a[k])
quickSort(A, left, k-1)
quickSort(a, k+1, right)
26
Phn tch SX nhanh
Trng hp xu nht
Dy cn sp xp c th t
Cy sp xp nhanh c chiu cao l O(n)
Mi ln gi qui gim mt phn t (x)
T(n) = n + (n-1) + + 1 = O(n
2
)
Trng hp tt nht
Mi ln chia, chia i c dy
Cy sp xp nhanh c chiu cao l O(logn)
T(n) = 2T(n/2)+cn = O(nlogn) (xem mergesort)
27
Phn tch SX nhanh (2)
im mu cht l chn phn t dng so
snh (x) chia mng.
Trng hp trung bnh
Mi phn t u c xc sut c chn l phn
t dng so snh l nh nhau v xc sut l
1/n
28
Phn tch SX nhanh (2)
1
1
1
1
1
1
( ) ( 1 ) ( ( 1 ) ( ) )
2
( ) ( 1 ) ( 1 )
N h a n 2 v e v o i n :
( ) ( 1 ) 2 ( 1 )
( 1 ) ( 1 ) ( 1 ) 2 ( 1 )
( ) ( 1 ) ( 1 ) ( 1 ) ( 1 ) 2 ( 1 )
( ) 2 ( 1 ) ( 1 )
C h i a 2
n
k
n
k
n
k
n
k
T n n T k T n k
n
T n n T k
n
n T n n n T k
n T n n n T k
n T n n T n n n n n T n
n T n n n T n
=
=
=

=
= + + +
= + +
= + +
= +
= + +
= + +

2
v e c h o n ( n + 1 ) :
( ) ( 1 ) 2
1 1
( ) ( 2 ) 2 2
1 1 1
. . .
( ) ( 0 ) 2
1 1 1
n
k
T n T n
n n n
T n T n
n n n n
T n T
n k
=

= +
+ +

= + +
+ +
= +
+ +

29
Phn tch SX nhanh (3)
1
1
( ) 1 1
2 2 2ln
1
ln ln 2 log 0.69log
2 ln 1.38 log
n
n
k
T n
dx n
n k x
n n n
n n n n
=
~ ~ =
+
= =
~

}
Trng hp tt nht tt hn 38% so vi
trng hp trung bnh
phc tp O(nlogn)
30
Sp xp vun ng
Mt s khi nim v cy
nh ngha cy
Cy nh phn
Cy nh phn c tnh cht vun ng
Biu din cy nh phn y bng mng
Cc thao tc trn cy nh phn c tnh cht vun
ng
Thm mt phn t
Xa mt phn t
Sp xp vun ng
31
Mt s khi nim v cy
Cy:
Rng
Mt nt
Mt nt v cc cy con
Cy nh phn
Cy c s nt cy con ti mi nt ti a l 2
Cy nh phn c tnh vun ng (heap binary tree)
Gi tr ti nt gc ln hn gi tr ti tt c cc nt
thuc 2 cy con ca n.
32
Biu din cy nh phn y bng mng
Xt phn t A[k]
C 2 con l A[2*k] v A[2*k+1]
V d:
A = (10, 3, 4, 2, 6, 7, 8)
10
2
4 3
6 7 8
33
Cc thao tc trn cy NP vun ng
Thm mt phn t vo cy
Xa phn t khi cy (phn t gc)
34
Thm mt phn t vo cy
tng:
Thm phn t mi vo cui ca mng tng ng
vi cy.
Phn t mi thm vo c th vi phm tnh cht heap
vi nt cha ca n. Do phi iu chnh v tr ca
phn t mi thm vo.
Tip tc iu chnh v tr phn t mi thm vo.
35
Thao tc upheap
Algorithm upheap(A, n, k)
Input:
A: mng tng ng vi cy heap c th b vi phm
n: s phn t ca mng
k: v tr phn t cn iu chnh (di ln trn)
Output:
Cy ng th t heap
v A[k]
A[0] maxint
while A[k / 2] <= v do
A[k] A[k / 2]
k k / 2
A[k] v
36
Thm mt phn t vo cy
Algorithm insert(A, n , v)
Input:
A: mng tng ng vi cy c n phn t
v: gi tr thm vo cy
Output:
cy mi thm vo phn t gi tr v
n n + 1
A[n] v
upheap(A, n, n)
37
Phn tch
upheap: S ln di chuyn nhiu nht tng
ng l chiu cao ca cy O(logn)
Thao tc thm mt phn t c phc tp l
O(logn).
38
Thao tc xa mt phn t khi cy
tng:
Lun lun ly phn t gc
Hon i phn t cui cng ca cy vi phn t gc.
Phn t gc mi c th vi phm tnh cht heap (nh
hn mt trong hai nt con) hon i v tr ca n.
Thc hin thao tc di ch phn t gc xung di
cho n khi n nm ng v tr
39
downheap
Algorithm downheap(A, n, k)
Input:
A: mng tng ng vi cy heap c th b vi phm
n: s phn t ca mng
k: v tr phn t cn iu chnh (di xung di)
Output:
Cy ng th t heap
v A[k]
while k <= n/2 do
j 2*k
if (j < n) then
if A[j] < A[j+1] then
j j + 1
if v >= A[j] then
break
A[k] A[j]
k j
A[k] v
40
Thao tc xa mt phn t khi cy
Algorithm remove(A, n)
Input:
A: mng c n phn t tng ng vi cy heap
Output:
Cy c n-1 phn t sau khi ly phn t gc ra
x: phn t gc b loi b
x A[1]
A[1] A[n]
n n 1
downheap(A, n, 1)
41
Phn tch
Downheap: di ch ti a tng ng vi
chiu cao ca cy
Thao tc xa mt phn t O(logn)
42
Heapsort
Algorithm heapsort(A, n)
Input:
A: mng c n phn t
Output:
Mng A c sp xp
m 0
for k 1 to n do
insert(A, m, A[k])
for k n downto 1 do
A[k] = remove(A, m)
43
Phn tch
phc tp O(nlogn)
44
Sp xp da trn s so snh
Cc phng php kho st u da trn
php so snh l php ton chnh.
chng minh l chn di trong trng hp
xu nht l O(nlogn) khng c phng php
sp xp no da trn s so snh c phc tp
nh hn O(nlogn) trong trng hp xu nht.
p dng trong trng hp tng qut.
Trong mt s trng hp c bit c th c
nhng phng php sp xp tt hn: O(n).
45
Sp xp th (Bucket Sort)
Xt dy A c n kha v min gi tr ca cc
phn t l [0, m-1].
tng:
S dng mt mng B gi l mng th (bucket
array). Mng th c m phn t.
S dng gi tr ca A chnh l ch s trong mng
B.
t cc phn t ca A vo B vi v tr tng ng
vi gi tr ca n.
46
Sp xp th (bucket sort) (tt)
AlgorithmbucketSort(A, n)
Input: Mt mng n phn t s A c min gi tr [0,m-1]
Output: Mng A c sp xp tng dn.
Gi B l mng c m phn t, ban u u trng ht
for i 1 to n do
insert(B[A[i]], A[i])
remove(A,i)
for i 0 to m-1
while (B[i] <> empty)
insert(A, i)
return array A
47
Sp xp th (Bucket Sort)
phc tp:
Vng for u tin: O(n)
Vng for th hai: O(m)
O(m+n)
Nu m t l vi n: m = cn th phc tp l
O(n + cn)= O(n) phc tp l tuyn tnh.
Lu : phc tp v khng gian O(m+n).
48
Tnh n nh trong sp xp
Th t sau khi sp xp ca cc phn t c
kha bng nhau khng thay i so vi th t
trc khi sp xp.
V d:
49
Radix Sort
M rng tng ca sp xp th.
Mi phn t khng phi l mt gi tr n l
m n c to thnh t nhiu thnh phn
khc nhau.
V d:
So snh Long, Loan: L = L, o = o, a < n Loan <
Long
So snh An, Be: A < B An < Be
50
Radix Sort
Mi phn t A
i
= <A
i1
, A
i2
, >
A
i
< A
j
tn ti k, vi mi t < k: A
i, t
=A
j, t
v
A
i,k
< A
j,k
.
Phm vi min gi tr ca tng thnh phn
thng thng kh nh c th p dng sp
xp th trn tng thnh phn ca kha.
51
Radix Sort
AlgorithmradixSort(A, n)
Input: Mt mng n phn t A c d thnh
phn, mi thnh phn c min gi tr [0,m-1]
Output: Mng A c sp xp tng dn.
for i d downto 1 do
bucketSort(A[i], n)
return array A
52
Cc thut ton tm kim
ngha v ng dng ca cc phng php
tm kim
Cc phng php tm kim
Tm kim tun t
Tm kim nh phn
Cy nh phn tm kim
Bng bm
nh gi cc phng php tm kim
53
ngha v ng dng
Vn : cho trc ni dung cn tm, xc nh phn
t c ni dung tng ng.
Ni dung = kha: thng l mt s c trng cho
mi phn t.
ng dng:
Hu ht cc bi ton gii quyt trn my tnh lin quan n
vn qun l: qun l thng tin, qun l tri thc,
Trong cc bi ton qun l, thao tc tm kim l mt thao
tc quan trng, c s dng rt nhiu ln.
54
Tng quan v cc cch tip cn tm
kim
C 3 cch:
Khng c bc tin x l hoc qui nh lin quan n
vic lu tr d liu trc khi tm kim: tm kim tun
t
Qui nh d liu phi c lu theo mt dng nh
trc no nhm phc v cho vic tm kim c
nhanh chng v chnh xc: tm kim nh phn, cy nh
phn tm kim.
Bin i d liu cn tm kim thnh mt dng d tm
kim hn: bng bm.
55
Tm kim tun t
Trng hp s dng:
D liu c lu mt cch t nhin, khng c x l
c bit hoc khng c t chc mt nh dng
cho trc.
Lu trn file truy xut tun t.
tng:
Xt ln lt cc phn t ang c lu
Vi mi phn t, so snh kha ca n vi kha cn
tm.
Nu bng nhau th bo kt qu
56
Tm kim tun t: Thut ton
AlgorithmTKTuanTu(A, k)
Input: Mt mng n phn t s A, k l kha cn
tm
Output: v tr kha k trong A. Nu khng c tr
v -1
For i 1 to n do
if (A[i] = k) then
return i
Return -1
57
Tm kim tun t: Phn tch
Trng hp xu nht:
Khng c kha cn tm trong dy A
phc tp: O(n)
Trng hp trung bnh:
Kh nng phn t cn tm xut hin trong dy A l n/2
phc tp: O(n/2) = O(n)
Khi dy A kch thc ln thi gian tm kim
ln
58
Tm kim tun t: V d 1
A={4, 5, 3, 7, 8, 12, 34, 13}; k=7
4 5 3 7 8 12 34 13
59
Tm kim tun t: V d 1
A={4, 5, 3, 7, 8, 12, 34, 13}; k=7
4 5 3 7 8 12 34 13
60
Tm kim tun t: V d 1
A={4, 5, 3, 7, 8, 12, 34, 13}; k=7
4 5 3 7 8 12 34 13
61
Tm kim tun t: V d 1
A={4, 5, 3, 7, 8, 12, 34, 13}; k=7
4 5 3 7 8 12 34 13
62
Tm kim tun t: V d 1
A={4, 5, 3, 7, 8, 12, 34, 13}; k=7
4 5 3 7 8 12 34 13
Tr v v tr th 3
63
Tm kim tun t: V d 2
A={4, 5, 3, 7, 8, 12, 34, 13}; k=9
4 5 3 7 8 12 34 13
64
Tm kim tun t: V d 2
A={4, 5, 3, 7, 8, 12, 34, 13}; k=9
4 5 3 7 8 12 34 13
65
Tm kim tun t: V d 2
A={4, 5, 3, 7, 8, 12, 34, 13}; k=9
4 5 3 7 8 12 34 13
66
Tm kim tun t: V d 2
A={4, 5, 3, 7, 8, 12, 34, 13}; k=9
4 5 3 7 8 12 34 13
67
Tm kim tun t: V d 2
A={4, 5, 3, 7, 8, 12, 34, 13}; k=9
4 5 3 7 8 12 34 13
68
Tm kim tun t: V d 2
A={4, 5, 3, 7, 8, 12, 34, 13}; k=9
4 5 3 7 8 12 34 13
69
Tm kim tun t: V d 2
A={4, 5, 3, 7, 8, 12, 34, 13}; k=9
4 5 3 7 8 12 34 13
70
Tm kim tun t: V d 2
A={4, 5, 3, 7, 8, 12, 34, 13}; k=9
4 5 3 7 8 12 34 13
71
Tm kim tun t: V d 2
A={4, 5, 3, 7, 8, 12, 34, 13}; k=9
4 5 3 7 8 12 34 13
72
Tm kim tun t: V d 2
A={4, 5, 3, 7, 8, 12, 34, 13}; k=9
4 5 3 7 8 12 34 13
Khng tm thy
Tr v v tr -1
73
Tm kim nh phn
Trng hp s dng:
D liu c sp xp theo kha
H tr truy xut ngu nhin
tng:
Da trn tnh th t ca cc kha loi b cc
phn t chc chn s ln hn hoc nh hn
kha ang tm.
74
Tm kim nh phn: Thut ton
Algorithm TKNhiPhan(A, k)
Input: Mt mng n phn t s A, k l kha cn tm
Output: v tr kha k trong A. Nu khng c tr v -1
dau 1
cuoi n
while (dau <= cuoi)
giua = (dau+cuoi)/2;
if a[giua] > k then
cuoi = giua 1
else if a[giua] < k then
dau = giua + 1
else
return giua;
Return -1
75
Tm kim nh phn: nh gi
Gi T(n) thi gian thc
thi tm kim nh phn
trn dy c di n.
, 2
( )
( / 2) , 2
a n
T n
T n a n
<

=

+ >

Vi a l mt hng s
76
Tm kim nh phn: nh gi (tt)
Trong trng hp xu nht, ngha l kha cn tm
khng xut hin trong dy kha d liu.
2
2
3
log
2
( ) ( / 2)
( / 4) ( / 2 ) 2
( / 8) 2 ( / 2 ) 3
...
( / 2 ) log
(log )
n
T n T n a
T n a a T n a
T n a a T n a
T n n a
O n
(
(
= +
= + + = +
= + + = +
=
= +
(
(
=
77
Tm kim nh phn: V d 3
A={3, 4, 5, 7, 8, 12, 13, 34}; k=12
3 4 5 7 8 12 13 34
78
Tm kim nh phn: V d 3
A={3, 4, 5, 7, 8, 12, 13, 34}; k=12
3 4 5 7 8 12 13 34
dau cuoi giua
79
Tm kim nh phn: V d 3
A={3, 4, 5, 7, 8, 12, 13, 34}; k=12
3 4 5 7 8 12 13 34
dau cuoi giua
Tr v v tr th 5
80
Tm kim nh phn: V d 4
A={3, 4, 5, 7, 8, 12, 13, 34}; k=9
3 4 5 7 8 12 13 34
81
Tm kim nh phn: V d 3
A={3, 4, 5, 7, 8, 12, 13, 34}; k=9
3 4 5 7 8 12 13 34
dau cuoi giua
82
Tm kim nh phn: V d 3
A={3, 4, 5, 7, 8, 12, 13, 34}; k=9
3 4 5 7 8 12 13 34
dau cuoi giua
Tr v v tr th 5
83
Tm kim nh phn: V d 3
A={3, 4, 5, 7, 8, 12, 13, 34}; k=9
3 4 5 7 8 12 13 34
dau cuoi
giua
84
Tm kim nh phn: V d 3
A={3, 4, 5, 7, 8, 12, 13, 34}; k=9
3 4 5 7 8 12 13 34
dau cuoi
Khng tm thy tr v v tr -1
85
Cy nh phn tm kim
Mt s khi nim v cy:
nh ngha cy:
Mt nt l mt cy. Nt ny gi l gc ca cy tng ng.
Mt cy c to thnh bi mt nt gc v cc cy con (c
th rng). Quan h cha con c th hin bi ng ni nh
hng.
nh ngha mc:
Gc c mc l 0
Cha c mc l i th mc cc nt con l i+1
Chiu cao cy = s mc cao nht ca cc mc ca
cc nt trong cy + 1.
86
Cy nh phn tm kim (tt)
nh ngha cy nh phn:
L cy trong s cy con ca mi nt u nh hn
bng 2.
nh ngha cy nh phn tm kim
Nt cha gi tr kha
Mi nt thuc cy con tri u c gi tr kha nh
hn gi tr kha ca nt gc.
Mi nt thuc cy con phi u c gi tr kha ln
hn (hoc bng) gi tr kha ca nt gc.
87
Minh ha cy nh phn tm kim
88
Cc thao tc c s trn cy NPTK
Tm kim mt phn t trong cy NPTK
Thm mt phn t vo cy NPTK
Xa mt phn t khi cy NPTK
Tm phn t ln nht trong cy NPTK
Tm phn t nh nht trong cy NPTK
89
Tm kim trong cy NPTK
tng:
So snh gi tr kha cn tm vi gi tr lu trong
nt gc ca cy.
Nu bng th tr v nt hin ti
Nu nh hn th tm kim trn cy con bn tri
Nu ln hn th tm kim trn cy con bn phi
Nu cy rng th khng c gi tr cn tm trong
cy.
90
Thut ton tm kim trong cy NPTK
Algorithm TK_NPTK(x, k)
Input: Cy NPTK c trng bi nt gc x; k l kha cn tm
Output: Nt cha gi tr kha cn tm. Nu khng c tr v NIL
if x=NIL or k=x->key then
return x
else
if k < x->key then
return TK_NPTK(x->left, k)
else
return TK_NPTK(x->right, k)
91
Thut ton tm kim trong cy NPTK:
nh gi
Trng hp xu nht:
phc tp thut ton t l vi ng i di nht
trong cy = chiu cao ca cy
T(n) = O(h)
Trng hp trung bnh:
T(n) = O(logn)
92
Chng minh
Trng hp tm kim thnh cng
Gi S(n) l thi gian trung bnh tm kim thnh
cng
Gi I(n) l tng cc mc ca cc nt trong cy c
n nt
n
p
l s nt trong cy con phi.
n
t
l s nt trong cy con tri. n
t
= n n
p
- 1
I(n) = I(n
t
) + I(n
p
) + n-1 (do co n-1 nt con)
93
1
0
1
0
1
0
1
( ) ( ( ) ( 1) 1)
( ) ( ( ) ( 1) 1)
( ) 2 ( ) ( 1)
( ) ( 1) ( 1) 2 ( 1) ( 1) ( 1)( 2)
( ) ( 1) ( 1) 2
n
tb tb tb
i
n
tb tb tb
i
n
tb tb
i
tb tb tb
tb tb
I n I i I n i n
n
nI n I i I n i n
nI n I i n n
nI n n I n I n n n n n
nI n n I n I

=
| |
= + +
|
\ .
| |
= + +
|
\ .
| |
= +
|
\ .
= +
=

( 1) 2 2
( ) ( 1) ( 1) 2( 1)
Chia 2 ve cho n(n+1)
( ) ( 1) 2( 1)
1 ( 1)
tb
tb tb
tb tb
n n
nI n n I n n
I n I n n
n n n n
+
= + +

= +
+ +
94
1
1
( 1 ) ( 2 ) 2 ( 2 )
T h a y
1 ( 1 )
( ) ( 2 ) 2 ( 2 ) 2 ( 1 )
1 1 ( 1 ) ( 1 )
. . .
( ) (1 ) 1
2
1 2 ( 1 )
( ) 1
( ) ( l g )
1
( ) ( l g )
( )
( ) ( l g )
t b t b
t b t b
n
t b t b
i
n
t b
i
t b
t b
I n I n n
n n n n
I n I n n n
n n n n n n
I n I i
n i i
I n
O O n
n i
I n O n n
I n
S n O n
n
=
=

= +


= + +
+ +

= +
+ +
= =
+
=
= =

95
Chng minh
Trng hp tm kim khng thnh cng
Gi U(n) l thi gian trung bnh tm kim khng
thnh cng
Gi E(n) l tng cc mc ca cc nt trong cy
c n nt v 2n nt rng
E(n) = I(n) + 2n
U(n) = O(lgn)

You might also like