W zadaniu należy podać łączną liczbę kosztownych operacji, jaka zostanie wykonana przez
funkcję
uporządkuj dla tablicy 16-elementowej. Zakładamy, że kosztowne operacje ukryte są
w funkcji scal, która wykonuje 2
k –1 operacji dla dwóch tablic o długości
k. W rozwiązaniu
zadania bardzo pomocne jest narysowanie drzewa wywołań rekurencyjnych, które pozwala
zauważyć, gdzie są wykonywane kosztowne operacje i ile ich jest. W tym celu skorzystamy
z drzewa z poprzedniego zadania.
Pierwsza obserwacja jest taka, że szukana liczba operacji wykonanych przez algorytm
uporządkuj jest sumą liczby kosztownych operacji wykonywanych przez funkcje
scal,
realizowanych na różnych poziomach tego drzewa.
Aby uzyskać wynik — tablica 16-elementowa na szczycie drzewa(pierwszy poziom), należy
scalić dwa wyniki, tj. dwie tablice (na drugim poziomie) o długości 8. Oznacza to, że
realizowane jest scalanie, które wykona 2 ⋅ 8 − 1 = 15 kosztownych operacji. Dalej na
kolejnym poziomie realizowane są dwie operacje scalania tablic o długości 4, co łącznie daje
2 ⋅ (2⋅4−1) = 14 kosztownych operacji. Rozumując dalej w ten sam sposób, dochodzimy
do wniosku, że na kolejnym poziomie wykonywanych jest łącznie 4 ⋅ (2⋅2−1) = 12
kosztownych operacji, a na końcu 8 ⋅ (2⋅1−1) = 8 kosztownych operacji. Ostatecznie
uzyskujemy łącznie 15 + 14 + 12 + 8 = 49 wszystkich kosztownych operacji
wykonywanych przez algorytm
uporządkuj(
T) dla tablicy 16-elementowej.