Upload
others
View
16
Download
0
Embed Size (px)
Citation preview
TECHNIKI ALGORYTMICZNE – przybliżone i dokładne
WPROWADZENIE DO ALGORYTMIKI
Maciej M. SysłoUniwersytet Wrocławski
Uniwersytet UMK w [email protected]
2informatyka +
Algorytm, algorytmika
Algorytm – opis rozwiązania krok po kroku postawionego problemu lub sposobu osiągnięcia jakiegoś celu
Pierwszy algorytm – algorytm Euklidesa300 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ę algorytmamiCzy 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)
informatyka + 4
Będziemy uczyć komputery, czyli
programować je !
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ś programuKonkluzja: powinniśmy lepiej poznać programowanie komputerów
informatyka + 6
Myślenie algorytmiczneMyślenie komputacyjne (ang. computational thinking)
informatyka + 7
Reklama firmy IBM z 1924 roku
Komputer to maszyna do myślenia !!!
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 wydaniaWynik: 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
informatyka + 10
Dla sprzedawcy to także dobre kryterium – ma mniej okazji, by się pomylić
Metoda zachłanna: wydawanie reszty – w arkuszu
Rozwiązanie w arkuszu –w arkuszu można również wykonywać algorytmy
informatyka + 11
Ćwiczenie na warsztatach: utworzyć taki arkusz
WarsztatyAlgorytm, język programowania, komputer
informatyka + 12
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
Metoda zachłanna: wydawanie reszty – program
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;
beginwrite('kwota'); read(kwota);kwota_int:=round(kwota*100);for i:=1 to 14 do beginile:=kwota_int div nominal[i];reszta[i]:=ile;kwota_int:=kwota_int-ile*nominal[i]
end;for i:=1 to 8 dowriteln(nominal[i] div 100,' zl.: ',reszta[i]);for i:=9 to 14 dowriteln(nominal[i],' gr.: ',reszta[i])
end.
informatyka + 13
Deklaracje zmiennych
Czytanie kwoty
Nominały w groszach
Zamiana kwoty na grosze
Obliczanie wielkości kolejnych nominałów
Wyprowadzenie wyników
Metoda zachłanna: wydawanie reszty – jak dobrze?
Pytanie: jak dobry jest algorytm zachłanny? Czy zawsze tworzy resztę z najmniejszejliczby 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
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
1 2 3 4X XX X X X X
Metoda zachłanna: pakowanie plecaka
Ogólny problem plecakowyDane: 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:
Zachłanne kryteria wyboru rzeczy do plecaka: 1. Najcenniejsze najpierw: 7 x nr 5 + 1 x nr 4 = 7x10 + 1x7 = 772. Najlżejsze najpierw: 23 x nr 6 = 23x2 = 463. 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/611 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 jestinformatyka + 17
Pojemność plecaka
Metoda zachłanna: najdłuższa droga z piramidy
Dane: Piramida liczb:
Wynik: Znaleźć najdłuższą drogę z korzenia
Algorytm zachłanny. 1. Zacznij w korzeniu2. Wybieraj większą liczbę poniżej.
informatyka + 18
3
5 7
8 2 5
4 5 7 5
3 6 3 4 2
Droga z korzenia
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
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 komnatCel: znaleźć wyjście z dowolnego polaAlgorytm:1. Wybieraj kierunki w kolejności: G (do góry), L (w lewo),
P (w prawo), D (do dołu) – patrzymy zawsze przed siebie2. Jeśli nie ma przejścia – cofnij się na pole, z którego
przyszedłeś.
informatyka + 20
Nawrót
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 PrawoP-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 PrawoP-3b – istnieje przejście w LewoL-2b – istnieje przejście w PrawoP-2c – istnieje przejście w LewoWYJŚCIE z labiryntu
informatyka + 21
Przeszukiwanie z nawrotami: rozmieszczanie hetmanów na szachownicy
Opis sytuacji:Szachownica: n x n, hetman – atakuje po
wszystkich liniachCel: ustawić jak największą liczbę nie
atakujących się hetmanówAlgorytm: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 następne pole
informatyka + 22
Nawrót
Przeszukiwanie z nawrotami: rozmieszczanie hetmanów na szachownicy
informatyka + 23
a4 b2: brak pola w c
d2 !!!c4b1nawrót a: a3
c3: brak pola w dnawrót do b: b1
Przeszukiwanie z nawrotami: rozmieszczanie hetmanów na szachownicy
informatyka + 24
Drzewo poszukiwania ustawień:
Ustawienie 4 hetmanów
Oś symetrii drzewa
Odbicie symetryczne
informatyka + 25
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:
Strategia dziel i zwyciężaj – przykład – poszukiwanie elem. w zbiorze uporządkowanym
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
• Jedzenie kaszki z talerza – A. JerszowJedz kaszkę;
jeśli talerz jest pusty to koniec jedzeniaw przeciwnym razie
weź łyżkę kaszki;Jedz kaszkę
• TaniecTańcz;
jeśli nie gra muzyka to koniec tańczeniaw przeciwnym razie
zrób krok;Tańcz
Procedura rekurencyjna wywołuje siebie
Warunek początkowy –zatrzymuje wywołania
Rekurencja – przykłady z życia
informatyka + 27
Algorytm – drukowania cyfr liczby 30451. Najpierw drukuj cyfry liczby 3042. Później drukuj cyfrę 5
Potrzebne są dwie operacje:reszta z dzielenia mod: np. 3045 mod 10 = 5dzielenie całkowite div: np. 3045 div 10 = 304
Liczbę 3045 drukuj w kolejności cyfr: 54 03
Rekurencja – wyprowadzanie kolejnych cyfr liczby
Liczba 304 to: 3045 div 10 = 304
Cyfra 5 to reszta: 3045 mod 10 = 5Zauważmy: możemy
zastosować ten sam algorytm ale do liczby 304 – REKURENCJA
informatyka + 28
KolejnaCyfra (m)if m < 10 then write (m)else begin
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ę.
Rekurencja – wyprowadzanie kolejnych cyfr liczby
Wywołanie rekurencyjne dla liczby bez ostatniej cyfry
Drukowanie ostatniej cyfry
informatyka + 29
KolejnaCyfra (3045)
KolejnaCyfra (304)
KolejnaCyfra (30)
KolejnaCyfra (3)
write (3045 mod 10) = 5
write (304 mod 10) = 4
write (30 mod 10) = 0
write (3) = 3
Kolejno drukowane cyfry
Powrót z wywołań rekurencyjnych
Wywołania rekurencyjne
304 = 3045 div 10
Rekurencja – wyprowadzanie kolejnych cyfr liczby
informatyka + 30
Hanoi (n, A, B, C) {z A na B za pomocą C}if n = 0 then nic nie róbelse begin
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
Rekurencja – inny przykład – Wieże Hanoi
informatyka + 31
F(n) – liczba par królików po n miesiącach
nn–1n–2 1 2
F(n) = + F(n-2)F(n-1)
F(1)=1 F(2)=1
dla n > 2:
• • • •••3
Króliki, które przeżywają
Króliki, urodzone przez pary żyjące ponad miesiąc
Liczby Fibonacciego: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
Warunki początkowe
Rekurencja:
Rekurencja – inny przykład – króliki Fibonacciego
informatyka + 32
• Podnoszenie do potęgi
Potega (x, n) { xn }if n = 1 then Potega := xelse 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 SortowanieSortowanie przez scalanieSortowanie szybkie
Uwaga. Obliczenia przebiegają tak, jakby n było liczbą binarną zapisaną w postaci schematu Hornera
Rekurencja – inne przykłady
informatyka + 33
• Algorytm Euklidesa
NWD(m,n) {zakładamy m≤n}if m = 0 then NWD := nelse 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
Rekurencja – inne przykłady
Reszta z zdzielenia n przez m.
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 realizacjeKursy (24 godz.) – Kuźnia Informatycznych Talentów – KIT dla Orłów:• Przegląd podstawowych algorytmów• Struktury danych i ich wykorzystanie• Zaawansowane algorytmyTendencje – 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