c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (1)
Towards Ultimate Binary Heaps
Jyrki Katajainen1,2 Amr Elmasry3
1 University of Copenhagen 2 Jyrki Katajainen and Company 3 Alexandria University
Towards Ultimate Binary Heaps Jyrki Katajainen 1 , 2 Amr Elmasry 3 1 - - PowerPoint PPT Presentation
Towards Ultimate Binary Heaps Jyrki Katajainen 1 , 2 Amr Elmasry 3 1 University of Copenhagen 2 Jyrki Katajainen and Company 3 Alexandria University c Performance Engineering Laboratory ARCO meeting at SDU on 5 April, 2013 (1) Binary heaps 0
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (1)
1 University of Copenhagen 2 Jyrki Katajainen and Company 3 Alexandria University
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (2)
2 3 4 6 7 5 1 1 2 3 6 5
8 10 80
4
75 12 75 46 8 26 10 75 46 12 75 80
n = 8 a
7
26
return 2i + 1
return 2i + 2
return ⌊(i − 1)/2⌋
for (i = parent(n − 1); i ≥ 0; −−i)
return a0
an = x
n += 1
n −= 1 a0 = an
return min
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (3)
2 3 4 6 7 5 1
a
workspace
n = 8
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (4)
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (5)
8 10
2 3
75 75 80
1 2 3 4 6 7 5 1
8 12 10 75 46 26 75 80
n = 8 a
4
46
k = 4
5 6 7
12 26
return k × i + 1
return ⌊(i − 1)/k⌋
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (6)
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (7)
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (8)
n0 ℓ ≤ lg2(n0)/4 n = n0 + ℓ + r r ≤ n0 ℓ elements: sizes: r components: buffer partial heap backlog a0a1 . . . an−1
partial heap
partial heap buffer
backlog
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (9)
n0 ℓ ≤ lg2(n0)/4 n = n0 + ℓ + r r ≤ n0 ℓ elements: sizes: r components: buffer partial heap backlog a0a1 . . . an−1
an ← an0+ℓ an0+ℓ ← x if (ℓ = 0) k ← ⌈lg(n0)/2⌉ k-ary-heap-insert(a, n0, ℓ, an0+ℓ) ℓ++ n++ if (ℓ = k2)
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (10)
I part II part ℓ ≤ lg2(n0)/4
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (11)
n0 ℓ ≤ lg2(n0)/4 n = n0 + ℓ + r r ≤ n0 ℓ elements: sizes: r components: buffer partial heap backlog a0a1 . . . an−1
k-ary-heap-extract-min(a, n0, ℓ) an0+ℓ ← an ℓ-- n--
n--
if (n0 + ℓ = n)
i ← 0 while (i ≤ parent(n0 − 1)) if (aleft-child(i) < aright-child(i)) ai ← aleft-child(i) i ← left-child(i) else ai ← aright-child(i) i ← right-child(i) ai ← an−1
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (12)
n0 ℓ ≤ lg2(n0)/4 n = n0 + ℓ + m m ≤ lg2(n0 + ℓ)/4 ℓ elements: sizes: components: binary heap buffer1 buffer2 m a0a1 . . . an−1
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (13)
c
Performance Engineering Laboratory
ARCO meeting at SDU on 5 April, 2013 (14)