400 likes | 821 Views
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. Algorytm, algorytmika. Algorytm – opis rozwiązania krok po kroku postawionego problemu lub sposobu osiągnięcia jakiegoś celu
E N D
TECHNIKI ALGORYTMICZNE – przybliżone i dokładneWPROWADZENIE DO ALGORYTMIKI Maciej M. Sysło Uniwersytet Wrocławski Uniwersytet UMK w Toruniu syslo@ii.uni.wroc.pl informatyka +
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-ChorezmiIX w. Algorytmika – dziedzina zajmująca się algorytmami i ich własnościami informatyka +
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. W rzeczywistości, 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) Będziemy uczyć komputery, czyli programować je ! informatyka +
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 +
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 +
Myślenie algorytmiczneMyślenie komputacyjne (ang. computational thinking) Reklama firmy IBM z 1924 roku Komputer to maszyna do myślenia !!! informatyka +
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 +
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 +
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 Dyskusja: • jak wydają sprzedawcy? • 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 Dla sprzedawcy to także dobre kryterium – ma mniej okazji, by się pomylić informatyka +
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 +
WarsztatyAlgorytm, 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 +
Metoda zachłanna: wydawanie reszty – program Deklaracje zmiennych Program Zachlanna_reszta_PL; var i,ile,kwota_int:integer; kwota :real; 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; begin write('kwota'); read(kwota); kwota_int:=round(kwota*100); for i:=1 to 14 do begin ile:=kwota_int div nominal[i]; reszta[i]:=ile; 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 writeln(nominal[i],' gr.: ',reszta[i]) end. Nominały w groszach Czytanie kwoty Zamiana kwoty na grosze Obliczanie wielkości kolejnych nominałów Wyprowadzenie wyników informatyka +
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 +
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 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. 3 1 X X X X 4 X X X 2 informatyka +
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 +
Metoda zachłanna: pakowanie plecaka Przykład: wartość towaru: waga towaru: Zachłanne kryteria wyboru rzeczy do plecaka: 1. Najcenniejsze najpierw: 7 x nr 5 + 1 x nr 4 = 7x10 + 1x7 = 77 2. Najlżejsze najpierw: 23 x nr 6 = 23x2 = 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 = 11x7 + 1x2 = 79 NAJLEPSZE OPTYMALNE: 10 x nr 4 + 1 x nr 5 = 10x7 + 1x10 = 80 Żadne zachłanne nie jest optymalne – na ogół tak jest Pojemność plecaka informatyka +
Metoda zachłanna: najdłuższa droga z piramidy Droga z korzenia Dane: Piramida liczb: Wynik: Znaleźć najdłuższą drogę z korzenia Algorytm zachłanny. • Zacznij w korzeniu • Wybieraj większą liczbę poniżej. Długość drogi zachłannej: niebieska: 3+7+5+7+4 = 26 Długość drogi najdłuższej: różowa: 3+5+8+5+6 = 27 informatyka +
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 +
Przeszukiwanie z nawrotami: wychodzenie z labiryntu Opis sytuacji: Labirynt: pola = kwadraty, brak zamkniętych komnat Cel: znaleźć wyjście z dowolnego pola Algorytm: • Wybieraj kierunki w kolejności: G (do góry), L (w lewo), P (w prawo), D (do dołu) – patrzymy zawsze przed siebie • Jeśli nie ma przejścia – cofnij się na pole, z którego przyszedłeś. Nawrót informatyka +
Przeszukiwanie z nawrotami: wychodzenie z labiryntu Droga z pola 4a: G-3a, G-2a, G-1a – do Góry już nie można iść, ale można iść w Prawo P-1b – z tego pola nie ma już przejść G, L, P – cofamy się B-1a – także nie ma innego przejścia – cofamy się B-2a – podobnie, cofamy się B-3a – podobnie, cofamy się – z 3a można iść jeszcze w Prawo P-3b – istnieje przejście w Lewo L-2b – istnieje przejście w Prawo P-2c – istnieje przejście w Lewo WYJŚCIE z labiryntu informatyka +
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. • Ustaw hetmana w danej kolumnie na nie atakowanym polu. • Jeśli nie można, to cofnij się do poprzedniej kolumny i wybierz następne pole Nawrót informatyka +
Przeszukiwanie z nawrotami: rozmieszczanie hetmanów na szachownicy nawrót do b: b1 c3: brak pola w d a4 b2: brak pola w c nawrót a: a3 b1 c4 d2 !!! informatyka +
Przeszukiwanie z nawrotami: rozmieszczanie hetmanów na szachownicy Drzewo poszukiwania ustawień: Ustawienie 4 hetmanów Odbicie symetryczne Oś symetrii drzewa informatyka +
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: 5 porównań zamiast 20 !!! informatyka +
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 +
Rekurencja – przykłady z życia • Jedzenie kaszki z talerza – A. Jerszow Jedz kaszkę; jeśli talerz jest pusty to koniec jedzenia w przeciwnym razie weź łyżkę kaszki; Jedz kaszkę • Taniec Tańcz; jeśli nie gra muzyka to koniec tańczenia w przeciwnym razie zrób krok; Tańcz Warunek początkowy – zatrzymuje wywołania Procedura rekurencyjna wywołuje siebie informatyka +
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 Potrzebne są dwie operacje: reszta z dzielenia mod: np. 3045 mod 10 = 5 dzielenie całkowite div: np. 3045 div 10 = 304 Liczba 304 to: 3045 div 10 = 304 Cyfra 5 to reszta: 3045 mod 10 = 5 Zauważmy: możemy zastosować ten sam algorytm ale do liczby 304 – REKURENCJA informatyka +
Rekurencja – wyprowadzanie kolejnych cyfr liczby KolejnaCyfra (m) ifm < 10 thenwrite (m) elsebegin KolejnaCyfra(m div 10); write(m mod 10) end 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 Warunek początkowy – gdy liczba ma jedną cyfrę. Wywołanie rekurencyjne dla liczby bez ostatniej cyfry Drukowanie ostatniej cyfry informatyka +
Rekurencja – wyprowadzanie kolejnych cyfr liczby Wywołania rekurencyjne write (3045 mod 10) = 5 write (304 mod 10) = 4 write (30 mod 10) = 0 write (3) = 3 KolejnaCyfra (3045) KolejnaCyfra (304) KolejnaCyfra (30) KolejnaCyfra (3) 304 = 3045 div 10 Kolejno drukowane cyfry Powrót z wywołań rekurencyjnych informatyka +
Rekurencja – inny przykład – Wieże Hanoi Hanoi (n, A, B, C) {z A na B za pomocą C} ifn = 0 then nic nie rób elsebegin Hanoi (n – 1, A, C, B); Największy krążek z A na B; Hanoi (n – 1, C, B, A) end Procedura rekurencyjna wywołuje siebie Warunek początkowy – zatrzymuje wywołania informatyka +
Rekurencja – inny przykład – króliki Fibonacciego F(n) – liczba par królików po n miesiącach n–1 1 n 2 3 n–2 Rekurencja: F(1)=1 F(2)=1 Warunki początkowe Króliki, które przeżywają Króliki, urodzone przez pary żyjące ponad miesiąc dla n > 2: + F(n-2) F(n) = F(n-1) Liczby Fibonacciego: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, … informatyka +
Rekurencja – inne przykłady Uwaga. Obliczenia przebiegają tak, jakby n było liczbą binarną zapisaną w postaci schematu Hornera • Podnoszenie do potęgi Potega (x, n) { xn } if n = 1 then Potega := x elseif 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 Sortowanie przez scalanie Sortowanie szybkie informatyka +
Rekurencja – inne przykłady • Algorytm Euklidesa NWD(m,n) {zakładamy mn} if m = 0 then NWD := n else NWD := NWD(n mod m, m) • Wartość wielomianu stopnia n w punkcie x w(n,x) if n = 0 then w := a0 else w := w(n – 1, x) *x + an Reszta z zdzielenia n przez m. informatyka +
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 +
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 +