• Nie Znaleziono Wyników

Roznorodne algorytmy i ich komputerowe realizacje.NET

N/A
N/A
Protected

Academic year: 2021

Share "Roznorodne algorytmy i ich komputerowe realizacje.NET"

Copied!
62
0
0

Pełen tekst

(1)

(2) RÓŻNORODNE ALGORYTMY OBLICZEŃ I ICH KOMPUTEROWE REALIZACJE Maciej M. Sysło. Uniwersytet Wrocławski Uniwersytet UMK w Toruniu syslo@ii.uni.wroc.pl. informatyka +. 2.

(3) Algorytm, algorytmika. Na str. 3-7 są zamieszczone uwagi wstępne na temat algorytmiki. Można je pominąć i wrócić później.. 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.

(4) 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.

(5) 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.

(6) 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.

(7) Myślenie algorytmiczne Myślenie komputacyjne (ang. computational thinking). Reklama firmy IBM z 1924 roku. Komputer to maszyna do myślenia !!!. informatyka +. 7.

(8) Różnorodne algorytmy obliczeń i ich komputerowe realizacje. PLAN. • Rozgrzewka (warm-up) – kilka krótkich programów • Obliczanie wartości wielomianu – Schemat Hornera • Liczby dziesiętne, binarne, … – system pozycyjny, zamiana liczb między systemami • Rekurencja: Wieże Hanoi, liczby Fibonacciego, wyprowadzania liczb od początku • Podnoszenie do potęgi – szybko! • Algorytm Euklidesa • Algorytmy zachłanne: wydawanie reszty, zmartwienie kinomana, pakowanie plecaka, najdłuższa droga na piramidzie • Przeszukiwanie z nawrotami: wychodzenie z labiryntu i rozstawianie hetmanów na szachownicy. informatyka +. 8.

(9) Rozgrzewka przy komputerach Rozgrzewka (warm-up) – kilka krótkich programów: • obliczanie pole trójkąta • dodatkowo sprawdzanie, czy dane są dobre – warunek • obliczanie pola trójkąta dla ciągu danych – iteracja i tablice Ciekawe zadanie dotyczące trójkątów: Dane: ciąg (bardzo długi) liczb Odpowiedź: czy z każdej trójki liczb z tego ciągu można zbudować trójkąt? Wskazówka: istnieje rozwiązanie, w którym nie trzeba sprawdzać warunku trójkąta dla każdej trójki liczb. informatyka +. 9.

(10) Warsztaty Algorytm, język programowania, komputer Proces komputerowej realizacji algorytmu: • Opis algorytmu – słowny • Zapis w języku programowania (Pascal, C++) • Kompilacja – przetłumaczenie na język zrozumiały przez komputer • Wykonanie • Testowanie • Dokumentacja. informatyka +. 10.

(11) Obliczanie wartości wielomianu Obliczanie wartości wielomianu jest bardzo ważną operacją w komputerze, bo wartość każdej funkcji jest liczona jako wartość wielomianu, np. cos x = 1 – 0.49670x2 + 0.03705x4. Wielomian stopnia 2: w(x) = ax2 + bx + c = a*x*x + b*x + c. 3 mnożenia 2 dodawania. w(x) = ax2 + bx + c = (a*x + b)*x + c. 2 mnożenia 2 dodawania. Wielomian stopnia 3: w(x) = ax3 + bx2 + cx + d = ((a*x + b)*x + c)*x + d. 3 mnoż. 3 dod.. Wielomian stopnia n: wn(x) = a0*xn + a1*xn-1 + … + an-1*x + an = = (a0*xn-1 + a1*xn-2 + … + an-1)*x + an = … = = ((…((a0*x + a1)*x + a2)*x + … + an-2)*x + an-1)*x + an. informatyka +. 11.

(12) Obliczanie wartości wielomianu specyfikacja, algorytm. Specyfikacja problemu – dokładny opis problemu. Problem Wielomian – Obliczanie wartości wielomianu Dane: n – nieujemna liczba całkowita a0, a1, a2, ..., an – n + 1 współczynników wielomianu z – wartość argumentu – obliczamy wn(z). Wynik: wn(z) – czyli wartość wielomianu wn(x) w punkcie x = z Algorytm do obliczania wartości wielomianu: wn(z) = ((…((a0*z + a1)*z + a2)*z + … + an-2)*z + an-1)*z + an Schemat Hornera: y := a0 y := y*z + a1 y := y*z + a2 n mnożeń i n dodawań y := a0 ….. Nie ma szybszego y := y*z + ai dla i = 1, 2, …, n algorytmu !!! y := y*z + an-1 y := y*z + an. informatyka +. 12.

(13) Schemat blokowy algorytmu Hornera Instrukcja warunkowa: rozgałęzienia algorytmu. i := 0; y := a0 Początkowe wartości. Czy i = n Czyli, czy wyczerpano wszystkie współczynniki Tak Wyprowadź wartość y Koniec algorytmu. Nie. i := i + 1 y := y*z + ai. Instrukcja iteracyjna. Ada Augusta, córka Byrona, uznawana powszechnie za pierwszą programistkę komputerów, przełomowe znaczenie maszyny analitycznej Ch. Babbage’a, pierwowzoru dzisiejszych komputerów, upatrywała właśnie „w możliwości wielokrotnego wykonywania przez nią danego ciągu instrukcji, z liczbą powtórzeń z góry zadaną lub zależną od wyników obliczeń”, a więc w iteracji.. informatyka +. 13.

(14) Pełny schemat blokowy algorytmu Hornera. informatyka +. 14.

(15) Algorytm Hornera w postaci programu (Pascal) program Horner; var i,n :integer; a,y,z :real; begin read(n); read(z); read(a); y:=a; for i:=1 to n do begin read(a); y:=y*z+a end; write(y) end.. informatyka +. nazwa programu deklaracje, typy zmiennych blok programu – początek czytaj n, czytaj z czytaj pierwszy współczynnik początkowa wartość wyniku pętla od 1 do n czytaj kolejny współczynnik powiększenie wyniku iteracja – koniec pisz wynik blok programu – koniec. 15.

(16) Algorytm Hornera – współczynniki w tablicy (Pascal) Deklaracja tablicy Program Horner_tablica; var i,n :integer; y,z:real; a:array[0..100] of real {Co najwyzej 100 wspolczynnikow} begin Czytanie read(n); współczynników for i:=0 to n do read(a[i]); writeln(' z y'); read(z); while z <> 0 do begin Instrukcja iteracyjna z warunkiem: y:=a[0]; Obliczanie wartości tego samego for i:=1 to n do y:=y*z+a[i]; wielomianu tak długo, jak długo write(' ',y:2:5); writeln; argument jest różny od zera, czyli read(z) z <> 0. end end.. informatyka +. 16.

(17) Zastosowania Algorytmu Hornera. 1. Obliczanie wartości wielomianów. 2. Obliczanie wartości dziesiętnej liczb danych w systemie o podstawie różnej od 10, np. liczb binarnych. Uwaga: jest to bardzo prosta metoda, np. dla obliczeń na kalkulatorze bez pamięci. 3. Szybkie potęgowanie (w dalszej części) To są tylko niektóre zastosowania schematu Hornera.. informatyka +. 17.

(18) System dziesiętny, system pozycyjny Liczba dziesiętna: 357 ma wartość (dziesiętną): 357 = 3*100 + 5*10 + 7*1 = 3*102 + 5*101 + 7*100 a zatem liczba:. dn-1 dn-2 … d1 d0. która ma n cyfr. ma wartość: dn-1*10n-1 + dn-2*10n-2 + … + d1*101 + d0*100 10 – podstawa systemu {0, 1, 2, 3, …, 8, 9} – cyfry 2, 8, 16 – podstawy systemów używanych w komputerach podstawa cyfry 2 0, 1 system binarny 8 0, 1, 2, 3, 4, 5, 6, 7 16 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 60 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, …. informatyka +. 18.

(19) System binarny, przejście 2 → 10 Liczba binarna: 10101 = (10101)2 ma wartość (dziesiętną): 1*24 + 0*23 + 1*22 + 0*21 + 1*20 = 24 + 22 + 1 = 16 + 4 + 1 = 21 (bn-1 bn-2 … b1 b0)2. a zatem liczba binarna: ma wartość: Binarne rozwinięcie liczby a. która ma n cyfr. Najbardziej znaczący bit. Najmniej znaczący bit. a = bn-1*2n-1 + bn-2*2n-2 + … + b1*21 + b0*20. (*). Jak szybko obliczać wartość dziesiętną binarnego rozwinięcia? Wzór (*) jest wielomianem, w którym zamiast x jest 2. A zatem wartość a obliczamy za pomocą schematu Hornera. .. informatyka +. 19.

(20) Otrzymywanie postaci binarnej liczb, czyli 10 → 2 Szkolna metoda: dzielimy przez dwa tak długo, jak długo iloraz jest większy od zera – słupki: Bardzo prosty program dzielenie iloraz reszta 187|2 93 1 Program Rozwiniecie_binarne; 93|2 46 1 var a:integer; begin 46|2 23 0 read(a); 23|2 11 1 while a <> 0 do begin 11|2 5 1 write(a mod 2,' '); a:=a div 2 5|2 2 1 end 2|2 1 0 end. 1|2 0 1 Ciekawe pytanie: jaka jest długość Reprezentacja od końca reszt: rozwinięcia binarnego liczby n? 187 = (10111011)2. informatyka +. 20.

(21) Techniki algorytmiczne – rekurencja Myślenie rekurencyjne: – – – – – –. przykłady z życia: jedzenie, tańczenie Wieże Hanoi liczby Fibonacciego wyprowadzanie liczb od początku szybkie potęgowanie algorytm Euklidesa. Rekurencyjny algorytm: Rozwiązując problem … odwołuje się do siebie Korzyści: Część pracy … zwalamy na komputer!. informatyka +. 21.

(22) 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 +. 22.

(23) Wieże Hanoi – przekładanie krążków Opis gry i interaktywna zabawa:. Zasady gry: • przenosimy po jednym • nigdy większy na mniejszym Algorytm iteracyjny: • najmniejszy krążek ma dwie możliwości – ustalamy, którą wybieramy • na dwóch palikach, tylko jeden krążek można przenieść i tylko na jedno miejsce. informatyka +. 23.

(24) Wieże Hanoi – Rekurencja Rozwiązanie rekurencyjne: kiedy można przenieść największy krążek? Odpowiedź: gdy pozostałe będę na jednym paliku, następnie możemy je przenieść na największy. 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 Warunek Hanoi (n – 1, A, C, B); początkowy – Największy krążek z A na B; zatrzymuje Hanoi (n – 1, C, B, A) wywołania end. informatyka +. 24.

(25) Wieże Hanoi – Rekurencja – liczba przestawień h(n) h(n) = Hanoi (n, A, B, C) if n = 0 then nic nie rób h(0) = 0 else begin h(n – 1) + Hanoi (n – 1, A, C, B); 1+ Największy krążek z A na B; h(n – 1) = Hanoi (n – 1, C, B, A) end h(n) = 2h(n – 1) + 1. informatyka +. 25.

(26) Wieże Hanoi – Rekurencja – liczba przestawień h(n). h(n) = 2h(n – 1) + 1 = z tego samego wzoru: h(n – 1) = 2h(n – 2) + 1 stąd h(n) = 2[2h(n – 2) + 1] + 1 = = 22⋅h(n – 2) + 2 + 1 = podobnie h(n) = 23⋅ h(n – 3) + 22 + 2 + 1 = … = h(0) = 0 h(n) = 2n⋅h(n – n) + 2n - 1 + … + 2 + 1 = ostatecznie h(n) = 2n – 1 informatyka +. 26.

(27) Profesor S. bierze jeden lub dwa schodki – na ile sposobów wyjdzie na piętro n. Chaotyczny profesor S.. s(n) – liczba sposobów osiągnięcia schodka n. •. Myśl rekurencyjnie!. • •. n. n–1. n–2. … s(n) =. s(n –1) + s(n – 2). dla n > 2. 2 1 0. s(1) = 1 s(2) = 2. informatyka +. 27.

(28) początku jest jedna para Rekurencja – króliki Fibonacciego Na królików, która po miesiącu. rodzi kolejną parę. Króliki nie umierają i po miesiącu, F(n) – liczba par królików po n miesiącach co miesiąc rodzą nową parę. 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 +. 28.

(29) Liczby Fibonacciego – rozrzutna rekurencja F6 F5 F4 3 F3 2 F2 1. F1 1. 5. ?. F2 1. F2. ?. F3. 2. 1. F1. F4 Powtórne obliczanie F4. 1. Pamiętajmy: Rekurencja – może być bardzo rozrzutna pod względem liczby wykonywanych operacji i zajmowanej pamięci. informatyka +. 29.

(30) Liczby Fibonacciego – oszczędna iteracja F(n) – liczba par królików po n miesiącach 1. •. F(1)=1. 2. • F(2)=1. Warunki początkowe. 3. •. n–2. n–1. n. •. •. •. F(n – 2) +F(n – 1) = F(n) Rekurencja jako iteracja dla n > 2. F(n) {n-ta liczba Fibonacciego obliczona iteracyjnie} if (n = 1) lub (n = 2) then F := 1 else begin a := 1; b := 1; {a i b – dwie poprzednie wartości} for i := 3 to n do begin c := a + b; a := b; b := c end; F := c end 30 informatyka +.

(31) 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 +. 31.

(32) Rekurencja – wyprowadzanie kolejnych cyfr liczby KolejnaCyfra (m) if m < 10 then write (m) else begin KolejnaCyfra (m div 10);. Warunek początkowy – gdy liczba ma jedną cyfrę. Wywołanie rekurencyjne dla liczby bez ostatniej cyfry. write (m mod 10) Drukowanie ostatniej cyfry. 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. informatyka +. 32.

(33) Rekurencja – wyprowadzanie kolejnych cyfr liczby Wywołania rekurencyjne. KolejnaCyfra (3045). 304 = 3045 div 10. KolejnaCyfra (304) write (3045 mod 10) = 5. KolejnaCyfra (30). write (304 mod 10). =4. KolejnaCyfra (3). write (30 mod 10). =0. write (3). =3. Kolejno drukowane cyfry. Powrót z wywołań rekurencyjnych. informatyka +. 33.

(34) Podnoszenie do potęgi, 1 Problem potęgowania. Ważne działanie w kryptografii, gdzie potęguje się duże liczby, np.. Dane: m – liczba naturalna, 1234567891234567890123456789123456789012 x – liczba rzeczywista Wynik: y = xm Przykład: m = 22 Sposób 1.  Rozłóż m na sumę potęg liczby 2 mamy: 22 = 2 + 4 + 16  A stąd: x22 = x2+4+16 = x2 *x4 *x16  Kolejne mnożenia: x2, x4 = (x2)2, x8 = (x4)2, x16 = (x8)2, y = x2 *x4 = x6, y = y*x16 Liczba mnożeń: 6 (kwadrat to jedno mnożenie). informatyka +. 34.

(35) Podnoszenie do potęgi, 2 Sposób 2. (przykład dla m = 22)  Znajdź rozwinięcie binarne liczby m; 22 = (10110)2  Przedstaw wykładnik w postaci schematu Hornera; 22 = 1*24 + 0*23 + 1*22 + 1*21 + 0*20 = (((2 + 0)2 + 1)2 + 1)2 +0  Z postaci wykładnika określ kolejność mnożeń: x(((2+0)2+1)2+1)2+0 = x(((2+0)2+1)2+1)2 = (x(((2+0)2+1)2+1)2 = (x(((2+0)2+1)2 x)2 = = (x(((2+0)2+1)2 x)2 = (x(((2+0)2x)2 x)2 = (x(((2+0)2x)2x)2 = (((x2)2x)2x)2 = x22  Kolejne mnożenia: x2, x4 = (x2)2, x5 = (x4)x, x10 = (x5)2, x10x = x11, (x11)2 = x22 Liczba mnożeń: 6, jak w Sposobie 1, ale są liczone inne iloczyny.. informatyka +. 35.

(36) Podnoszenie do potęgi, 3 Algorytm rekurencyjny, korzysta ze spostrzeżenia:  jeśli m jest parzyste, to xm = (xm/2)2  jeśli m jest nieparzyste, to xm = (xm –1)x (m – 1 staje się parzyste). Przykład: m = 22 x22 = (x11)2 = ((x10) x)2 = ((x5)2 x)2 = (((x4)x)2x)2 = (((x2)2x)2x)2 = x22  Kolejne mnożenia: x2, x4 = (x2)2, x5 = (x4)x, x10 = (x5)2, x10x = x11, (x11)2 = x22 Liczba mnożeń: 6, jak w Sposobie 1 i 2, liczone jak w Sposobie 2. Potega (x, n) { xn } Realizacja if n = 1 then Potega := x rekurencyjna 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}. informatyka +. 36.

(37) Algorytm Euklidesa, 1  Uważany za pierwszy algorytm – powstał 300 p.n.e.  Chociaż Chińczycy i Hindusi wcześniej tworzyli przepisy obliczeniowe.  Przez długie lata był synonimem algorytmu i od niego zaczynały wszystkie książki akademicki.  Ma bardzo wiele zastosowań praktycznych i teoretycznych:  arytmetyka, czyli obliczenia na liczbach całkowitych  kryptografia – RSA  łamigłówki.  Przykład: Czy za pomocą naczyń 6 i 10 litrowych można napełnić pojemnik 15 litrami wody – wodę można dolewać lub pobierać z pojemnika tylko całymi naczyniami.. informatyka +. 37.

(38) Algorytm Euklidesa, 2 Problem NWD(m,n) – Największy Wspólny Dzielnik Dane: m, n – liczby naturalne (można przyjąć, że m ≤ n) Wynik: NWD(m,n) – Największy wspólny dzielnik liczb m i n. Przykłady: NWD(42,14) = 14 NWD(24,16) = 8 NWD(13,21) = 1 NWD(0,31) = 31. 13 i 21 są względnie pierwsze 0 jest podzielne przez każdą liczbę. Zasada, wykorzystana w algorytmie – Twierdzenie o ilorazie i reszcie n = q*m + r, gdzie 0 ≤ r < m q – iloraz, r – reszta.. informatyka +. 38.

(39) Algorytm Euklidesa, 3 Wnioski: 1. Jeśli r = 0, to m dzieli n, czyli NWD(m,n) = m 2. Jeśli r ≠ 0, to mamy r = n – qm, czyli każda liczba, która dzieli n oraz m dzieli również r, w szczególności największa taka liczba. Stąd mamy: NWD(m,n) = NWD(r,m) Przykład: NWD(25,70) = NWD(20,25) = NWD(5,20) = NWD(0,5) = 5 NWD(25,70): 70 = 2*25 + 20 NWD(20,25). 25 = 1*20 + 5. NWD(5,20). 20 = 4*5 + 0. r = 0, więc NWD( , ) = 5. Generowane liczby maleją: 70, 25, 20, 5, 0 więc algorytm jest skończony. informatyka +. 39.

(40) Algorytm Euklidesa, 4 – dwie realizacje Realizacja z funkcją: program Euklides; var m,n,r:integer; begin read(m,n); while m>0 do begin r:=n mod m; n:=m; m:=r end; write(n) end.. program Euklides_funkcja; var m,n:integer; function NWD(m,n:integer):integer; var r:integer; begin while m>0 do begin r:=n mod m; n:=m; m:=r Funkcja end; NWD:=n Przypisanie end; funkcji wartości begin read(m,n); writeln(NWD(m,n)) end.. informatyka +. Wywołanie funkcji w programie. 40.

(41) Algorytm Euklidesa, 5 – realizacja rekurencyjna program Euklides_rekurencja; var m,n:integer;. Funkcja rekurencyjna. function NWD_rek(m,n:integer):integer; begin. Wywołania rekurencyjne. if m>n then NWD_rek:=NWD_rek(n,m) else if m = 0 then NWD_rek:=n else NWD_rek:=NWD_rek(n mod m,m) end; Reszta z dzielenia n przez m. begin read(m,n); writeln(NWD_rek(m,n)) End.. informatyka +. 41.

(42) Algorytm Euklidesa, 6 – zagadki Przykład 1. Czy za pomocą naczyń 6 i 10 litrowych można napełnić pojemnik 15 litrami wody – wodę można dolewać lub pobierać z pojemnika tylko całymi naczyniami. Jeśli istnieje rozwiązanie, to istnieją takie x i y, że 6x + 10y = 15 Czy istnieją? Uzasadnij odpowiedź. Rozwiązanie 1. W tym przypadku nie istnieje rozwiązanie. Istnieje, gdy prawa strona jest wielokrotnością NWD(6,10). Przykład 2. W jednym pojemniku są klocki o wysokości p, a w drugim – o wysokości q. Czy zawsze można zbudować wieże z każdego rodzaju klocków, które mają tę samą wysokość? Jeśli jest to możliwe, to jaka jest najmniejsza wysokość takich wież? Rozwiązanie 2. Zawsze możliwe. Najmniejsza wysokość NWW(p,q). Pytanie 3. Jaki zachodzi związek między NWD(m,n) i NWW(m,n)? Mamy NWW(m,n) = (m*n)/NWD(m,n). informatyka +. 42.

(43) 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 +. 43.

(44) Techniki algorytmiczne – przybliżone i dokładne • 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. informatyka +. 44.

(45) 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 +. 45.

(46) 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 +. 46.

(47) Metoda zachłanna: wydawanie reszty – program 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; 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 writeln(nominal[i],' gr.: ',reszta[i]) end.. informatyka +. 47.

(48) 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 +. 48.

(49) 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 +. 49.

(50) 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 +. 50.

(51) 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 = 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 4 = 10x7 + 1x10 = 80 Żadne zachłanne nie jest optymalne – na ogół tak jest. informatyka +. 51.

(52) Metoda zachłanna: najdłuższa droga z piramidy 3. Dane: Piramida liczb: 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. 52.

(53) 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 +. 53.

(54) 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 +. 54.

(55) 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 +. 55.

(56) 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 +. 56.

(57) Przeszukiwanie z nawrotami: rozmieszczanie hetmanów na szachownicy. a4. b2: brak pola w c. nawrót a: a3. b1. nawrót do b: b1. informatyka +. c4. c3: brak pola w d. d2 !!!. 57.

(58) Przeszukiwanie z nawrotami: rozmieszczanie hetmanów na szachownicy Drzewo poszukiwania ustawień: Ustawienie 4 hetmanów. Odbicie symetryczne rozwiązania. Oś symetrii drzewa. informatyka +. 58.

(59) Strategia dziel i zwyciężaj – przykład – poszukiwanie elem. w zbiorze uporządkowanym Zgadywana liczba: Metoda: Kolejne kroki:. 17 w przedziale [1 : 20]. połowienia przedziału strzałka wskazuje wybór; kolor czerwony – ciąg do przeszukania:. informatyka +. 59.

(60) 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 +. 60.

(61) 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 +. 61.

(62)

(63)

Cytaty

Powiązane dokumenty

[r]

W przypadku podania błędnej danej skrypt ma wyświetlić komunikat ”Bledne dane!” Dla wczytanej cyfry 1 skrypt ma obliczać sumę 2 liczb wczytanych z klawiatury. 2 tak, aby

[r]

Dalej tworzymy 2 przyciski klikając prawym przyciskiem myszy na szarym polu oraz kursorem najeżdżamy na ikonę Buttons i wybieramy PushButton.. Należy zauważyć, że

Uruchom program, sprawdź efekt podania wartości, która nie występuje w tablicy, wartości występującej w tablicy oraz efekt niepoprawnego podania liczby.. catch z

„[...] twórczość Fr. Arnsztajnowej należy zasadniczo do epoki zwanej w literaturze «Młodą Polską»; talent skrom- ny, szczery, prosty i naturalny, dusza marzycielska, skłon- na

Porównaj testy Fishera i M-H dla sondażu, w którym pytano 24 kobiety i 24 mężczyzn, pracujących w bankach, czy mają szansę rozwoju zawodowego.. Odpowiedź TAK uzyskano od 14 kobiet

(We follow the popular shorthand of writing with probability one for a probability that approaches 1 as n in- creases. In our case, the probability approaches 1 exponentially fast.)