25
Hàng đợi ưu tiên (priority queue) Đọc chương 6 Giảng viên: Nguyễn Mạnh Hiển Khoa Công nghệ thông tin Trường Đại học Thủy Lợi Email: [email protected] Học kỳ 2, năm học 2014-2015

CTDL-13--Hàng đợi ưu tiên.pdf

  • Upload
    hoang

  • View
    257

  • Download
    4

Embed Size (px)

Citation preview

  • 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