Spis treści
Transkrypt
Spis treści
Spis treści Od autora... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Wyróżnienia i oznaczenia w tekście . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1. Algorytmy i sposoby ich przedstawiania . . . . . . . . . . . . . . . . . . . . . . 13 1.1. Algorytmy w procesie powstawania . . . . . . . . . . . 1.2. Algorytmy na przestrzeni wieków . . . . . . . . . . . . 1.3. Reprezentacje problemów i algorytmów . . . . . . . . 1.3.1. Roboczy przykład . . . . . . . . . . . . . . . . . . 1.3.2. Słowny opis algorytmu . . . . . . . . . . . . . . . 1.3.3. Opis algorytmu w postaci listy kroków . . . . . . 1.3.4. Schemat blokowy algorytmu . . . . . . . . . . . . 1.3.5. Drzewo algorytmu . . . . . . . . . . . . . . . . . 1.3.6. Drzewo wyrażenia . . . . . . . . . . . . . . . . . 1.3.7. Schemat algorytmu utworzony w programie ELI 1.3.8. Program zapisany w języku Pascal . . . . . . . . . 1.4. Zasoby elektroniczne towarzyszące książce . . . . . . . 1.5. Ćwiczenia, zadania, problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 14 19 20 20 21 22 23 24 25 27 28 29 2. Algorytmy liniowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.1. Zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3. Algorytmy z rozgałęzieniami . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.1. Rozwiązywanie równania kwadratowego 3.2. Rozwiązywanie równania liniowego . . . 3.3. Rozwiązywanie układu równań liniowych 3.4. Zadania . . . . . . . . . . . . . . . . . . 4. Porządkowanie kilku liczb . . . . . . . . 5. O czym mówią dane — algorytmy iteracyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 53 54 59 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1. Reprezentowanie i przeszukiwanie zbioru . . . . . . 5.1.1. Reprezentowanie zbioru danych w algorytmach 5.1.2. Liniowe przeszukiwanie zbioru . . . . . . . . . 5.2. Obliczanie średniej . . . . . . . . . . . . . . . . . . . 5.3. Znajdowanie największego elementu . . . . . . . . . 5.4. Kompletowanie podium zwycięzców . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 41 45 50 . . . . . . . . . . . . . . . . . . . . . . . . . 4.1. Porządkowanie trzech liczb . . 4.2. Porządkowanie czterech liczb 4.3. Porządkowanie pięciu liczb . . 4.4. Zadania i problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 62 63 67 69 72 6 ALGORYTMY 5.5. Znajdowanie jednocześnie największego i najmniejszego elementu . . 5.6. Obliczanie innych miar centralności danych . . . . . . . . . . . . . . . 5.6.1. Znajdowanie lidera w zbiorze . . . . . . . . . . . . . . . . . . . . 5.7. Zadania i problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 80 81 84 6. Porządkowanie ciągu elementów . . . . . . . . . . . . . . . . . . . . . . . . . . 87 6.1. Algorytm bąbelkowy . . . . . . . . . . . . . 6.2. Porządkowanie przez wybór . . . . . . . . . 6.3. Porządkowanie kubełkowe i pozycyjne . . . 6.3.1. Porządkowanie kubełkowe . . . . . . 6.3.2. Porządkowanie pozycyjne . . . . . . . 6.3.3. Realizacja porządkowania pozycyjnego 6.3.4. Złożoność porządkowania pozycyjnego 6.4. Zadania i problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 92 96 96 97 103 105 106 7. Inne algorytmy iteracyjne — schemat Hornera, algorytm Euklidesa, sito Eratostenesa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 7.1. Zapisywanie liczb w systemie binarnym . . . . . . . . . 7.2. Schemat Hornera . . . . . . . . . . . . . . . . . . . . . 7.3. Zastosowania schematu Hornera . . . . . . . . . . . . 7.3.1. Zamiana liczby z systemu binarnego na dziesiętny 7.3.2. Szybkie podnoszenie do potęgi . . . . . . . . . . 7.4. Algorytm Euklidesa . . . . . . . . . . . . . . . . . . . . 7.5. Zastosowania algorytmu Euklidesa . . . . . . . . . . . 7.5.1. Przelewanie wody . . . . . . . . . . . . . . . . . 7.5.2. Operacje na ułamkach zwykłych . . . . . . . . . 7.6. Liczby pierwsze i liczby złożone . . . . . . . . . . . . . 7.6.1. Rozkład liczby na czynniki pierwsze . . . . . . . 7.6.2. Sito Eratostenesa . . . . . . . . . . . . . . . . . . 7.7. Obliczanie wartości pierwiastka kwadratowego . . . . . 7.8. Zadania i problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 145 149 151 152 153 159 163 9. Dziel i zwyciężaj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1. Rekurencyjne znajdowanie największego i najmniejszego elementu 9.2. Przeszukiwanie binarne, czyli przez połowienie . . . . . . . . . . . . 9.3. Przeszukiwanie interpolacyjne . . . . . . . . . . . . . . . . . . . . . 9.4. Znajdowanie zera funkcji metodą połowienia przedziału . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8. Algorytmy rekurencyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 113 115 115 116 120 123 123 127 129 131 134 136 140 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1. Inne spojrzenie na iterację . . . . . . 8.1.1. Obliczanie wartości wielomianu 8.1.2. Obliczanie potęgi . . . . . . . . 8.1.3. Algorytm Euklidesa . . . . . . 8.2. Problemy z rekurencyjną naturą . . . 8.2.1. Wieże Hanoi . . . . . . . . . . 8.2.2. Liczby Fibonacciego . . . . . . 8.3. Zadania i problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 171 178 181 7 Spis treści 9.5. Zadania i problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10. Porządkowanie ciągu elementów . . . . . . . . . . . . . . . . . . . . . . . . . 10.1. Porządkowanie przez umieszczanie . . . . 10.2. Porządkowanie przez scalanie . . . . . . . 10.2.1. Scalanie ciągów uporządkowanych 10.2.2. Porządkowanie przez scalanie . . . 10.3. Szybki algorytm porządkowania . . . . . . 10.4. Własności algorytmów porządkowania . . 10.5. Zadania i problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 186 . . . . . . . 186 189 190 191 194 199 205 11. Wychodzenie z labiryntu i pakowanie plecaka . . . . . . . . . . . . . . . . . . 207 11.1. Znajdowanie wyjścia z labiryntu . . . . . . . . . . . . . . . . . . . . . . 11.1.1. Wychodzenie z labiryntu po omacku . . . . . . . . . . . . . . . 11.1.2. Przeszukiwanie z nawrotami w poszukiwaniu wyjścia . . . . . . 11.1.3. Znajdowanie najkrótszej drogi do wyjścia z labiryntu . . . . . . 11.2. Pakowanie najcenniejszego plecaka . . . . . . . . . . . . . . . . . . . 11.2.1. Algorytm zachłanny dla ogólnego problemu plecakowego . . . 11.2.2. Programowanie dynamiczne dla ogólnego problemu plecakowego . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.3. Algorytm zachłanny dla decyzyjnego problemu plecakowego . . 11.2.4. Programowanie dynamiczne dla decyzyjnego problemu plecakowego . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.5. Złożoność algorytmów rozwiązywania problemów plecakowych 11.3. Zadania i problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 209 209 211 215 217 . . 219 224 . . . 225 228 228 . . . . . . . . . . . . . . . . . . . . 231 . . . . . . . . . . 231 233 237 239 240 13. Problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 13.1. Problemy łatwiejsze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2. Problemy trudniejsze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 248 14. Gdzie szukać dalszych informacji o algorytmach . . . . . . . . . . . . . . . . 258 14.1. Opracowania podstawowe . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2. Opracowania zaawansowane . . . . . . . . . . . . . . . . . . . . . . . . 258 262 15. Algorytmika w zadaniach maturalnych . . . . . . . . . . . . . . . . . . . . . . 264 Lista problemów, algorytmów oraz ich realizacji . . . . . . . . . . . . . . . . . . Skorowidz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 284 12. Własności algorytmów — podsumowanie 12.1. Algorytmy — spojrzenie z lotu ptaka 12.2. Poprawność algorytmów . . . . . . . 12.3. Skończoność algorytmów . . . . . . 12.4. Złożoność i efektywność algorytmów 12.5. Zadania i problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .