Lekcja 4: Algorytmy wyszukiwania. Odpowiedź
S. Hoa Nguyen
1. Rozpatrzmy algorytm poszukiwań binarnych na Rysunku ??
Rysunek 1: Algorytm wyszukiwania binarnego
Niech tablica wejściowa E = [2, 4, 5, 6, 7, 8, 10, 13, 15, 17, 19] i wyszukiwany element x = 6.
(a) Wyznaczyć kolejne wartości indeksów m = l+p2 w algorytmie.
m = 5, 2, 3.
(b) Wyznaczyć liczbę porównywań elementów tablicy E z elementem x.
3.
(c) Zaproponuj dane, dla których algorytm BinSearch nie będzie istotnie lepszy niż algorytm sekwencyjny.
Ten sam zbiór E, wyszukiwany element x = 2.
2. Dla algorytm BinSearch podanego na Rysunku ??, niech size(E) = N , gdzie N = π
√n. Czy następujące stwierdzenia są prawdziwe?
(a) Złożoność pamięciowa S(N ) algorytmu BinSearch wynosi S(N ) = Θ(1).
Prawda.
(b) Niech T (N ) oznacza złożoność czasową algorytmu BinSearch, to wtedy T (N ) = O(√
n).
Prawda.
3. Narysuj drzewo turniejowe dla danych wejściowych zapisanych w poniższej tablicy:
A = [2, 7, 9, 14, 13, 0, 8, 4, 12, 19, 17, 16, 3, 1, 11, 20]
Jaki koszt algorytmu dla rozważanych danych wejściowych?
4. Zaproponuj algorytm wyszukiwania trzeciego elementu co do wielkości z wy- korzystaniem metody turniejowej. Jaka jest złożoność czasowa i pamięciowa algorytmu?
5. Napisz algorytm wyszukiwania minimum i maksimum wykorzystujący nastę- pującą metodę:
• Krok1: dla każdej pary kolejnych elementów ciągu ustawiam element mniejszy na pozycji nieparzystej, a element większy na pozycji parzystej.
• Krok 2: szukam elementu najmniejszego na pozycjach nieparzystych.
• Krok 3: szukam elementu największego na pozycjach parzystych.
(a) Uzasadnij poprawność i zbadaj koszt tego algorytmu.
(b) Zaproponuj implementację tego algorytmu, zakładając, że elementy ciągu są umieszczone w tablicy.
Uwaga. Nie należy zakładać, że liczba elementów jest parzysta.
6. Zmodyfikuj algorytm Min-Max tak, by zwracał pozycję elementu najmniej- szego i pozycję elementu największego, a nie ich wartości. Sformułuj nie- zmiennik pętli i uzasadnij, poprawność tego algorytmu ze względu na wa- runek końcowy ∀i≤n(e[min] ≤ e[i] ≤ e[max]) w dowolnej strukturze danych wyposażonej w liniowy porządek.
7. Przedstaw kolejne etapy obliczenia algorytmu wyszukiwania binarnego dla następującej tablicy danych i x = 20
T = [1, 3, 4, 5, 5, 6, 8, 10, 15, 18, 20, 20, 30, 35, 45, 50]
Przypomnienie: m = l+r2
m = 7, 11. Algorytm kończy się po dwóch iteracjach.
8. Przedstaw dwa pierwsze etapy algorytmu wyszukiwania interpolacyjnego dla danych w poprzednim zadaniu. Przypomnienie: m = l +A[r]−A[l](x−A[l])(r − l) m = 6, 9, 10. Algorytm kończy się po trzech iteracjach.
9. Zmodyfikuj algorytm turniej tak by działał poprawnie dla dowolnych cią- gów (bez założenia, że n jest potęgą dwójki). Przeanalizuj działanie tego algorytmu dla ciągu [2, 1, 4, 3, 6, 5, 8, 7, 9, 10]
10. Rozpatrzmy algorytm wyszukiwania k-ty element co do wielkości na Rysunku
?? Niech tablica wejściowa będzie: E = [17, 7, 2, 12, 8, 19, 5, 15, 6, 9, 3] i wy-
Rysunek 2: Algorytm Hoare’a szukiwany element k = 2.
Czy następujące zadania są prawdziwe?
(a) Argumentem 5-go wykonania algorytmu składowego Partition jest ta- blica postaci: [17, 15, 12, 9], w której szukamy indeksu elementu 2-go co do wielkości.
Prawda.
(b) W rozważanym przypadku wysokość drzewa wykonań rekurencyjnych algorytmu HoarePartition jest równa dokładnie 6.
Fałsz.
(c) W rozważanym przypadku liczba wykonań algorytmu P artition jest równa dokładnie 6.
Prawda.
11. Rozpatrzmy algorytm Partition wywołany w algorytmie Hoare’a na Rysunku
??
Rysunek 3: Algorytm Partition
Zakłada się, że tablica wejściowa jest E = [4, 8, 3, 0, 1, 19, 15, 14, 6, 9, 18]. Czy następujące stwierdzenia są prawidłowe?
(a) Po pierwszych 4 operacjach przestawień elementów tablicy E wraz ze stosowną aktualizacją wskaźników l i r, lewy wskaźnik l wykorzystywany w rozważanym algorytmie, wskazuje na element tablicy E o indeksie 8 (elementy tablicy są indeksowane od 0).
Prawda.
(b) Po pierwszych 4 operacjach przestawień elementów tablicy E, jej postać jest następująca: E = [4, 8, 3, 0, 1, 15, 14, 6, 9, 19, 18].
Prawda.
(c) Po pierwszych 4 operacjach przestawień elementów tablicy E wraz ze stosowną aktualizacją wskaźników l i r prawy wskaźnik r wykorzysty- wany w rozważanym algorytmie, wskazuje na element tablicy E o in- deksie 9.
Prawda.
12. Niech A i B będą tablicami liczb naturalnych uporządkowanych rosnąco.
Niech dana będzie liczba k ∈ N . Poszukaj indeksy i i j takie, że A[i] + B[j] = k.
13. Zaproponuj iteracyjną wersję algorytmu Hoare znajdywanie k-tego co do wielkości elementu ciągu.
14. Zaproponuj algorytm tłumaczenia liczby naturalnej zapisanej w systemie dziesiętnym na dowolny inny system. Podaj specyfikację i uzasadnij po- prawność podanego algorytmu.
15. Podaj przykład danych wejściowych rozmiaru n, dla których
• algorytm wyszukiwania binarnego wykonuje istotnie więcej porównań niż algorytm ”skoki co k”, dla optymalnego k.
• algorytm wyszukiwania sekwencyjnego wykonuje w przybliżeniu tyle samo porównań co algorytm ”skoki co k”, dla optymalnego k.
• algorytm wyszukiwania sekwencyjnego wykonuje w przybliżeniu tyle samo porównań co algorytm wyszukiwania binarnego.
• Zaproponuj algorytm, który dla ciągu różnych liczb naturalnych A[1], A[2], ..., A[n]
i liczby x, znajdzie wszystkie pary A[p] i A[q] takie, że A[p].A[q] = x.
Rozpatrywać dwa przypadki:
(a) gdy ciąg jest dowolny.
(b) gdy ciąg jest uporządkowany.