Wskazówka:
Przypomnijmy, że po wykonaniu pierwszej pętli n jest równe 2k . Zauważmy też, że w pierwszym obrocie pętli „dopóki s < n wykonuj” instrukcja w wierszu (*) wykona się n/2 razy, w drugim obrocie pętli wykona się n/4 razy itd., w ostatnim obrocie wykona się jeden raz (dla s = 2k–1 = n/2). Zatem instrukcja w wierszu (*) wykona się

1 + 2 + 4 + …+ n/4 + n/2 = n – 1

razy (zauważ, że liczby 1, 2, 4, … tworzą ciąg geometryczny). Oznacza to, że pierwsze z podanych czterech stwierdzeń jest prawdziwe, a drugie fałszywe (2n > n – 1 > n/2 dla n > 2).

Ponieważ wartość s jest w trakcie działania algorytmu większa od zera, a instrukcja zamiany z wiersza (**) wykonuje się tylko, gdy A[j] > A[j+s], instrukcja (**) nie zostanie wykonana ani razu dla ciągów uporządkowanych, czyli spełniających A[1] < A[2] < … < A[n]. Prawdziwe jest zatem stwierdzenie: „Możliwe jest dobranie takiej początkowej zawartości A[1..2k ], że instrukcja zamiany z wiersza (**) nie wykona się ani razu”.

W celu ustalenia prawdziwości ostatniego z podanych zdań zauważmy, że liczba wykonań instrukcji z wiersza (**) jest nie większa od liczby wykonań instrukcji z wiersza (*). Ustaliliśmy wcześniej, że liczba wykonań (*) jest równa n – 1, zatem ostatnie z podanych w zadaniu zdań jest fałszywe: liczba wykonań (**) jest nie większa n – 1 < 2n2 dla n > 0.
Powrót do pytań