ebook img

Algorytmika dla początkujących PDF

171 Pages·2012·1.24 MB·Polish
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Algorytmika dla początkujących

Algorytmika dla początkujących Uniwersytet Marii Curie-Skłodowskiej Wydział Matematyki, Fizyki i Informatyki Instytut Informatyki Algorytmika dla początkujących Jacek Krzaczkowski Lublin 2012 Instytut Informatyki UMCS Lublin 2012 Jacek Krzaczkowski Algorytmika dla początkujących Recenzent: Grzegorz Matecki Opracowanie techniczne: Marcin Denkowski Projekt okładki: Agnieszka Kuśmierska Praca współfinansowana ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Publikacja bezpłatna dostępna on-line na stronach Instytutu Informatyki UMCS: informatyka.umcs.lublin.pl. Wydawca Uniwersytet Marii Curie-Skłodowskiej w Lublinie Instytut Informatyki pl. Marii Curie-Skłodowskiej 1, 20-031 Lublin Redaktor serii: prof. dr hab. Paweł Mikołajczak www: informatyka.umcs.lublin.pl email: [email protected] Druk FIGARO Group Sp. z o.o. z siedziba w Rykach ul. Warszawska 10 08-500 Ryki www: www.figaro.pl ISBN: 978-83-62773-36-7 Spis treści Przedmowa vii 1 Na dobry początek 1 1.1. Zanim zaczniemy implementować algorytmy . . . . . . . . . . 2 1.2. Elementy teorii złożoności . . . . . . . . . . . . . . . . . . . . 6 2 Struktury danych, abstrakcyjne typy danych, listy 11 2.1. Abstrakcyjne typy danych . . . . . . . . . . . . . . . . . . . . 12 2.2. Listy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3. Proste algorytmy sortujące . . . . . . . . . . . . . . . . . . . 35 2.4. Kolejka, stos, kolejka priorytetowa . . . . . . . . . . . . . . . 48 3 Przeszukiwanie wyczerpujące 57 3.1. Przeszukiwanie wszystkich możliwości . . . . . . . . . . . . . 58 3.2. Przeszukiwanie z nawrotami . . . . . . . . . . . . . . . . . . . 72 4 Metoda dziel i zwyciężaj 77 4.1. O metodzie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.2. Zmniejsz i zwyciężaj . . . . . . . . . . . . . . . . . . . . . . . 90 5 Programowanie dynamiczne 97 5.1. O metodzie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 5.2. Metoda spamiętywania . . . . . . . . . . . . . . . . . . . . . . 116 6 Algorytmy zachłanne 121 6.1. O metodzie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 6.2. Przykłady . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 7 Drzewa 131 7.1. Definicja drzew i sposoby ich reprezentacji . . . . . . . . . . . 132 7.2. Przechodzenie drzew . . . . . . . . . . . . . . . . . . . . . . . 135 7.3. Kopce, sortowanie przez kopcowanie . . . . . . . . . . . . . . 138 8 Grafy 151 vi SPIS TREŚCI 8.1. Definicja i sposoby reprezentacji grafu . . . . . . . . . . . . . 152 8.2. Przechodzenie grafów. . . . . . . . . . . . . . . . . . . . . . . 156 Bibliografia 161 Przedmowa viii Przedmowa Algorytmikaiprogramowanietopodstawyinformatyki.Beznichtrudno mówić o korzystaniu z komputerów i o informatyce w ogóle. Nie na darmo David Harel nadał swojej znanej książce tytuł „Rzecz o istocie informatyki. Algorytmika”[3]. Biorąc to pod uwagę zaskakująco często programowanie, a szczególnie implementacja mniej lub bardziej zaawansowanych algoryt- mów, sprawia dużą trudność wielu studentom informatyki. Najpopularniej- szepodręcznikidoalgorytmikizakładają,żeichczytelnikomprogramowanie nie sprawia problemu. Stąd, dla studentów, którzy nie nauczyli się jeszcze dobrze programować, a już muszą próbować implementować proste algoryt- my, podręczniki te często nie są zbyt użyteczne. W odróżnieniu od wspo- mnianych podręczników, książka, którą Czytelniku trzymasz w ręku, pró- buje uczyć podstaw algorytmiki i programowania jednocześnie. Na ile jest to próba udana, ocenisz sam. Niniejszy skrypt nie jest klasycznym wykładem z algorytmiki. Jest on raczej pomyślany jako uzupełnienie podstawowego wykładu z algorytmiki przeznaczone przede wszystkim dla tych studentów, którzy nie radzą so- bie z implementowaniem prostych algorytmów. Bardziej zaawansowanych czytelników mogą nużyć długie opisy kolejnych kroków implementacji pro- stych funkcji, ale mają one pomóc początkującemu czytelnikowi zrozumieć nie tylko ideę algorytmu, ale także to, jak go zaimplementować. Nieprzy- padkowy jest także dobór materiału do książki. Skupiono się na najprost- szychstrukturachdanychipodstawowychmetodachkonstruowaniaalgoryt- mów. Wszystko to z myślą o czytelnikach, którzy, aby móc implementować bardziej skomplikowane algorytmy, muszą jeszcze popracować nad swoimi umiejętnościami programistycznymi. Stąd rozdział o listach i prostych algo- rytmachnanichjestznaczniedłuższyodrozdziałówodrzewachczygrafach. Programowanie to przede wszystkim praktyka. Nie da się nauczyć pro- gramować wyłącznie czytając książki. Tak samo pisanie programów i nie- kompilowanie ich albo kompilowanie i nieuruchamianie nie pozwoli nauczyć się programowania. Na końcu poszczególnych rozdziałów czytelnik znajdzie proste zadania dotyczące omawianych zagadnień. Warto spróbować je za- implementować i przetestować ich działanie. Ponadto wszystkie algorytmy przedstawione w książce zostały zaimplementowane w języku C++ w ta- ki sposób, aby nadawały się do przekopiowania i użycia po minimalnych zmianach w programach czytelników. Warto spróbować samodzielnie zaim- plementować omawiane algorytmy, a w razie problemów porównywać swój kod z tym zamieszczonym w książce. Czytelnik, który zechce poszerzyć w swoją wiedzę w zakresie algorytmi- ki, może sięgnąć po którąś z pozycji wymienionych w bibliografii. Szczegól- nie godne polecenia są dostępne bezpłatnie w internecie kursy na stronie Studiów Informatycznych [7]. Ci, którzy wolą obcować z papierową książką, przedewszystkimmogąskorzystaćz[2],atakżez[1]i[4].Jeżelikogośzainte- Przedmowa ix resuje generowanie obiektów kombinatorycznych prezentowane w rozdziale 3.1, może sięgnąć po [5], zaś zainteresowani zgłębianiem teorii złożoności po [6].

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.