Datastructuren en algoritmen
Een max-heap, waarin de waarde van elke ouder minstens zo groot is als die van zijn kinderen, wordt opgeslagen in een array met de wortel in a[0]. Aan de heap 50, 30, 40, 10, 20, 35 wordt 45 toegevoegd door de waarde achteraan te plaatsen en haar met haar ouder te verwisselen zolang ze groter is dan die ouder. Hoe ziet de array er daarna uit?
- A50, 30, 40, 10, 20, 35, 45
- B45, 30, 50, 10, 20, 35, 40
- C50, 30, 45, 10, 20, 35, 40
Antwoord en toelichting tonen
Antwoord: C. 50, 30, 45, 10, 20, 35, 40
45 komt in a[6], met als ouder a[(6−1) ÷ 2] = a[2] = 40. Omdat 45 > 40, worden ze verwisseld en gaat 45 naar a[2]. De volgende ouder, a[0] = 50, is groter dan 45, dus daar stopt het proces, met als resultaat 50, 30, 45, 10, 20, 35, 40. Er vinden hoogstens zoveel verwisselingen plaats als de hoogte van de boom, dus invoegen kost O(log n), en het maximum verwijderen ook O(log n). Daarom worden binaire heaps vaak gebruikt om prioriteitswachtrijen te implementeren.