Hang Doi Uu Tien
Transcript of Hang Doi Uu Tien
-
8/3/2019 Hang Doi Uu Tien
1/27
CHNG 10
HNG U TIN
Trong cc chng trc chng ta nghin cu KDLTT t in. T
in l mt tp i tng d liu, mi i tng c gn vi mt gi tr
kha, v cc php ton tm kim, xen, loi trn t in c tin hnh khi
c cung cp mt gi tr kha. Trong chng ny chng ta s a ra
KDLTT hng u tin. Hng u tin khc vi t in ch, thay cho gi tr
kha, mi i tng d liu trong hng u tin c gn vi mt gi tr u
tin, v chng ta ch quan tm ti vic tm kim v loi b i tng c gitr u tin nh nht. Ni dung chnh ca chng ny l:
c t KDLTT hng u tin.
Trnh by phng php ci t hng u tin bi cy th t b
phn (heap).
a ra mt ng dng ca hng u tin trong nn d liu v xy
dng m Huffman.
10.1 KIU D LIU TRU TNG HNG U TIN
Gi s chng ta cn bo lu mt c s d liu gm cc bn ghi v cc
bnh nhn n khm v cha bnh ti mt bnh vin. Cc bnh nhn khi n
bnh vin s c a vo c s d liu ny. Nhng cc bc s khm cho
bnh nhn s khng phc v ngi bnh theo th t ai n trc s c
khm trc (nh cch t chc d liu theo hng i). Mi bnh nhn sc cp mt gi tr u tin v cc bc s s gi vo phong khm bnh nhn
c gi tr u tin nh nht (ngi c u tin trc ht ti thi im ).
Nhiu hon cnh khc (chng hn, h my tnh phc v nhiu ngi s
dng) cng i hi chng ta cn phi t chc mt tp i tng d liu theo
13
-
8/3/2019 Hang Doi Uu Tien
2/27
gi tr u tin sao cho cc thao tc tm i tng v loi i tng c gi tr
u tin nh nht c thc hin hiu qu. iu dn n s hnh thnh
KDLTT hng u tin.
Hng u tin (priority queue) c xem l mt tp cc i tng dliu, mi i tng c mt gi tr u tin. Thng thng cc gi tr u tin
c th l cc s nguyn, cc s thc, cc k t; iu quan trng l chng
ta c th so snh c cc gi tr u tin . Trn hng u tin chng ta chi
quan tm ti cc php ton sau y:
1. Insert (P,x). Xen vo hng u tin P i tng x.
2. FindMin(P). Hm tr v i tng trong P c gi tr u tin nh
nht (i tng c u tin nht). Php ton ny i hi Pkhng rng
3. DeleteMin(P). Loi b v tr v i tng c gi tr u tin nh
nht trong P. P cng cn phi khng rng.
Hng u tin c s dng trong cc hon cnh tng t nh hon
cnh nu trn, tc l khi ta cn qun l s phc v theo mc u tin.
Hng u tin cn c s dng thit k cc thut ton trong nhiu ng
dng. Cui chng ny chng ta s a ra mt ng dng: s dng hng u
tin thit k thut ton xy dng m Huffman.
Trong cc mc tip theo chng ta s cp ti cc phng php ci
t hng u tin.
10.2 CC PHNG PHP N GIN CI T HNG U TIN
Trong mc ny chng ta s tho lun cch s dng cc cu trc d
liu quen bit: danh sch, cy tm kim nh phn ci t hng u tin
v tho lun v hiu qu ca cc php ton hng u tin trong cc cch ci
t n gin .
10.2.1 Ci t hng u tin bi danh sch
14
-
8/3/2019 Hang Doi Uu Tien
3/27
Ci t hng u tin n gin nht l biu din hng u tin di dng
mt danh sch c sp hoc khng c sp theo gi tr u tin. ng
nhin l danh sch c th c lu trong mng hay DSLK.
Nu chung ta ci t hng u tin bi danh sch cc phn t c spxp theo th t u tin tng dn (hoc gim dn) th phn t c gi tr u
tin nh nht nm mt u danh sch, v do cc php ton FindMin v
DeleteMin ch cn thi gian O(1). Nhng thc hin php ton Insert
chng ta cn tm v tr thch hp trong danh sch t phn t mi sao cho
tnh cht c sp ca danh sch c bo tn. V vy php ton Insert i
hi thi gian O(n), trong n l di ca danh sch.
Nu chng ta ci t hng u tin bi danh sch cc phn t theo mtth t ty , th khi cn xen vo hng u tin mt phn t mi chng ta ch
cn a n vo ui danh sch, do php ton Insert ch cn thi gian
O(1). Song tm v loi phn t c gi tr u tin nh nht chng ta cn
phi duyt ton b danh sch, v v vy cc php ton FindMin v
DeleteMin cn thi gian O(n).
10.2.2 Ci t hng u tin bi cy tm kim nh phn
Trong mc 8.4.3 chng ta ci t KDLTT tp ng bi cy tmkim nh phn. Cn lu rng, c th xem hng u tin nh l mt dng c
bit ca tp ng khi m ta ly gi tr u tin ca mi phn t lm kha v
chi quan tm ti cc php ton Insert, FindMin, DeleteMin. V vy ng
nhin chng ta c th ci t hng u tin bi cy tm kim nh phn. T lp
BSTree (trong hnh 8.16), bng tha k bn c th a ra lp ci t hng u
tin. Hiu qu ca cc php ton hng u tin trong cch ci t ny c
tho lun trong mc 8.5. Trong trng hp tt nht thi gian thc hin ccphp ton hng u tin l O(log n), trng hp xu nht l O(n).
Trong mc sau y chng ta s a ra mt cch ci t mi: ci t
hng u tin bi cy th t b phn. Vi cch ci t ny, thi gian thc
hin ca cc php ton hng u tin lun lun l O(log n).
15
-
8/3/2019 Hang Doi Uu Tien
4/27
10.3 CY TH T B PHN
Trong mc 8.4 chng ta nghin cu CTDL cy tm kim nh phn.
Trong cy tm kim nh phn, cc kha ca d liu cha trong cc nh ca
cy cn phi tha mn tnh cht th t: kha ca mt nh bt k ln hn
kha ca cc nh trong cy con tri v nh hn kha ca cc nh trong
cy con phi. Trong cy th t b phn, ch i hi cc kha cha trong cc
nh tha mn tnh cht th t b phn: Kha ca mt nh bt k nh hn
hoc bng kha ca cc nh con ca n. Mc d vy, CTDL cy th t b
phn cho php ta thc hin hiu qu cc php ton hng u tin.
Cy th t b phn (partially ordered tree, hoc heap) l mt cy nh
phn hon ton v tha mn tnh cht th t b phn. V d, cy nh phn
trong hnh 10.1 l cy th t b phn.
Hnh 10.1 Cy th t b phn
16
2
2
15
4
13879
6
12
0
1
3 6
7
-
8/3/2019 Hang Doi Uu Tien
5/27
Chng ta cn lu n mt s c im ca cy th t b phn.
Trc ht, n cn phi l cy nh phn hon ton (xem nh ngha trong mc
8.3), tc l tt c cc mc ca cy u khng thiu nh no, tr mc thp
nht c lp y k t bn tri. Tnh cht ny cho php ta ci t cy th
t b phn bi mng. Mc khc, t tnh cht th t b phn ta rt ra c
im sau: Cc gi tr kha nm trn ng i t gc ti cc nt l to thnh
mt dy khng gim. Chng hn, dy cc gii tr kha t gc (nh 0) ti
nh 8 l 3, 6, 9, 15. iu c ngha l, d liu c kha nh nht c lu
trong gc ca cy th t b phn.
cao ca cy th t b phn. Gi s n l s nh ca cy nh phn
hon ton c cao h. D dng thy rng, 2h-1 < n 12 h v do 2h-1= 0);return data[0];
}
28
-
8/3/2019 Hang Doi Uu Tien
17/27
Hm n ShiftDown(int i) thc hin bc hai trong thut ton
DeleteMin(). Chng ta s dng bin parent ghi li ch s ca nh cha v
bin child ghi li ch s ca nh con c gi tr u tin nh hn gi tr u tin
ca nh con kia (nu c). Bin x lu li phn t cha trong nh i. Ban u
gi tr ca parent l i, mi khi gi tr u tin ca x ln hn gi tr u tin ca
nh child th phn t cha trong nh child c y ln nh parent v ta i
xung nh child. n khi gi tr u tin ca x nh hn hoc bng gi tr u
tin ca nh child hoc khi nh parent l nh l th phn t x c t vo
nh parent. Hm ShiftDown c ci t nh sau:
template void PriQueue :: ShiftDown(int i)
{Item x = data[i];int parent = i;int child = 2*parent+1; //nh con tri.
while (child
-
8/3/2019 Hang Doi Uu Tien
18/27
assert(last >= 0);data[0] = data[last--]; //chuyn phn t trong nh l ngoi cng
//bn phi mc thp nht ln gc.ShiftDown(0);
}
template PriQueue :: PriQueue(Item* element, int n){
int i;for (i = 0 ; i < n ; i++)
data[i] = element[i];last = n-1;for (i = n/2 - 1; i >= 0 ; i--)
ShiftDown(i);}
By gi chng ta s ci t hm Insert. Hm Insert c ci t theo
k thut tng t nh hm ShiftDown. Bin child ban u nhn gi tr l
last+1. Bin parent c tnh theo bin child, parent=(child-1)/2. Mi khi
gi tr u tin ca nh cha ln hn gi tr u tin ca i tng cn xen vo
th phn t trong nh cha c y xung nh con v ta i ln nh cha.
Khi t ti nh cha c gi tr u tin nh hn hay bng gi tr u tin cai tng cn xen vo th i tng c t vo nh con. Hm Insert c
ci t nh sau:
template void PriQueue:: Insert(const Item & object, bool & suc){
if(last = = SIZE-1)suc = false;
else {suc = true;int child = ++last;
while (child > 0){
int parent = (child-1)/2;if(data[parent].priority > object.priority)
30
-
8/3/2019 Hang Doi Uu Tien
19/27
{data[child] = data[parent];child = parent;
}else break;
}data[child] = object;
}}
10.5 NN D LIU V M HUFFMAN
Nn d liu (data compression) hay cn gi l nn file l k thut rt
ngn c ca file c lu tr trn a. Nn d liu khng ch nhm tng kh
nng lu tr ca a m cn tng hiu qu ca vic truyn d liu qua ccng truyn bi modem. Chng ta lun lun gi thit rng, file d liu
cha cc d liu c biu din nh l mt xu k t c to thnh t cc
k t trong bng k t ASCII. lu cc d liu di dng file, chng ta
cn phi m ho cc d liu di dng mt xu nh phn (xu bit), trong
mi k t c biu din bi mt dy bit no c gi l t m (code
word). Qu trnh s dng cc t m bin i xu bit tr v xu k t
ngun c gi l gii m.Trc ht ta ni ti cch m ho n gin: cc t m c i di bng
nhau. Bi v bng ASCII cha 128 k t, nn ch cn cc t m 8 bit l
biu din 128 k t. Cn ch rng, nu xu k t c to thnh t p k t
th mi t m cn t nht plog bit. V d, nu xu k t ngun ch
cha cc k t a,b,c,d,e v f th ch cn 3 bit cho mi t m, chng han
ta c th m a = 000, b = 001, c = 010, d = 011, e = 100, v f = 101.
Phng php m ho s dng cc t m c di bng nhau c u
im l vic gii m rt n gin, nhng khng tit kim c khng
gian trn a, chng hn trong v d trn, nu xu ngun c di n th
31
-
8/3/2019 Hang Doi Uu Tien
20/27
s bt cn thit l 3.n bt k s ln xut hin ca cc k t trong xu
nhiu hay t.
Chng ta c th gim s bt cn thit m xu k t ngun bng
cch s dng cc t m c di thay i, tc l cc k t c mho bi cc t m c di khc nhau. Chng ta s biu din k t c
tn xut xut hin cao bi t m ngn, cn k t c tn xut xut hin
thp vi cc t m di hn. Nhng khi m cc t m c di thay i,
gii m chng ta cn phi c cch xc nh bit bt u v bit kt thc
mt t m trong xu bit. Nu mt t m c th l on u (tin t) ca
mt t m khc th khng th gii m c duy nht. Chng hn, khi
xu ngun cha cc k t a, b, c, d, e v f v ta s dng cc t m: a =00, b = 111, c = 0011, d = 01, e = 0 v f = 1 (t m 00 l tin t ca t
m 0011, t m 0 l tin t ca t m 01, 00, 0011, t m 1 l tin t
ca t m 111); khi , xu bit 010001 c th gii m l cc t dad,
deed, efad, Do , m bo mt xu bit ch c th l m ca mt
xu ngun duy nht, chng ta c th s dng cc t m sao cho khng
c t m no l tin t ca mt t m khc.
Mt h t m m khng c t m no l tin t ca t m khc s
c gi l m tin t (prefix code). Ngi ta xy dng m tin t da
trn tn xut ca cc k t trong xu ngun. Phng php m ny cho
php rt bt ng k s bit cn thit. V d, chng ta li gi thit xu
ngun c to thnh t cc k t a, b, c, d, e v f, xu c di 10000
k t, trong k t a xut hin 3000 ln, b xut hin 1000 ln, c xut
hin 500 ln, d xut hin 500 ln, e xut hin 3000 ln v f xut hin2000 ln. Chng ta c th s dng m tin t nh sau, a = 00, b = 101,
c = 1000, d = 1001, e = 01 v f = 11, khi s bit cn thit l:
3000.2+1000.3+500.4+500.4+3000.2+2000.2 = 23000 bit
32
-
8/3/2019 Hang Doi Uu Tien
21/27
Trong khi , nu s dng cc t m cng di l 3 bit th s bit i
hi l 10000.3 = 30000 bit.
Nh vy, vn c t ra by gi l, lm th no t mt xu
k t ngun, ta xy dng c m tin t sao cho s bit cn thit trongxu m l t nht c th c. M tin t tho mn tnh cht c
gi l m tin t ti u. Di y chng ta s trnh by phng php
m c xut bi Huffman.
Chng ta s biu din m tin t di dng cy nh phn, ti mi
nh ca cy, nhnh bn tri c gn nhn l 0, nhnh bn phi c
gn nhn l 1, mi k t c lu trong mt nh l ca cy. Khi , t
m ca mi k t l xu bit to thnh t cc nhn trn ng i t gc
ti nh l cha k t . Chng hn, m tin t a ra trn (a=00,
b=101, c=1000, d=1001, e=01 v f=11) c biu din bi cy nh
phn trong hnh 10.6.
33
0
1
10
10
b
fea
c
0 1
0
1
d
-
8/3/2019 Hang Doi Uu Tien
22/27
Hnh 10.6. Cy nh phn biu din m tin t.
Chng ta c nhn xt rng, khi mt m c th biu din bi cy nh
phn nh m t trn th m s l m tin t, iu c suy ra t tnhcht cc k t ch c cha trong cc nh l ca cy. Mt khc, chng ta
c th gii m rt n gin nu chng ta biu din m tin t bi cy nh
phn. Thut ton gii m nh sau: c xu bit bt u t bit u tin, v bt
u t gc cy ta i theo nhnh tri nu bit c c l 0 v i theo nhnh
phi nu bit l 1. Tip tc c bit v i nh th cho ti khi gp mt nh l,
k t c lu trong nh l c vit ra xu kt qu. Li c k t tip
theo v li bt u t gc i xung, lp li qu trnh cho ti khi ton bxu bit c c qua.
Thut ton Huffman s dng hng u tin xy dng m tin t
di dng cy nh phn. Cy kt qu c gi l cy Huffman v m tin t
ng vi cy c gi l m Huffman. Trc ht xu k t ngun cn
c c qua tnh tn xut ca mi k t trong xu. Ta k hiu tn xut
ca k t c l f(c). Vi mi k t xut hin trong xu ngun, ta to ra mt
nh cha k t , nh ny c xem nh gc ca cy nh phn ch c mtnh. Chng ta k hiu tp nh l . Tp c ly lm u vo ca
thut ton Huffman. tng ca thut ton Huffman l t tp cc cy ch c
mt nh, ti mi bc ta kt hp hai cy thnh mt cy, v lp li cho n
khi nhn c mt cy nh phn kt qu. Ch rng, chng ta cn xy dng
c cy nh phn sao cho ng i t gc ti nh l cha k t c tn xut
cao cn phi ngn hn ng i t gc ti nh l cha k t c tn xut
thp hn. V vy, trong qu trnh xy dng, mi nh gc ca cy nh phnc gn vi mt gi tr u tin c tnh bng tng cc tn xut ca cc k
t cha trong cc nh l ca n, v ti mi bc ta cn chn hai cy nh
phn c mc u tin nh nht kt hp thnh mt. Do trong thut ton,
ta s s dng hng u tin P lu cc nh gc ca cc cy nh phn, gi tr
u tin ca nh v s c k hiu l f(v), nh con tri ca nh v c k
34
-
8/3/2019 Hang Doi Uu Tien
23/27
hiu l leftchild(v), nh con phi l rightchild(v). ban u hng u tin P
c to thnh t cc tp nh ni trn, ta gi s cha n nh.
Thut ton Huffman gm cc bc sau:
1. Khi to hng u tin P cha cc nh trong tp 2. Bc lp
For ( i = 1 ; i
-
8/3/2019 Hang Doi Uu Tien
24/27
(a)
(b)
(c)
(d)
36
5 7 10 23 30
f b d a c e
d a c e
f b
2 3 7 10 23 30
30231210
d
a c e
bf
302322
d
a
c e
bf
-
8/3/2019 Hang Doi Uu Tien
25/27
(e)
37
30 22
d
a
c
e
bf
-
8/3/2019 Hang Doi Uu Tien
26/27
(f)
Hnh 10.6. Qu trnh xy dng cy Huffman.
T cy Huffman trong hnh 10.6, ta thnh lp c cc t m nh sau:
e = 0, c = 11, a = 100, d = 1011, f = 10100, v b = 10101.
BI TP
1. Ta c th biu din hng u tin bi danh sch theo th t bt k hocbi danh sch c sp theo gi tr u tin tng dn (hoc gim dn).Hy ci t lp hng u tin bng cch tha k private t lp c sDlist (hoc Llist) trong cc trng hp sau:
38
d
a
c
e
bf
-
8/3/2019 Hang Doi Uu Tien
27/27
a. Hng u tin c biu din bi danh sch theo th t bt k.b. Hng u tin c biu din bi danh sch c sp theo gi tr
u tin gim dn (tng dn).
2. Gi s rng, cc i tng khc nhau ca hng u tin c th c cngmt gi tr u tin. Ly gi tr u tin lm kho, hy a ra cch biudin hng u tin di dng cy tm kim nh phn. Hy thit k vci t lp hng u tin khi hng u tin c biu din bi cy tmkim nh phn theo cch a ra.
3. Cho mt dy i tng vi cc gi tr u tin l 10, 12, 1, 14, 6, 5, 8,15 v 9.
a. T cy th t b phn rng, hy xen vo tng i tng theoth t lit k. V ra cy kt qu.
b. Hy s dng thut ton xy dng cy th t b phn cho dyi tng trn. So snh cy ny vi cy nhn c bng cchxen vo tng i tng cu a