Rok akademicki 007/008, Wykład r 8 /8 Pla wykładu r 8 Iformatyka Politechika Białostocka - Wydział Elektryczy Elektrotechika, semestr II, studia iestacjoare I stopia (zaocze) Rok akademicki 007/008 Defiicje algorytmu komputerowego Sposoby opisu algorytmów opis słowy schemat blokowy pseudokod język programowaia Klasyfikacje algorytmów Rekurecja Wykład r 8 (5.05.008) Rok akademicki 007/008, Wykład r 8 3/8 Rok akademicki 007/008, Wykład r 8 4/8 Algorytm - defiicje Defiicja Algorytm to skończoy, uporządkoway ciąg jaso zdefiiowaych czyości, koieczych do wykoaia pewego zadaia Defiicja Metoda rozwiązaia zadaia Defiicja 3 Ściśle określoa procedura obliczeiowa, która dla właściwych daych wejściowych zwraca Ŝądae dae wyjściowe zwae wyikiem działaia algorytmu Defiicja 4 Skończoy zbiór reguł, wskazujący kolejość operacji przy rozwiązywaiu problemu pewego typu Algorytmy Słowo algorytm pochodzi od azwiska Mohammed ib Musa al-khowarizmiego (po łaciie pisae jako Algorismus), matematyka perskiego z IX wieku i początkowo ozaczało w Europie sposób obliczeń oparty a dziesiętym systemie liczbowym Badaiem algorytmów zajmuje się algorytmika Algorytm moŝe zostać zaimplemetoway w postaci programu komputerowego lub dla iego urządzeia Te sam algorytm moŝe być zaimplemetoway w róŝy sposób przy uŝyciu róŝych języków programowaia Jeśli day algorytm da się wykoać a maszyie o dostępej mocy obliczeiowej i pamięci oraz akceptowalym czasie, to mówi się Ŝe jest to algorytm obliczaly
Rok akademicki 007/008, Wykład r 8 5/8 Rok akademicki 007/008, Wykład r 8 6/8 Algorytmy Podstawowe cechy algorytmu Algorytm powiie posiadać dae wejściowe (w ilości większej lub rówej zeru) pochodzące z dobrze zdefiiowaego zbioru Algorytm powiie zwracać pewie wyik Algorytm powiie być precyzyjie zdefiioway (kaŝdy krok algorytmu musi być jedozaczie określoy) Sposoby opisu algorytmów. Opis w puktach, w języku aturalym (opis słowy, lista kroków). Za pomocą schematu blokowego 3. Z zastosowaiem pseudokodu (język publikacyjy), czyli iezbyt formalej odmiaie języka programowaia (p. odformalizoway Pascal, C, C++) 4. W kokretym języku programowaia, p. Pascalu, C, C++, Matlabie Algorytm powiie być zawsze poprawy (dla kaŝdego z załoŝoego dopuszczalego zestawu daych wejściowych) Algorytm powiie zawsze kończyć się po skończoej liczbie kroków (powia istieć poprawie działająca reguła stopu algorytmu) Algorytm powiie być efektywy (jak ajkrótszy czas wykoaia i jak ajmiejsze zapotrzebowaie a pamięć) Rok akademicki 007/008, Wykład r 8 7/8 Rok akademicki 007/008, Wykład r 8 8/8 Opis słowy s algorytmu Opis słowy przypomia przepis kuliary z ksiąŝki kucharskiej Schematy blokowe Elemety występujące a schematach blokowych: Przykład: Algorytm: Tortilla (a podstawie PodróŜy kuliarych R. Makłowicza) Dae wejściowe: Dae wyjściowe: Koleje kroki: 0,5 kg ziemiaków, 00 g kiełbasy Chorizo, 8 jajek gotowa Tortilla początek algorytmu moŝe występować tylko jede raz koiec algorytmu musi występować przyajmiej jede raz. Ziemiaki obrać i pokroić w plasterki. Kiełbasę pokroić w plasterki 3. Ziemiaki wrzucić a gorącą oliwę a pateli i przyrumieić z obu stro 4. Kiełbasę wrzucić a gorącą oliwę a pateli i przyrumieić z obu stro 5. Ubić jajka i dodać do połączoych ziemiaków i kiełbasy 6. Dodać sól i pieprz 7. UsmaŜyć z obu stro wielki omlet adzieway chipsami ziemiaczaymi z kiełbaską Opis operacji elemetara istrukcja blok fukcyjy operacje obliczeiowe lub orgaizacyje blok decyzyjy operacje warukowe testy
Rok akademicki 007/008, Wykład r 8 9/8 Rok akademicki 007/008, Wykład r 8 0/8 algorytm Euklidesa zajdowaia ajwiększego wspólego dzielika algorytm Euklidesa zajdowaia ajwiększego wspólego dzielika Opis w puktach: Dae wejściowe: iezerowe liczby aturale a i b NWD(675,375)? Dae wyjściowe: Koleje kroki: NWD(a,b). Czytaj liczby a i b. Dopóki a i b są większe od zera, powtarzaj krok 3, a astępie przejdź do kroku 4 3. Jeśli a jest większe od b, to weź za a resztę z dzieleia a przez b, w przeciwym razie weź za b resztę z dzieleia b przez a 4. Przyjmij jako ajwiększy wspóly dzielik tę z liczb a i b, która pozostała większa od zera 5. Drukuj NWD(a,b) a b 675 375 675 40 67 40 67 0 NWD(675,375) 67 Dzieleie większej liczby przez miejszą b/a 375/675 40 a/b 675/40 4 67 b/a 40/67 6 0 KONIEC Zamiaa b 40 a 67 b 0 Rok akademicki 007/008, Wykład r 8 /8 Rok akademicki 007/008, Wykład r 8 /8 algorytm Euklidesa zajdowaia ajwiększego wspólego dzielika algorytm Euklidesa zajdowaia ajwiększego wspólego dzielika Schemat blokowy: Pseudokod: NWD(a,b) while a>0 i b>0 do if a>b the a a mod b b b mod a if a>0 the retur a retur b
Rok akademicki 007/008, Wykład r 8 3/8 Rok akademicki 007/008, Wykład r 8 4/8 algorytm Euklidesa zajdowaia ajwiększego wspólego dzielika zamiaa zapisu liczby aturalej l daej w systemie dziesiętym, a zapis w systemie pozycyjym o podstawie p Język C: it NWD(it a, it b) { while (a>0 && b>0) if (a>b) a a % b; b b % a; if (a>0) retur a; retur b; } Opis w puktach: Dae wejściowe: Dae wyjściowe: Koleje kroki:. Czytaj liczby l i p liczba l w systemie dziesiętym, podstawa systemu p zapis liczby l w systemie o podstawie p. Dopóki l > 0 powtarzaj krok 3 3. Wykoaj dzieleie całkowite liczby l przez p, resztę z dzieleia zapamiętaj jako koleją cyfrę przedstawieia liczby l w owym systemie pozycyjym 4. Drukuj cyfry przedstawieia liczby l w owym systemie pozycyjym w odwrotej kolejości iŝ były zapamiętywae Rok akademicki 007/008, Wykład r 8 5/8 Rok akademicki 007/008, Wykład r 8 6/8 zamiaa zapisu liczby aturalej l daej w systemie dziesiętym, a zapis w systemie pozycyjym o podstawie p 75 (0)?(6) 75(0) 035(6) 75/ 6 9/ 6 48 / 6 8 / 6 / 6 9 48 8 0 5 3 0 kolejość odczytywaia cyfr liczby w systemie szóstkowym Klasyfikacje algorytmów Podstawowe paradygmaty tworzeia programów komputerowych: strategia dziel i zwycięŝaj programowaie dyamicze algorytmy zachłae programowaie liiowe algorytmy siłowe (brute force) algorytmy probabilistycze heurystyka NajwaŜiejsze techiki implemetacji algorytmów komputerowych: proceduralość obiektowość praca sekwecyja praca wielowątkowa praca rówoległa rekurecja
Rok akademicki 007/008, Wykład r 8 7/8 Rok akademicki 007/008, Wykład r 8 8/8 Strategia dziel i zwycięŝ ęŝaj Strategia dziel i zwycięŝaj (ag. divide ad coquer) jest strategią kostruowaia algorytmów, jedą z ajefektywiejszych metod w iformatyce W strategii tej zazwyczaj rekurecyjie dzielimy problem a dwa lub więcej miejszych problemów tego samego (lub podobego) typu tak długo, aŝ staie się o wystarczająco prosty do bezpośrediego rozwiązaia Rozwiązaia otrzymae dla miejszych podproblemów są scalae w celu uzyskaia rozwiązaia całego zadaia Przykłady zastosowań: sortowaie szybkie (quicksort) wyszukiwaie biare - polega a sprawdzeiu czy szukay elemet zajduje się w uporządkowaej tablicy, jeśli tak, to zwraca jego ideks Programowaie dyamicze Kostrukcja programu wykorzystującego zasadę programowaia dyamiczego moŝe być sformułowaa w trzech etapach: Kocepcja: Iicjacja: Progresja: dla daego problemu stwórz rekurecyjy model jego rozwiązaia (wraz z jedozaczym określeiem przypadków elemetarych) stwórz tablicę, w której będzie moŝa zapamiętywać rozwiązaia przypadków elemetarych i podproblemów, które zostaą obliczoe a ich podstawie wpisz do tablicy wartości umerycze odpowiadające przypadkom elemetarym a podstawie wartości wpisaych do tablicy, uŝywając formuły rekurecyjej, oblicz rozwiązaie problemu wyŝszego rzędu i wpisz je do tablicy postępuj w te sposób do osiągięcia poŝądaej wartości Rok akademicki 007/008, Wykład r 8 9/8 Rok akademicki 007/008, Wykład r 8 0/8 Algorytmy zachłae ae Algorytm zachłay (ag. greedy algorithm) jest to algorytm, w którym w celu rozwiązaia pewego zadaia w kaŝdym kroku dokouje się zachłaego, tj. ajlepiej rokującego w daym momecie wyboru rozwiązaia częściowego Algorytm podejmuje decyzję lokalie optymalą, dokouje wyboru wydającego się w daej chwili ajlepszym, kotyuując rozwiązaie podproblemu wyikające z podjętej decyzji Algorytmy zachłae stosowae są przede wszystkim w optymalizacji Musi zawsze istieć kryterium pozwalające oceić jakość rozwiązaia Programowaie liiowe Programowaie liiowe to klasa programowaia matematyczego, w której wszystkie waruki ograiczające oraz fukcja celu mają postać liiową, p. waruki ograiczające: a x + a x a x + a x a x + a x + K+ a x + K+ a x + K+ a x α α α Zadaie polega a zmaksymalizowaiu (zmiimalizowaiu) fukcji celu: f α + c K+ x + cx + cx Dokoyway lokalie ajkorzystiejszy wybór ma w załoŝeiu prowadzić do zalezieia globalego optymalego rozwiązaia wiele problemów moŝa sprowadzić do maksymalizacji lub miimalizacji pewej fukcji celu, przy ograiczoych zasobach i atagoistyczych warukach programowaie liiowe zalazło szerokie zastosowaie w teorii decyzji, p. do optymalizacji plau produkcyjego
Rok akademicki 007/008, Wykład r 8 /8 Rok akademicki 007/008, Wykład r 8 /8 Programowaie liiowe Fabryka produkuje urządzeia A i B. W ciągu jedego dia moŝa wytworzyć łączie 00 urządzeń. Wyprodukowaie urządzeia A zajmuje 3 roboczogodziy, a urządzeia B - 4 roboczogodziy. Dziea liczba dostępych roboczogodzi wyosi 600. W ciągu jedego dia aleŝy wyprodukować mi. 50 urządzeń A i mi. 50 urządzeń B. Zysk ze sprzedaŝy urządzeia A to 000 PLN, a B - 00 PLN. Ile urządzeń A i B aleŝy dzieie wyprodukować, aby zysk był jak ajwiększy? Waruki ograiczające: x A 3 x + x x, x A A 00 + 4 x B B B 50 600 Algorytmy siłowe Algorytm siłowy (ag. brute force) jest to określeie algorytmu opierającego się a sukcesywym sprawdzaiu wszystkich moŝliwych kombiacji w poszukiwaiu rozwiązaia problemu Algorytm siłowy jest zazwyczaj ieoptymaly, ale ajprostszy w implemetacji W programowaiu termi te odosi się do dowolego algorytmu, który rozwiązuje problem przez weryfikację i oceę wszystkich wariatów postępowaia Stosowae jest takŝe pojęcie ataku brute force, odoszące się do przeprowadzaych przez człowieka lub program komputerowy prób złamaia zabezpieczeń, p. odgadięcia hasła, poprzez wypróbowaie wszystkich moŝliwych kombiacji cyfr, liter i iych zaków Fukcja celu: f 000 x + 00 A x B Rok akademicki 007/008, Wykład r 8 3/8 Rok akademicki 007/008, Wykład r 8 4/8 Algorytmy probabilistycze Ogólie algorytmy moŝa podzielić a determiistycze i probabilistycze Dae wejściowe Algorytm determiistyczy Dae wyjściowe Dae wejściowe Algorytm probabilistyczy Dae wyjściowe Geerator liczb losowych Działaie algorytmu determiistyczego jest całkowicie zdetermiowae przez waruki początkowe (wejście), tz. dla takich samych daych wejściowych algorytm zawsze zwraca taki sam wyik Algorytm probabilistyczy albo radomizoway (ag. radomized algorithm) to algorytm, który do swojego działaia uŝywa losowości (geeratora liczb pseudolosowych) Algorytmy probabilistycze Główą zaletą algorytmów probabilistyczych jest działaie w średim przypadku, dzięki czemu złośliwe dae wejściowe ie wydłuŝają jego działaia Wśród algorytmów probabilistyczych wyróŝia się algorytmy Las Vegas i algorytmy Mote Carlo Algorytm Las Vegas: Algorytm Las Vegas zawsze zwraca prawidłową odpowiedź, ale jego czas działaia ie jest z góry ustaloy (p. szukaie litery a w tablicy zawierającej połowę liter a i połowę liter b ) Algorytm Moe Carlo: Algorytm Mote Carlo kończy się w ustaloym czasie, ale moŝe z pewym prawdopodobieństwem zwrócić zły wyik lub zwrócić wyik tylko z pewą dokładością (p. obliczaie całek ozaczoych)
Rok akademicki 007/008, Wykład r 8 5/8 Rok akademicki 007/008, Wykład r 8 6/8 Rekurecja Rekurecja - przykłady Rekurecja lub rekursja (ag. recursio, z łac. recurrere, przybiec z powrotem) jest to odwoływaie się p. fukcji do samej siebie Rekurecja polega a tym, Ŝe rozwiązaie daego problemu wyraŝa się za pomocą rozwiązań tego samego problemu dla daych o miejszych rozmiarach W matematyce mechaizm rekurecji stosoway jest dość często do defiiowaia lub opisywaia algorytmów silia liczby! ( )! dla dla 0 UŜycie opisu rekurecyjego w przypadku algorytmu pozwala a przejrzysty, zwarty opis fukcji lub procedury Nie zawsze rozwiązaie rekurecyje prowadzi do rozwiązaia efektywego, czasem prowadzi do obiŝeia efektywości programu Rekurecja zawsze zwiększa zapotrzebowaie programu a pamięć it silia(it ) { if (0) retur ; retur *silia(-); } Rok akademicki 007/008, Wykład r 8 7/8 Rok akademicki 007/008, Wykład r 8 8/8 Rekurecja - przykłady Rekurecja - przykłady defiicja ciągu Fiboacciego ajwiększy wspóly dzielik - algorytm Euklidesa 0 dla 0 F dla F + F dla > NWD(a, b) a NWD(b,a mod b) dla dla b 0 b it F(it ) { if (0) retur 0; if () retur ; retur F(-) + F(-); } it NWD(it a, it b) { if (b0) retur a; retur NWD(b,a % b); }
Rok akademicki 007/008, Wykład r 8 9/8 Rok akademicki 007/008, Wykład r 8 30/8 Koiec wykładu r 8 Źródła a (KsiąŜ ąŝki): Dziękuj kuję za uwagę! Adamski T., Ogrodzki J.: Algorytmy komputerowe i struktury daych. Oficya Wydawicza Politechiki Warszawskiej, Warszawa, 005 - Rozdz... Wprowadzeie (str. 9-48) Goczyła K.: Struktury daych. Wydawictwo Politechiki Gdańskiej, Gdańsk, 00 - Rozdz..3 Miary jakości algorytmów (str. 9-0) Goczyła K.: Struktury daych. Wydawictwo Politechiki Gdańskiej, Gdańsk, 00 - Rozdz..4 Szacowaie (str. 0-3) Alexader R., Besley G.: C++. Optymalizacja oprogramowaia. Wydawictwo RM, Warszawa, 00 - Rozdz. 5 Pomiary czasu i złoŝoości (str. 89-9) Baachowski L., Diks K., Rytter W.: Algorytmy i struktury daych. WNT, Warszawa, 006 - Rozdz... ZłoŜoość obliczeiowa (str. 3-0) Baachowski L., Diks K., Rytter W.: Algorytmy i struktury daych. WNT, Warszawa, 006 - Rozdz..8. Metody układaia algorytmów (str. 40-4) Corme T.H., Leiserso Ch.E., Rivest R.L., Stei C.: Wprowadzeie do algorytmów. WNT, Warszawa, 005 - Rozdz.. Rola algorytmów w obliczeiach (str. 4-) Rok akademicki 007/008, Wykład r 8 3/8 Rok akademicki 007/008, Wykład r 8 3/8 Źródła a (KsiąŜ ąŝki): Źródła a (Iteret): Corme T.H., Leiserso Ch.E., Rivest R.L., Stei C.: Wprowadzeie do algorytmów. WNT, Warszawa, 005 - Rozdz..3. Projektowaie algorytmów (str. 7-36) Corme T.H., Leiserso Ch.E., Rivest R.L., Stei C.: Wprowadzeie do algorytmów. WNT, Warszawa, 005 - Rozdz. 4. Rekurecje (str. 60-87) Wróblewski P.: Algorytmy, struktury daych i techiki programowaia. Wydaie III, Helio, Gliwice, 003 - Rozdz.. Zaim wystartujemy (str. 9-8) Wróblewski P.: Algorytmy, struktury daych i techiki programowaia. Wydaie III, Helio, Gliwice, 003 - Rozdz.. Rekurecja (str. 9-5) Wróblewski P.: Algorytmy, struktury daych i techiki programowaia. Wydaie III, Helio, Gliwice, 003 - Rozdz. 9. Zaawasowae techiki programowaia (str. 09-7) http://pl.wikipedia.org/wiki/algorytm - Algorytm http://pl.wikipedia.org/wiki/dziel_i_zwyci%c4%99%c5%bcaj - Dziel i zwycięŝaj http://pl.wikipedia.org/wiki/programowaie_dyamicze - Programowaie dyamicze http://pl.wikipedia.org/wiki/algorytm_zach%c5%8ay - Algorytm zachłay http://pl.wikipedia.org/wiki/programowaie_liiowe - Programowaie liiowe http://pl.wikipedia.org/wiki/brute_force - Atak brute force http://pl.wikipedia.org/wiki/algorytm_probabilistyczy - Algorytm probabilistyczy http://pl.wikipedia.org/wiki/heurystyka - Heurystyka http://pl.wikipedia.org/wiki/rekurecja - Rekurecja http://pl.wikipedia.org/wiki/z%c5%8o%c5%bcoo%c5%9b%c4%87_obliczeiowa - ZłoŜoość obliczeiowa