Title: ????? ??????? - Heap
1????? ??????? - Heap
- ?????
- ???? ?????? ???????? ???? ??????? ?????
- Make_heap ????? ????? ?- n ?????? ?????.
- Insert(x) ????? ???? x ??????.
- Find_min ????? ????????.
- Del_min ????? ???????? ???????.
- 2. ???????
- ??? ????????, ???? ????? (heap sort)...
- 3. ???????
- ?. ?? ????? ????? ?? ????? ???????? ???????
??????/?????. - ?. ?? ???? ??? ????? ?"? ????
- ????? ?"? ??
2- ?. ????? ????? ??? ????? ?????
- Make_heap ???? ??? ?? ?? n ???????
O(nlogn) - Insert(x) ???? ?? x ???, ?? ???? ???? ??
????????. O(logn) - Find_min ???? ?? ???? ?????? ?"? ??????
????????. O(1) - Del_min ???? ?? ???????? ???? ???? ???????
???. O(logn) - ????? ????? ??? ???? ??? ???? ?? ????????
Make_heap ?- O(n).
3?? ???? ??? ?? ??? ?? ?????? ?? ??? ???? ?????
????? ??? ????, ??? ????? ??? ????? ???. ?? ????
??? ?? ??? ??? ????? (????) ?????
???????. ????? ?? ?????? ????? ?????
??????? ????. ???? ??????? ??? ????????.
4- ?????? ?? ?? ???? ???
- ?? ???? ?????? ??? ??? n, ?????? ?? ??? ??? h,
?????? -
- ???? .
- ???? ????? ??? ???? , ????? ??????
???????? . - ?????? ????? ???? 1.
- ???? ???? i ?????? ??? ?????? ??? 2i ????
????? 2i1. ??? ???? ??? ?? ????? ??"? ?? ??
?????? ????. - ???? ???? i ??????? ?? ???? ??? .
- ???? ?????? ??? ??? ?????? n. ???? ??? ??????
???? ?? ??????? n1. - ???? i ??? ??? ??"? 2i gt n.
5?. ????? ????? ??? ???? ??? ?????
????? ??? ?????? ????? ??????
(???????) ?? ?? ???? ?????. ?????? ?????
????? (?? ???? ??? ?? ???? ??????? ??????). -
???????? ?? ?????? ????? ????????? ?? ??????
?????. - ???? ????? ??? ??? ????? ?- O(1). -
???? ???? ?????? ?????? ?????? ???? ???? ????
?????. - ????? ?? ?? ???? ??????? ??? ??????
(???? ??????? ?????). Make_heap ????? ?? n
??????? ?????. ????? ?? ?? ?????? ????????
??????? ?? ????? (????? ???????? ?? ?-
0) ????? Sift_Down ??? ????. Insert(x) ????
??? ????? ????? ????? ?????? ?? ?????, ????? ???
?? ???? Sift_Up ????? ?????? ??? ?????? ???? ??
?????. Del_min ????? ?? ?????? ??? ????? ????
??????. ???? ?? ???? ????? Sift_Down ???
??????. Find_min ?? ?????? ?? ???? ?? ?????
(?????? 0).
0 2 3 4 6 12 10 17 5 8
O(n)
logn
logn
O(1)
6Make heap
7Insert
8Del_min
9?. ????? ????? ??? ???? ??? ?????
????? ??? ?????? ?? ??????
????? ?? ????? ???? ?????? ???. - ????? ?????
????? ?????? ?- O(logn). ??? ???????? ??????
??????? ??????? ?"? ????? Make_heap ????? ??
?????? ???????? ???? postorder (??? ????? ??????
???? ??????). Insert(x) ????? ????? ??????
????? ?"? ?????? ???? ?????? ?- O(logn) ????
???? ?? ????? ???? ???? ???? ?????, ??? ?? ????
?????. Del_min ????? ?? ?????? ??? ????? ????
?????? ??????? ??????.
10???? ???? ?? ???? ??? ?????? ?"? ?? ??????. ???
?????? ???? ??? ??? ?????? i ? ????? ?????
?? ?????? ??????? ?? ??????? ???? ?????? i. ????
91001. ???? ?????? ????? ??? ????? ???
??? ??? ?????? ??????? ??? ????? ???? ???? 0 ???
?????, ???? 1 ??? ?????.
11??????
?? ???? ??? (????? ?? ??) ?? ????? ?????
O(n) O(nlogn) Make_heap
O(logn) O(logn) Insert(x)
O(1) O(1) Find_min
O(logn) O(logn) Del_min
12- ????? 1
- ????? ????? ?????? ?? ?????? ?????? ????? ?? ???
??????. ?? ???? ?? ??????? ????? - init ????? ???? ??????? ?- O(m), m ????
??????? ??????. - insert(x) ???? ?? x ????? ?- O(logn), n ????
??????? ?????. - find_mid ???? ?? ??? ?????? ?- O(1).
- del_mid ???? ?? ?????? ?????? ?- O(logn).
- ????? ????? ??????? ????? ??????? ??
??????? ??????? ?? ??????? ?????? - L S
13????? ????? ??????? ????? ??????? ??
??????? ??????? ?? ???????
?????? lL sS Init
??? ?????? ???? ??? ???? ?- O(m) ?? ??????? ????
?????? ????? ???????/????? ???????.
???? ??? ???? make_heap ??? ?????.
O(m)2O(m/2)O(m). ?find_mid - ???? ?? ??? ?????
?????? ?????? L, O(1). insert(x) ?? x ???
???????, ????? ???? ?- S, ???? ?- L. ????? ??
???? ??????. ?? SL1 ????? ??
????? ?? S ?- L. ?? SL -2
????? ?? ????? ?? L ?- S. ?del_mid ???? ??
????? ?? L. ?? SL1 ????? ?? ????? ?? S ?-
L. ??? ??????? ???????? ????? ?????
.
14- ????? 2
- ??? ???? ?????? ?????? ????? ??????? ?????
????????? ?????? - init ????? ???? ??????? O(n).
- insert(x) ???? ?? x ????? O(logn).
- find_min ???? ?? ???????? O(1).
- find_max ???? ?? ???????? O(1).
- del_min ???? ?? ???????? ?????? O(logn).
- del_max ???? ?? ???????? ?????? O(logn).
- ?????
- ????? ?? ??????? ???? ????? ?? ????? ?????
??????? ?????? ???????. ??? ?? ??? ??????
"??????" ???? ??????? ???? ??????? ??????.
15- del_min
- ???? ?? ????? ?? ????? ???????? ??? ????? ?"????"
?????? ????????. - ?????
- ????? ????? ?? ???? ????? ??? ??? ??? ??????
?????. - ???? ?????? ??? ???????
- ??????? ???? ???? ???? ??????
- ?????? ?? ???? ??????
- ?????? Sift_Up ?????? ?????? ?? ????? ?????.
168
????? 2 ????? ??? ????? ?? ??????? ??????
???????. ??? ???? ???? ??? ???? max, ?????? ??
???? ???????? ??? ??? ?? ????? (???? ?????
????). init ??? Make_Heap ???"? ????
Postorder ?????? ???? ?- max. O(n). insert(x)
???? ?? x ?????? ????? ?? ???? max ?????? ?????
?? ?????. O(logn). find_min ???? ?? ??? ?????.
O(1). find_max ???? ?? ??? max ?? ?????.
O(1). del_min ???? ?? ?????. ???? ?? ???? max
????? 2 ??????? ?????? ?????
?????? (?? ?????) ?? ?????,
??????? ?? ?- Sift_Down ?????? ????.
O(logn). del_max ???? ?? ????
???????? ?? ?????? ??? ?? ??? ??? ???????? ??
????? ????. ??? ???? ???? ??
?"? ?????? ?? ???? ??????, ?- Sift_Up. ?????
???? ?- max ????? 2 ???????.
O(logn).
1
8
6
5
3
8
4
6
8
4
6