merge sort heap sort priority queue implemented with binary heap · 2019-04-11 · heap sort...
TRANSCRIPT
![Page 1: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/1.jpg)
1
Merge sort
Heap Sort
Priority queue implemented with binary heap
ALG 08
A4B33ALG 2011/08
![Page 2: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/2.jpg)
2
A
B
D E J
MK
O R
T U Z
A
B
D E J
MK
O R
T U Z
A
B
D E J
MK
O R
T U Z
A
A B
Merge two sorted arrays Compared elements
Merge sortA4B33ALG 2011/08
![Page 3: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/3.jpg)
3
A
B
D E J
MK
O R
T U Z
A B D
A
B
D E J
MK
O R
T U Z
A B D E
A
B
D E J
MK
O R
T U Z
A B D E J
Merge sortA4B33ALG 2011/08
Merge two sorted arrays - cont.
![Page 4: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/4.jpg)
4
A
B
D E J
MK
O R
T U Z
A B D E J K
A
B
D E J
MK
O R
T U Z
A B D E J K M
A
B
D E J
MK
O R
T U Z
A B D E J K M O
Merge sortA4B33ALG 2011/08
Merge two sorted arrays - cont.
![Page 5: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/5.jpg)
5
A
B
D E J
MK
O R
T U Z
A B D E J K M O R
A
B
D E J
MK
O R
T U Z
A B D E J K M O R T U Z
Sorted
Copy the rest
Merge sortA4B33ALG 2011/08
Merge two sorted arrays - cont.
![Page 6: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/6.jpg)
6
Problem
Problem
Solutionní Solution
Problem Problem
Solution
Solve partial problem Solve partial problem
“their" work
Our work
Merge!Merge!
Divide!
A4B33ALG 2010/06
Divide and conquer! Divide et impera!
Divide!
![Page 7: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/7.jpg)
7
Processseparately
A B D E J K M O R T U Z
AB DE JK M ORTUZ
BK M TUZ A DE J OR
AB D E JMK O RT U Z
Divide!
Conquer! Merge!
Sort! Sort!
Merge sort
Unsorted
Sorted
Processseparately
A4B33ALG 2011/08
![Page 8: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/8.jpg)
8
… … … … … … … …
Sorted
BK M TUZ A DE J OR
AB D E JMK O RT U Z
Unsorted
Divide!
Divide!
Divide!
K UZ B M T AE J D OR
K U Z B M T A E J RODMerge!
Merge!
Merge sort
Merge!
A4B33ALG 2011/08
![Page 9: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/9.jpg)
9
def merge (inArr, outArr, low, high):half = (low+high) // 2i1 = lowi2 = half + 1j = low;# compare and mergewhile i1 <= half and i2 <= high:
if inArr[i1] <= inArr[i2]:outArr[j] = inArr[i1]; i1 += 1
else:outArr[j] = inArr[i2]; i2 += 1
j += 1# copy the restwhile i1 <= half:
outArr[j] = inArr[i1]; i1 += 1; j += 1while i2 <= high:
outArr[j] = inArr[i2]; i2 += 1; j += 1
Merge sortA4B33ALG 2011/08
![Page 10: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/10.jpg)
10
def _mergeSort (arr, auxArr, low, high):
if low >= high: return # too small!half = (low+high) // 2
# sort to auxArr_mergeSort(arr, auxArr, low, half) # left half_mergeSort(arr, auxArr, half+1, high) # right halfmerge(arr, auxArr, low, high)
# copy back from auxArrfor i in range(low, high+1):
arr[i] = auxArr[i]
Merge sortA4B33ALG 2011/08
![Page 11: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/11.jpg)
11
def _mergeSortX (arr, auxArr, low, high, depth):
if low >= high: return # too small!half = (low+high) // 2
_mergeSortX(arr, auxArr, low, half, depth+1)_mergeSortX(arr, auxArr, half+1, high, depth+1)
# note the swaping of arr and auxArrif depth%2 == 0: merge(auxArr, arr, low, high)else: merge(arr, auxArr, low, high)
def mergeSortX (arr):auxArr = arr[:] # auxArr = copy(arr)_mergeSortX(arr, auxArr, 0, len(arr)-1, 0)
Merge sort - improved use of auxArrA4B33ALG 2011/08
![Page 12: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/12.jpg)
12
Asymptotic complexity
log2(n) timesDivide! ........
Asymptotic complexity of Merge sort is (n·log2(n))
log2(n) timesMerge! ........
Divide! ........ (1) operationsMerge! ........ (n) operations
Total ...... (n)· (log2(n)) = (n·log2(n)) operations
Merge sortA4B33ALG 2011/08
![Page 13: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/13.jpg)
13
Stability
Divide! ........ Does not move the elements.
Merge! ….... “ if (in[i1] <= in[i2]) { out[j] = in[i1]; …”
When the two compared and merged elements are equal, merge the left one first.
Merge sort is stable.
Merge sortA4B33ALG 2011/08
![Page 14: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/14.jpg)
14
A
B D
EJM
KO R
T
UZ
a
cb a cab
Heap
Heapproperty.
Heap sortA4B33ALG 2011/08
![Page 15: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/15.jpg)
15
a
cb
a
Terminology
...... predecessor, parent of b c
b c ...... successor, child of, a
A
BD
...... (heap) top
Heap sortA4B33ALG 2011/08
![Page 16: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/16.jpg)
16
1 2 3 4 5 6 7 8 9 10 11 12 A B D EJM KO RT UZ
A
B D
EJM
KO R
T
UZ
5
109
1
6
2
7
3
8
4
1211
r
ts
k
2k 2k+1
r s t
Heap storedin an array
k 2k 2k+1
childrenchildrenchildrenchildren
Heap sortA4B33ALG 2011/08
![Page 17: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/17.jpg)
17
D
E
K
A
B D
EJM
KO R
T
UZ
B
JM
O R
T
Z
Top removed (1)
U
swap B ↔ U swap B ↔ U
Removetop
last first →
1
1
2
2
A
Put at the top
3
U > B, U > D, B < DU > B, U > D, B < D
Heap repairA4B33ALG 2011/08
![Page 18: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/18.jpg)
18
B
D
EJM
KO R
T
Z
U
swap J ↔ U swap J ↔ U
Top removed (2)
B
D
E
J
M
KO R
T
Z
U
swap K ↔ U swap K ↔ U
A A
Put at the top - cont...3
U > M, U > J, J < MU > M, U > J, J < M U > K, U > R, K < RU > K, U > R, K < R
A4B33ALG 2011/08
Heap repair
![Page 19: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/19.jpg)
19
B
D
E
J
M K
O R
T
Z U
Top removed (3)
New heapNew heap
A3 Put at the top - done.
3
A4B33ALG 2011/08
Heap repair
![Page 20: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/20.jpg)
20
Top removed II (1)
B
D
E
J
M K
O R
T
Z U
DJ
M K
O
R
T
Z U
E
R > J, R > D, D < JR > J, R > D, D < J
A1
swap D ↔ R swap D ↔ R
B ARemove
top
1
last first →2
Put atthe top
3
A4B33ALG 2011/08
Heap repair
![Page 21: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/21.jpg)
21
D
J
M K
O
R
T
Z U
E
swap E ↔ R swap E ↔ R
D
J
M K
O
RT
Z U
E
New heapNew heap
Top removed II (2) Top removed II (3)
B A
R < T, R > ER < T, R > E
B A
Put at the top - cont.3
Put at the top - done.
3
A4B33ALG 2011/08
Heap repair
![Page 22: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/22.jpg)
22
AB DEJ M KOR TU Z
Sorted
for (i = 0; i < n; i++) a[i] = “remove top”;Make a heap
Unsorted
BDEJKORUZ AMT
A
B D
EJM
KO R
T
UZ
M
O
R
TZ U
I
II III
IV
BDEJ AK
Heap sortA4B33ALG 2011/08
![Page 23: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/23.jpg)
23
A
B D
EJM
KO R
T
UZ
Is a heap is a heap and is a heap.
Recursive property of "Being a heap"A4B33ALG 2011/08
![Page 24: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/24.jpg)
24
A B
Z
heapheap
Not a heap (yet).
Z > A or Z > B
swap: Z ↔ min(A,B)
Z > A or Z > B
swap: Z ↔ min(A,B)
Make one bigger heap from two smaller onesA4B33ALG 2011/08
![Page 25: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/25.jpg)
25
BZ
heap
not a heapnot a heap
A
CFheap heap
A4B33ALG 2011/08
Make one bigger heap from two smaller ones
![Page 26: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/26.jpg)
26
A
B
D
E
J
M KO
R
T
U
Z
1Make a heap in ...2
3
4
5
6
3 2
45
6
1
Create a heap
… and the whole heapis complete.
... make a heap in ...
A4B33ALG 2011/08
... make a heap in ...
... make a heap in ...
... make a heap in ...
... make a heap in ...
![Page 27: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/27.jpg)
27
1 2 3 4 5 6 7 8 9 10 11 12 A B D EJM KO RT UZ
A
B D
EJM
KO R
T
UZ
5
109
1
6
2
7
3
8
4
1211
r
ts
k
2k 2k+1
r s tk 2k 2k+1
childrenchildrenchildrenchildren
Heap in an arrayA4B33ALG 2011/08
Heap storedin an array
![Page 28: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/28.jpg)
28
D
E
J
K
MO
R
T
UZB
A
21
3456789
101112
A
B
D
E
J
M
KO
R
T
UZ
5
109
1
6
2
7
3
8
4
1211
Not a heapArray
123456
12
34
56
A4B33ALG 2011/08
Array elements ordered randomlyHeap in an array
![Page 29: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/29.jpg)
29
DE
J
K
MO
R
T
UZB
A
21
3456789
101112
A
BD
E
J
M
KO
R
T
UZ
5
109
1
6
2
7
3
8
4
1211
Array
123456
12
34
56
A4B33ALG 2011/08
Currently created heapMoves
Heap in an array
![Page 30: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/30.jpg)
30
DE
J
K
MO
R
T
UZ
B
A
21
3456789
101112
A
B
DE
J
M
KO
R
T
UZ
5
109
1
6
2
7
3
8
4
11
Array
123456
12
34
56
A4B33ALG 2011/08
12
MovesEarlier heap(s) Heap in an array
Currently created heap
![Page 31: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/31.jpg)
31
DE
J
K
M
O
R
T
U
Z
B
A
21
3456789
101112
A
B
DE
J
M
KO
R
T
U
Z
5
109
1
6
2
7
3
8
4
1211
Array
123456
12
34
56
A4B33ALG 2011/08
Heap in an array
Currently created heapMovesEarlier heap(s)
![Page 32: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/32.jpg)
32
E
J
K
M
O
R
T
U
Z
B
A
21
3456789
101112
A
B
D
E
J
M
KO
R
T
U
Z
5
109
1
6
2
7
3
8
4
1211
Array
123456
12
34
56
A4B33ALG 2011/08
D
UT
D
Heap in an array
Currently created heapMovesEarlier heap(s)
![Page 33: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/33.jpg)
33
E
JK
M
O
R
T
U
Z
B
A21
3456789
101112
A
B
D
E
J
M
KO
R
T
U
Z
5
109
1
6
2
7
3
8
4
1211
Array
123456
12
34
56
A4B33ALG 2011/08
DJ
B
A
Heap in an array
Currently created heapMovesEarlier heap(s)
![Page 34: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/34.jpg)
34
E
J
K
M
O
R
T
U
Z
BA
21
3456789
101112
AB
D
E
JM
KO
R
T
U
Z
5
109
1
6
2
7
3
8
4
1211
Array
123456
12
34
56
A4B33ALG 2011/08
D
Moves
RAB
J
Heap in an array
Currently created heap
![Page 35: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/35.jpg)
35
A B D EJM KO RT UZ
Heap
AB D EJM KO RTU Z1 2 3 4 5 6 7 8 9 10 11 12
AB D EJ M K O RT UZ
A B D EJM KO RT UZ
Heap
Step1 1
Heap sortA4B33ALG 2011/08
![Page 36: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/36.jpg)
36
ABDEJ MK OR T UStep k
ABDEJM
K
OR T
ABDEJM OR T UZ
1 2 3 4 5 6 7 8 9 10 11 12
Heap k
Z U
Z
K
Heap sortA4B33ALG 2011/08
![Page 37: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/37.jpg)
37
# beware! array is arr[1] ... arr[n]
def heapSort (arr):n = len(arr)-1
# create a heapfor i in range(n//2, 0, -1): # progress backwards!
repairTop(arr, i, n)
for i in range(n, 1, -1): # progress backwards!swap(arr, 1, i)repairTop(arr, 1, i-1)
Heap sortA4B33ALG 2011/08
![Page 38: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/38.jpg)
38
def repairTop (arr, top, bottom):i = top # arr[2*i] and arr[2*i+1]j = i*2 # are successors of arr[i]topVal = arr[top]
# try to find a successor < topValif j < bottom and arr[j] > arr[j+1]: j += 1
# while successors < topVal move successors upwhile j <= bottom and topVal > arr[j]:
arr[i] = arr[j]i = j; j = j*2 # move to next suceessorif j < bottom and arr[j] > arr[j+1]: j += 1
# put topVal to its correct placearr[i] = topVal
Heap sortA4B33ALG 2011/08
![Page 39: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/39.jpg)
39
repairTop operation worst case ... log2(n) (n = heap size)
make a heap ...
log2(n/2) + log2(n/2+1) + ... + log2(n) (n/2)(log2(n)) = (n·log2(n))
sort the heaps ... n-1 repairTop calls, worst case:
n/2 repairTop calls
log2(n) + log2(n-1) + ... + 1 n · log2(n) = (n·log2(n))
total ... make a heap + sort the heap =
Asymptotic complexity of Heap sort is (n·log2(n)).
Heap sort is not stable.
surprisingly, also the best case = (n·log2(n))
(n·log2(n))
Heap sortA4B33ALG 2011/08
![Page 40: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/40.jpg)
40
B
EJ
M K
O R
TU
X
Priority queue might beimplemented using
a heap.
Officially:
" A binary heap".
Priority queue
Operations- Insert or Enqueue- Front, Top, Peek -- read topmost element - Dequeue, Pop, Poll -- delete topmost element.The element with the smallest value (biggest value in max-heaps) of all elements in the heap is always at the top.
A4B33ALG 2011/08
![Page 41: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/41.jpg)
41
Priority queue implemented with binary heap -- operations
Read the topmost element (Front, Top, Peek, ...) .Obvious.
Delete the topmost element (Dequeue, Pop, Poll, ...) = Remove the top and repair the heap.
As before.
Insert an element to the queue (Insert, Enqueue, ... )
B
EJ
M K
O R
TU
X
Insert the elementat the end of the queue(end of the heap).
In most cases, thisviolates the heap property
and the heap has to berepaired.
A Insert A
A4B33ALG 2011/08
![Page 42: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/42.jpg)
42
B
EJ
M K
O R
TU
X
Heap property is violated, swap the element with its parent.
A
Insert A
B
EJ
M
KO R
TU
X
A
Heap property is still violated, swap the element with its parent.
A4B33ALG 2011/08
Priority queue implemented with binary heap -- Insert
![Page 43: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/43.jpg)
43
B
E
JM
KO R
TU
X
A
Heap property is still violated, swap the element with its parent.
Inserting A
B E
JM
KO R
TU
X
A
Heap property is respected, the inserted element has foundits place in the queue (heap).
A4B33ALG 2011/08
Priority queue implemented with binary heap -- Insert
![Page 44: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/44.jpg)
44
Binární halda – vlož prvek, efektivněji
Do not insert the element at the end of the queue. First, find its place and while searching move down other elements encountered in the search.
B E
JM
KO R
TU
X
B
EJ
M K
O R
TU
X
Insert A
2. J>A
1. K>A
3. B>A
AInsert A
Finally, store the inserted element at its correct position.
A4B33ALG 2011/08
Binary heap -- Insert element more effectively
![Page 45: Merge sort Heap Sort Priority queue implemented with binary heap · 2019-04-11 · Heap sort A4B33ALG 2011/08 . 23 A B D M J E O K R T Z U Is a heap](https://reader034.vdocuments.site/reader034/viewer/2022042710/5f5898a63b7af932cd27065a/html5/thumbnails/45.jpg)
45
Inserting represents a traversal in a binary tree from a leaf to the root in the worst case. Therefore, the Insert complexity is . O(log2(n))
# beware! array is arr[1] ... arr[n]# bottom == ndx of last elemdef heapInsert(arr, x, bottom):
bottom += 1 # expand the heap spacej = bottomi = j/2 # parent index
while i > 0 and arr[i] > x:arr[j] = arr[i] # move elem down the heapj = i; i /= 2 # move indices up the heap
arr[i] = x # put inserted elem to its placereturn bottom
Binary heap – Insert
Insert -- Complexity
A4B33ALG 2011/08