ctdl-13--hàng đợi ưu tiên.pdf
TRANSCRIPT
-
Hng i u tin (priority queue) c chng 6
Ging vin: Nguyn Mnh Hin Khoa Cng ngh thng tin Trng i hc Thy Li Email: [email protected]
Hc k 2, nm hc 2014-2015
-
Hng i u tin (priority queue)
Xa phn t nh nht (deleteMin)
Thi gian O(log N)
Chn (insert)
Thi gian O(log N)
-
Ci t hng i u tin Danh sch lin kt
insert mt O(1)
deleteMin mt O(N)
Cy nh phn tm kim
insert v deleteMin mt O(log N)
Tuy nhin, c tnh cht khng cn thit: tt c cc phn t c sp xp
Ta ch cn phn t nh nht
ng (heap)
S ci t ph bin ca hng i u tin
insert v deleteMin mt thi gian O(log N)
-
Cy c th t mt phn Cy c th t mt phn (partially ordered tree
- POT) l cy T tha mn:
C quan h th t xc nh trn cc nt ca T
i vi mi nt P v con C ca n: P C
Suy ra:
Phn t nh nht trong POT l gc
Khng c kt lun no v th t ca cc nt con
-
ng nh phn (binary heap) ng nh phn l mt cy nh phn y c th t
mt phn
Cy c lp y trn tt c cc mc (level) tr mc di cng
Khi cp n ng, ta hiu rng l ng nh phn
0
3 2
4 5
gc
-
Biu din vector ca cy nh phn y
Lu tr cc phn t trong vector theo mc
Cha ca v[k] = v[k/2]
Con tri ca v[k] = v[2*k]
Con phi ca v[k] = v[2*k + 1]
R
l r
ll lr rr rl
gc
rr rl lr ll r l R
7 6 5 4 3 2 1
-
V d v ng (heap) Cha ca v[k] = v[k/2]
Con tri ca v[k] = v[2*k]
Con phi ca v[k] = v[2*k + 1]
-
Cy no l ng?
-
Ci t hng i u tin (ng)
-
V d chn: insert(14)
14
14
14
-
Thao tc ng c bn: insert(x) Gi tnh cht cy nh phn y v sa vn cy c th t
mt phn (partially ordered tree - POT)
To nt l (l trng - hole) ng vi x tn cng
Lp li:
Xc nh nt cha ca l trng
Nu POT khng tha mn:
+ Hon i l trng vi nt cha
Ngc li:
+ Dng
t x vo l trng
-
Ci t insert
-
V d v deleteMin 31
13 14 16 19 21 19 68 65 26 32 31
-
V d v deleteMin (tip)
31
31
31
-
Thao tc ng c bn: deleteMin()
Xa nt l cui cng (ang cha gi tr x); xa gi tr ca nt gc l trng; gn x cho (nhng cha t vo) l trng
iu ny m bo tnh cht cy nh phn y nhng c th vi phm tnh cht cy c th t mt phn (POT)
Lp li:
Xc nh nt con nh hn ca l trng
Nu POT khng tha mn:
Hon i l trng v nt con nh hn
Ngc li:
Dng
t x vo l trng
-
Ci t deleteMin()
-
Ci t deleteMin() (tip)
-
Hm to (constructor) Xy dng ng t mt tp cc phn t c th t
ty
Cc bc:
Chn tt c cc phn t vo cy m khng quan
tm tnh cht cy c th t mt phn (POT)
iu chnh cy tha mn POT, i t di ln
Thi gian chy l O(N) (s phn tch sau)
-
Ci t hm to
-
V d
percolateDown(7)
percolateDown(6) percolateDown(5)
-
percolateDown(1)
percolateDown(4) percolateDown(3)
percolateDown(2)
V d (tip)
-
Phn tch thi gian chy ca buildHeap()
Thi gian chy tng chiu cao ca tt c cc nt
S chng minh tng ny = O(N)
Xt cy nh phn hon ho c chiu cao h:
S nt: N = 2h+1 1
S chng minh tng chiu cao cc nt:
S = 2h+1 1 (h + 1) ( = O(N) )
-
Phn tch buildHeap() (tip)
Nhn hai v vi 2:
Ly ng thc th hai tr ng thc th nht tng v:
-
Hng i u tin trong th vin C++
Lp: priority_queue
Tp tiu : queue
Thc hin theo kiu ng cc i (max-heap) thay v ng cc tiu (min-heap) nh ta ang xt
Cc phng thc chnh:
- V d lp trnh #include #include using namespace std; int main() { priority_queue pq; pq.push(4); pq.push(3); pq.push(5); cout