TECHNIKI ALGORYTMICZNE przyblione i dokadne WPROWADZENIE DO ALGORYTMIKI
TECHNIKI ALGORYTMICZNE – przybliżone i dokładne WPROWADZENIE DO ALGORYTMIKI Maciej M. Sysło Uniwersytet Wrocławski Uniwersytet UMK w Toruniu syslo@ii. uni. wroc. pl informatyka + 2
Algorytm, algorytmika Algorytm – opis rozwiązania krok po kroku postawionego problemu lub sposobu osiągnięcia jakiegoś celu Pierwszy algorytm – algorytm Euklidesa 300 p. n. e algorytm od Muhammad ibn Musa al-Chorezmi IX w. Algorytmika – dziedzina zajmująca się algorytmami i ich własnościami informatyka + 3
Algorytmy a informatyka Informatyka – jedna z definicji: dziedzina wiedzy i działalności zajmująca się algorytmami Czy zajmuje się też algorytmami kulinarnymi? Donald E. Knuth: Mówi się często, że człowiek dotąd nie zrozumie czegoś, zanim nie nauczy tego – kogoś innego. Będziemy uczyć W rzeczywistości, komputery, czyli programować je ! człowiek nie zrozumie czegoś (algorytmu) naprawdę, zanim nie zdoła nauczyć tego – komputera. Ralf Gomory (IBM): Najlepszym sposobem przyspieszania komputerów jest obarczanie ich mniejszą liczbą działań (szybszymi algorytmami) informatyka + 4
Algorytmiczne rozwiązywanie problemu Dla problemu – chcemy otrzymać rozwiązanie komputerowe, które jest: • zrozumiałe dla każdego, kto zna problemu • poprawne, czyli spełnia specyfikację (opis) problemu • efektywne, czyli nie marnuje czasu i pamięci komputera Metoda rozwiązywania: • analiza sytuacji problemowej • sporządzenie specyfikacji: wykaz danych, wyników i relacji • projekt rozwiązania • komputerowa realizacja rozwiązania – implementacja • testowanie poprawności rozwiązania • dokumentacja i prezentacja rozwiązania informatyka + 5
Rozwiązywanie problemów z pomocą komputerów Objaśnienie dwóch terminów: Problem: • problem, gdy nie podano nam, jak należy go rozwiązać, ale wiemy wystarczająco, by poradzić sobie z nim • a więc, problem jest dla każdego nie tylko dla orłów Programowanie: • komputery wykonują tylko programy • cokolwiek uruchamiamy na komputerze: Google, dokument w Word, arkusz w Excel, naciśnięcie klawisza – jest programem • każdy widoczny i niewidoczny efekt działania komputera to wynik działania jakiegoś programu Konkluzja: powinniśmy lepiej poznać programowanie komputerów informatyka + 6
Myślenie algorytmiczne Myślenie komputacyjne (ang. computational thinking) Reklama firmy IBM z 1924 roku Komputer to maszyna do myślenia !!! informatyka + 7
Techniki algorytmiczne – przybliżone i dokładne – idee • W wielu sytuacjach postępujemy intuicyjnie, podejmując decyzje, które wydają się nam najlepsze, chociaż nie potrafimy tego uzasadnić – podejście zachłanne • Jednak czasem musimy przejrzeć wszystkie możliwości – dobrze jest mieć pewność, że przeglądamy (pośrednio lub bezpośrednio) wszystkie, ale bez powtórzeń – metoda przeszukiwania z nawrotami • Stara zasada – korzystać z tego, co już znamy – strategia dziel i zwyciężaj • Komputery staramy się używać wtedy, gdy bez niech nie potrafimy sobie poradzić. A najlepiej, gdyby komputery wykonywały za nas dużą część roboty. Rekurencja – czyli jak zwalić robotę na komputer informatyka + 8
Techniki algorytmiczne – przybliżone i dokładne – Plan zajęć • Podejście zachłanne: – – wydawanie reszty zmartwienie napalonego kinomana pakowanie najcenniejszego plecaka najdłuższa droga w piramidzie • Przeszukiwanie z nawrotami – poszukiwanie wyjścia z labiryntu – rozmieszczanie hetmanów na szachownicy • Strategia dziel i zwyciężaj – poszukiwanie elementów w zbiorze uporządkowanym • Rekurencja – wyprowadzanie liczb od początku – szybkie potęgowanie – algorytm Euklidesa informatyka + 9
Metoda zachłanna: wydawanie reszty – problem Problem Reszty. Dane: nominały, np. 1 gr, 2 gr, 5 gr, … K – kwota do wydania Wynik: Utworzyć K z najmniejszej liczby banknotów i monet Dla sprzedawcy to także Dyskusja: dobre kryterium – ma mniej • jak wydają sprzedawcy? okazji, by się pomylić • jaki mamy pomysł? • czy potrafimy uzasadnić, że nasz pomysł da najlepsze rozwiązanie? Konkluzja – algorytm zachłanny: Wydawaj sukcesywnie, zawsze możliwie największy nominał banknotu lub monety informatyka + 10
Metoda zachłanna: wydawanie reszty – w arkuszu Rozwiązanie w arkuszu – w arkuszu można również wykonywać algorytmy Ćwiczenie na warsztatach: utworzyć taki arkusz informatyka + 11
Warsztaty Algorytm, język programowania, komputer Proces komputerowej realizacji algorytmu: • Opis algorytmu • Zapis w języku programowania (Pascal, C++) • Przetłumaczenie na język zrozumiały przez komputer • Wykonanie • Testowanie • Prezentacja rozwiązania informatyka + 12
Metoda zachłanna: wydawanie reszty – program Deklaracje zmiennych Program Zachlanna_reszta_PL; var i, ile, kwota_int: integer; kwota : real; Nominały w groszach nominal: array[1. . 14] of integer =(20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1); reszta : array[1. . 14] of integer; Czytanie kwoty begin write('kwota'); read(kwota); kwota_int: =round(kwota*100); Zamiana kwoty na grosze for i: =1 to 14 do begin ile: =kwota_int div nominal[i]; Obliczanie wielkości reszta[i]: =ile; kolejnych nominałów kwota_int: =kwota_int-ile*nominal[i] end; for i: =1 to 8 do writeln(nominal[i] div 100, ' zl. : ', reszta[i]); for i: =9 to 14 do Wyprowadzenie writeln(nominal[i], ' gr. : ', reszta[i]) wyników end. informatyka + 13
Metoda zachłanna: wydawanie reszty – jak dobrze? Pytanie: jak dobry jest algorytm zachłanny? Czy zawsze tworzy resztę z najmniejszej liczby banknotów i monet? Sytuacje: • brakuje niektórych nominałów w kasie, np. 5 gr. i 10 gr. • pojawia się nowa moneta, np. 21 gr. Fakt: Istniejące w świecie nominały, gdy tylko jest ich dostatecznie dużo w kasie, gwarantują, że algorytm zachłanny daje zawsze najmniejszą liczbę banknotów i monet informatyka + 14
Metoda zachłanna: zmartwienie kinomana Sytuacja: Dane: program filmów w Multikinie na dany dzień Wynik: Kinoman chce jednego dnia zobaczyć jak najwięcej filmów w Multikinie 1 X 2 X X X 3 X X 4 X Strategia: Wybieraj filmy, które kończą się możliwie jak najwcześniej Uzasadnienie: Pozostaje więcej czasu na następne filmy Konkluzja: Jest to optymalny algorytm. informatyka + 15
Metoda zachłanna: pakowanie plecaka Ogólny problem plecakowy Dane: n rzeczy (towarów, produktów itp. ), w nieograniczonej ilości: i-ta rzecz waży wi jednostek i ma wartość pi: W – maksymalna pojemność plecaka. Wynik: ilości poszczególnych rzeczy (mogą być zerowe), których całkowita waga nie przekracza W i których sumaryczna wartość jest największa wśród wypełnień plecaka rzeczami o wadze nie przekraczającej W. Decyzyjny problem plecakowy – 0 -1 (zero-jedynkowy) Rzeczy są tylko w pojedynczych ilościach – decyzja: bierzemy albo nie informatyka + 16
Metoda zachłanna: pakowanie plecaka Przykład: wartość towaru: waga towaru: Pojemność plecaka Zachłanne kryteria wyboru rzeczy do plecaka: 1. Najcenniejsze najpierw: 7 x nr 5 + 1 x nr 4 = 7 x 10 + 1 x 7 = 77 2. Najlżejsze najpierw: 23 x nr 6 = 23 x 2 = 46 3. Najcenniejsze w stosunku do swojej wagi najpierw, czyli w kolejności nierosnących wartości ilorazu pi / wi Kolejność: 7/2, 10/3, 4/2, 2/1, 5/3, 6/6 11 x nr 4 + 1 x nr 6 = 11 x 7 + 1 x 2 = 79 NAJLEPSZE OPTYMALNE: 10 x nr 4 + 1 x nr 5 = 10 x 7 + 1 x 10 = 80 Żadne zachłanne nie jest optymalne – na ogół tak jest informatyka + 17
Metoda zachłanna: najdłuższa droga z piramidy Dane: Piramida liczb: 3 5 8 4 3 7 2 5 6 Droga z korzenia 5 7 3 5 4 2 Wynik: Znaleźć najdłuższą drogę z korzenia Długość drogi zachłannej: niebieska: 3+7+5+7+4 = 26 Algorytm zachłanny. 1. Zacznij w korzeniu 2. Wybieraj większą liczbę poniżej. informatyka + Długość drogi najdłuższej: różowa: 3+5+8+5+6 = 27 18
Przeszukiwanie z nawrotami Opis sytuacji: • Duża przestrzeń możliwych rozwiązań. • Nie znamy innej metody znalezienia rozwiązania niż przeszukanie tej przestrzeni • Decydujemy się przeszukać całą przestrzeń, ale – chcemy to zrobić systematycznie – każde rozwiązanie powinno się pojawić, bezpośrednio lub pośrednio, ale żadne nie więcej niż raz • Może nas interesować znalezienie wszystkich rozwiązań Przykłady: • Wychodzenie z labiryntu – duża liczba możliwych dróg • Ustawianie figur na szachownicy – duża liczba możliwych układów informatyka + 19
Przeszukiwanie z nawrotami: wychodzenie z labiryntu Opis sytuacji: Labirynt: pola = kwadraty, brak zamkniętych komnat Cel: znaleźć wyjście z dowolnego pola Algorytm: 1. Wybieraj kierunki w kolejności: G (do góry), L (w lewo), P (w prawo), D (do dołu) – patrzymy zawsze przed siebie 2. Jeśli nie ma przejścia – cofnij się na pole, z którego przyszedłeś. Nawrót informatyka + 20
Przeszukiwanie z nawrotami: wychodzenie z labiryntu Droga z pola 4 a: G-3 a, G-2 a, G-1 a – do Góry już nie można iść, ale można iść w Prawo P-1 b – z tego pola nie ma już przejść G, L, P – cofamy się B-1 a – także nie ma innego przejścia – cofamy się B-2 a – podobnie, cofamy się B-3 a – podobnie, cofamy się – z 3 a można iść jeszcze w Prawo P-3 b – istnieje przejście w Lewo L-2 b – istnieje przejście w Prawo P-2 c – istnieje przejście w Lewo WYJŚCIE z labiryntu informatyka + 21
Przeszukiwanie z nawrotami: rozmieszczanie hetmanów na szachownicy Opis sytuacji: Szachownica: n x n, hetman – atakuje po wszystkich liniach Cel: ustawić jak największą liczbę nie atakujących się hetmanów Algorytm: Poruszamy się kolumnami, od lewej do prawej, a w kolumnach od góry. 1. Ustaw hetmana w danej kolumnie na nie atakowanym polu. 2. Jeśli nie można, to cofnij się do poprzedniej kolumny i wybierz Nawrót następne pole informatyka + 22
Przeszukiwanie z nawrotami: rozmieszczanie hetmanów na szachownicy a 4 b 2: brak pola w c nawrót a: a 3 b 1 nawrót do b: b 1 informatyka + c 4 c 3: brak pola w d d 2 !!! 23
Przeszukiwanie z nawrotami: rozmieszczanie hetmanów na szachownicy Drzewo poszukiwania ustawień: Ustawienie 4 hetmanów Odbicie symetryczne Oś symetrii drzewa informatyka + 24
Strategia dziel i zwyciężaj – przykład – poszukiwanie elem. w zbiorze uporządkowanym Zgadywana liczba: 17 w przedziale [1 : 20] Metoda: połowienia przedziału Kolejne kroki: strzałka wskazuje wybór; kolor czerwony – ciąg do przeszukania: ! ! ! 0 o p 5 ań n rów 2 t s ia m za informatyka + 25
Techniki algorytmiczne – rekurencja Myślenie rekurencyjne: – – – przykłady z życia: jedzenie, tańczenie wyprowadzanie liczb od początku Wieże Hanoi liczby Fibonacciego szybkie potęgowanie algorytm Euklidesa Rekurencyjny algorytm: Rozwiązując problem … odwołuje się do siebie Korzyści: Część pracy … zwalamy na komputer! informatyka + 26
Rekurencja – przykłady z życia • Jedzenie kaszki z talerza – A. Jerszow Jedz kaszkę; jeśli talerz jest pusty to koniec jedzenia Warunek w przeciwnym razie początkowy – weź łyżkę kaszki; zatrzymuje Jedz kaszkę wywołania Procedura rekurencyjna wywołuje siebie • Taniec Tańcz; jeśli nie gra muzyka to koniec tańczenia w przeciwnym razie zrób krok; Tańcz informatyka + 27
Rekurencja – wyprowadzanie kolejnych cyfr liczby Liczbę 3045 drukuj w kolejności cyfr: 3 0 4 5 Algorytm – drukowania cyfr liczby 3045 1. Najpierw drukuj cyfry liczby 304 2. Później drukuj cyfrę 5 Zauważmy: możemy zastosować ten sam algorytm ale do liczby 304 – REKURENCJA Liczba 304 to: 3045 div 10 = 304 Cyfra 5 to reszta: 3045 mod 10 = 5 Potrzebne są dwie operacje: reszta z dzielenia mod: np. 3045 mod 10 = 5 dzielenie całkowite div: np. 3045 div 10 = 304 informatyka + 28
Rekurencja – wyprowadzanie kolejnych cyfr liczby Kolejna. Cyfra (m) if m < 10 then write (m) else begin Kolejna. Cyfra (m div 10); write (m mod 10) end Warunek początkowy – gdy liczba ma jedną cyfrę. Wywołanie rekurencyjne dla liczby bez ostatniej cyfry Drukowanie ostatniej cyfry Uwagi: 1. Można zastąpić 10 przez 2 i otrzymamy kolejne cyfry binarne, od najbardziej znaczącej 2. Po zmianie kolejności poleceń – drukowanie cyfr od końca informatyka + 29
Rekurencja – wyprowadzanie kolejnych cyfr liczby Wywołania rekurencyjne Kolejna. Cyfra (3045) 304 = 3045 div 10 Kolejna. Cyfra (304) write (3045 mod 10) = 5 Kolejna. Cyfra (30) write (304 mod 10) = 4 Kolejna. Cyfra (3) write (30 mod 10) = 0 write (3) Kolejno drukowane cyfry = 3 Powrót z wywołań rekurencyjnych informatyka + 30
Rekurencja – inny przykład – Wieże Hanoi (n, A, B, C) {z A na B za pomocą C} if n = 0 then nic nie rób Procedura rekurencyjna wywołuje siebie else begin Hanoi (n – 1, A, C, B); Warunek początkowy – Największy krążek z A na B; zatrzymuje Hanoi (n – 1, C, B, A) wywołania end informatyka + 31
Rekurencja – inny przykład – króliki Fibonacciego F(n) – liczba par królików po n miesiącach 1 2 F(1)=1 F(2)=1 Warunki początkowe 3 n– 2 n– 1 n Rekurencja: Króliki, które przeżywają dla n > 2: F(n) = Króliki, urodzone przez pary żyjące ponad miesiąc F(n-1) + F(n-2) Liczby Fibonacciego: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, … informatyka + 32
Rekurencja – inne przykłady • Podnoszenie do potęgi Uwaga. Obliczenia przebiegają tak, jakby n było liczbą binarną zapisaną w postaci schematu Hornera Potega (x, n) { xn } if n = 1 then Potega : = x else if n – parzyste then Potega : = Potega (x, n/2)^2 {xn = (xn/2)2} else Potega : = Potega (x, n – 1)*x {xn = (xn– 1)x} • Algorytmy sortowania – demo w programie Sortowanie przez scalanie Sortowanie szybkie informatyka + 33
Rekurencja – inne przykłady • Algorytm Euklidesa NWD(m, n) {zakładamy m n} if m = 0 then NWD : = n else NWD : = NWD(n mod m, m) Reszta z zdzielenia n przez m. • Wartość wielomianu stopnia n w punkcie x w(n, x) if n = 0 then w : = a 0 else w : = w(n – 1, x) *x + an informatyka + 34
Pokrewne zajęcia w Projekcie Informatyka + Wykład+Warsztaty (Wszechnica Poranna): • Wprowadzenie do algorytmiki i programowania – wyszukiwanie i porządkowanie informacji • Proste rachunki wykonywane za pomocą komputera. • Techniki algorytmiczne – przybliżone (heurystyczne) i dokładne. Wykłady (Wszechnica Popołudniowa): • Czy wszystko można policzyć na komputerze? • Porządek wśród informacji kluczem do szybkiego wyszukiwania. • Dlaczego możemy się czuć bezpieczni w sieci, czyli o szyfrowaniu informacji. • Znajdowanie najkrótszych dróg, najniższych drzew, najlepszych małżeństw informatyka + 35
Pokrewne zajęcia w Projekcie Informatyka + Kursy (24 godz. ) – Wszechnica na Kołach: • Algorytmy poszukiwania i porządkowania. Elementy języka programowania • Różnorodne algorytmy obliczeń i ich komputerowe realizacje • Grafy, algorytmy grafowe i ich komputerowe realizacje Kursy (24 godz. ) – Kuźnia Informatycznych Talentów – KIT dla Orłów: • Przegląd podstawowych algorytmów • Struktury danych i ich wykorzystanie • Zaawansowane algorytmy Tendencje – Wykłady • Algorytmy w Internecie, K. Diks • Czy P = NP, czyli jak wygrać milion dolarów w Sudoku, J. Grytczuk • Między przeszłością a przyszłość informatyki, M. M Sysło informatyka + 36
- Slides: 37