Wskazówka:
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 2k –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.
Powrót do pytań