710 likes | 1.02k Views
Wykład 4 O algorytmach. Część I. ALGORYTMY. Uczyć algorytmów?. TAK! nawet wtedy gdy nie zamierzamy uczyć programowania (przecież w arkuszach kalkulacyjnych, bazach danych a nawet w edytorze tekstu wykonywanie kolejnych czynności jest właśnie programowaniem). JAK?
E N D
Część I. ALGORYTMY
Uczyć algorytmów? • TAK! • nawet wtedy gdy nie zamierzamy uczyć programowania (przecież w arkuszach kalkulacyjnych, bazach danych a nawet w edytorze tekstu wykonywanie kolejnych czynności jest właśnie programowaniem). • JAK? • jako coś normalnego i zwyczajnego; algorytmy wielokrotnie wykonujemy przez całe życie; nawet nie zdajemy sobie sprawy z tego, że stosujemy algorytmy.
Jak uczyć? • Przykłady • Pojęcie • Cechy • Przykłady • Implementacja • Analiza
Przykłady przykładów... • Algorytmy działań pisemnych • Naprawa przedziurawionej dętki • Montaż szafy z gotowych elementów • Robienie swetra na drutach • Zaprogramowanie wideo lub DVD • Wprowadzenie numeru telefonu do komórki
Pojęcie algorytmu Algorytm to opis czynności prowadzących do określonego celu.
Wyjaśnienie pojęcia • Algorytm zadaje czynności, które składają się na proces. • Pieczenie ciasta z rodzynkami: to proces wykonywany ze składników przez piekarza za pomocą pieca (i innych narzędzi: trzepaczka, talerz etc.) według przepisu. • Składniki = dane wejściowe, • Gotowe ciasto = dane wyjściowe, • Piec, przybory, piekarz = sprzęt (hardware), • Przepis =algorytm.
Cechy algorytmów • Problem algorytmiczny • precyzyjne określenie relacji między danymi wejściowymi i wyjściowymi • Opis właściwej procedury obliczeniowej • uwzględnienie wszystkich możliwych przypadków i reakcja na nie • Poziom szczegółowości • repertuar czynności, które „są znane” – czyli nie muszą być opisane algorytmem
Poprawność algorytmów • Dla każdych danych spełniających warunki określone przez problem algorytmiczny • algorytm zatrzymuje się, • dane wyjściowe spełniają warunki problemu (algorytm daje dobry wynik).
Przykłady algorytmów (1) • Wydawanie reszty w sklepie • Mycie zębów • Ubieranie się mężczyzny w garnitur • Wiązanie krawata • Wiązanie sznurowadła w kokardkę • Otwieranie, za pomocą kluczy, drzwi mających dwa zamki • Wieszanie zasłon okiennych w pokoju • Pisanie liter (według zasad kaligrafii) • Temperowanie ołówka • Rysowanie okręgu o danym promieniu za pomocą cyrkla • Jedzenie orzecha włoskiego • Obieranie pomarańczy • Instalowanie gry komputerowej • Wypełnianie deklaracji podatkowej PIT • Wykonywanie badań okresowych
Przykłady algorytmów (2) • Binarna reprezentacja liczby naturalnej • Schemat Hornera • Wyszukiwanie w ciągu elementu najmniejszego • Przeszukiwanie struktury danych (plik, tablica, kolejka, drzewa, stos) • Algorytm Euklidesa • Wyznaczanie wartości przybliżonej pierwiastka kwadratowego • Ciąg Fibonacciego • Interpolacja funkcji • Obliczanie pierwiastków równania kwadratowego • Generowania kwadratów kolejnych liczb ale bez mnożenia • Przeszukiwanie listy dwukierunkowej • Sortowanie • Obliczanie wyznacznika macierzy • Wyznaczanie miejsc zerowych funkcji, • Sito Erastostenesa • Znajdowanie wartości całki oznaczonej lista z książki „Elementy informatyki – podręcznik metodyczny dla nauczyciela” pod redakcją M.Sysły
Zapisywanie algorytmów • Algorytmy trzeba zapisywać • Metody zapisu algorytmów • opis słowny • schemat blokowy • pseudokod
Zapisywanie algorytmów (1) • Opis słowny w języku potocznym • Dobry sposób na początek lub w początkowej fazie projektowania • Mało precyzyjny • Trudny do implementacji
Opis słowny • Opis kolejnych czynności w punktach (numerowanych!) • Tryb rozkazujący • Przykład: • Pobierz dwie liczby. • Jeżeli są równe to wypisz jedną z nich i koniec. • Większą zamień na różnicę większej i mniejszej. • Wróć do punktu 2.
Zapisywanie algorytmów (2) Schematy blokowe • Bardzo poglądowy („Obraz wart 1000 słów”) • Dobry do prostych algorytmów • Łatwy w nauczeniu się i stosowaniu • Trudny do implementacji
Schematy blokowe • Pudełka połączone liniami • Operacja (prostokąt) – jedno wejście i jedno wyjście • Warunek (romb) – jedno wejście, dwa wyjścia • Start (owal) – jedno wyjście bez wejścia (tylko jedno w algorytmie) • Stop (owal) – jedno wejście bez wyjścia • Input, output (równoległobok) – jedno wejście i jedno wyjście czytaj: a
Zapisywanie algorytmów (3) Pseudokod • Odpowiednio precyzyjny • Bliski implementacji • Trudny, bo trzeba się go nauczyć
Pseudokod • Konwencje (do ustalenia) • Stały repertuar słów kluczowych – słowa kluczowe wyróżnione • Symbol operacji podstawienia • Stosowanie nawiasów syntaktycznych i separatorów instrukcji • Dopuszczalne operacje wejścia/wyjścia • Sposób pisania komentarzy • Przykład: { algorytm Euklidesa } pobierz(a); pobierz(b); dopóki a < > b jeżeli a > b to a a – b w.p.p. b b – a wypisz(”NWD=”,a)
Od czego zacząć? • Od wykonania prostego algorytmu • Nauczyciel „dyktuje” kroki algorytmu, uczniowie wykonują • Algorytm powinien być ciekawy, zabawny, zaskakujący • Algorytm powinien mieć wyraźne wszystkie cechy dobrego algorytmu
Od czego zacząć – przykład (1) • Proszę wziąć przygotowane kwadratowe kartki... 1. Zginamy kartkę wzdłuż przekątnych 2. Formułujemy trójkąt wciskając do wewnątrz boki (tak aby punkty A i B pokryły się z X)
Od czego zacząć – przykład (1) • Mocno zaprasowujemy wszystkie zgięcia... 1. Zginamy kartkę wzdłuż przekątnych 2. Formułujemy trójkąt wciskając do wewnątrz boki (tak aby punkty A i B pokryły się z X) 3. Zaginamy wolny róg trójkąta tak aby pokrył się z wierzchołkiem trójkąta
Od czego zacząć – przykład (1) • Proszę wziąć przygotowane kwadratowe kartki... 1. Zginamy kartkę wzdłuż przekątnych 2. Formułujemy trójkąt wciskając do wewnątrz boki (tak aby punkty A i B pokryły się z X) 3. Zaginamy wolny róg trójkąta tak aby pokrył się z wierzchołkiem trójkąta 4. Zaginamy i rozprostowujemy utworzony trójkąt według czerwonych linii
Od czego zacząć – przykład (1) • Proszę wziąć przygotowane kwadratowe kartki... 1. Zginamy kartkę wzdłuż przekątnych 2. Formułujemy trójkąt wciskając do wewnątrz boki (tak aby punkty A i B pokryły się z X) 3. Zaginamy wolny róg trójkąta tak aby pokrył się z wierzchołkiem trójkąta 4. Zaginamy i rozprostowujemy utworzony trójkąt według czerwonych linii 5. Formułujemy „uchwyt” i zaprasowujemy
Od czego zacząć – przykład (1) • Proszę wziąć przygotowane kwadratowe kartki... 1. Zginamy kartkę wzdłuż przekątnych 2. Formułujemy trójkąt wciskając do wewnątrz boki (tak aby punkty A i B pokryły się z X) 3. Zaginamy wolny róg trójkąta tak aby pokrył się z wierzchołkiem trójkąta 4. Zaginamy i rozprostowujemy utworzony trójkąt według czerwonych linii 5. Formułujemy „uchwyt” i zaprasowujemy 6. Powtarzamy czynności 3-5 dla wszystkich rogów
Od czego zacząć – przykład (1) • Proszę wziąć przygotowane kwadratowe kartki... 1. Zginamy kartkę wzdłuż przekątnych 2. Formułujemy trójkąt wciskając do wewnątrz boki (tak aby punkty A i B pokryły się z X) 3. Zaginamy wolny róg trójkąta tak aby pokrył się z wierzchołkiem trójkąta 4. Zaginamy i rozprostowujemy utworzony trójkąt według czerwonych linii 5. Formułujemy „uchwyt” i zaprasowujemy 6. Powtarzamy czynności 3-5 dla wszystkich rogów 7. Energicznie dmuchamy w otwór trzymając za dwa sąsiednie uchwyty
Od czego zacząć - przykład (2) • Proszę przygotować kartki i ołówki... • narysuj dwa trójkąty na górze drugiego kształtu • narysuj kolisty kształt • narysuj mniejszy kolisty kształt nieco z boku pierwszego kształtu ale zachodzący na pierwszy • narysuj dwa małe kółeczka w środku trzeciego kształtu • narysuj cztery owale na dole pierwszego kształtu • narysuj mały kolisty kształt w środku drugiego kształtu • narysuj mały świderek z drugiego boku pierwszego kształtu • narysuj dwie kropki nad trzecim kształtem obok siebie • zetrzyj niepotrzebne linie, (dorysuj uśmiech na zakończenie)
Co dalej? • Dalej naturalne przykłady algorytmów • Nauczyciel podaje kilka • Uczniowie sami wymyślają • Przykłady mają być prawdziwe • Przykłady mają być użyteczne • Przykłady mają być wykorzystywane w życiu
Jeszcze dalej ... • Budowa algorytmów • Określenie danych początkowych i wyniku • Pełny zapis • Sprawdzenie poprawności • Analiza warunków zakończenia pracy • Może obliczenie złożoności (liczby operacji w najgorszym przypadku)
Forma lekcji • Nauczyciel podaje jeden przykład tak jakby sam rozwiązywał problem • Nauczyciel zadaje proste przykłady uczniom w klasie i trudniejsze jako pracę domową • W czasie lekcji wspólne tworzenie algorytmu wraz z dyskusją
Dalej niż dalej... • Implementacja algorytmu • realizacja algorytmu w jakimś języku programowania • wymaga umiejętności programowania • realizacja algorytmu za pomocą jakiegoś specjalnego narzędzia edukacyjnego • realizacja algorytmu za pomocą jakiegoś modelu
Narzędzia edukacyjne • Program ELI (Elbox Laboratorium Informatyki) • budowa algorytmu w postaci schematu blokowego z klocków • testowanie poprawności algorytmu • badanie złożoności (liczby operacji podstawowych) algorytmu Środek dydaktyczny zalecany przez MEN Przykład: algorytm Euklidesa
Narzędzia edukacyjne • Program Baltie (SoukupGraphicPrograming) • budowa sceny z gotowych elementów • interakcyjne sterowanie programem • graficzne tworzenie programów • Przeznaczenie dla dzieci (od 4 lat do…)
Dla zainteresowanych • Algorytmy równoważne • rozwiązanie tego samego problemu algorytmicznego w różny sposób • Metody budowania algorytmów • konstrukcja algorytmów złożonych z modułów • metoda „z góry na dół” lub „z dołu do góry” • metoda „dziel i rządź” • Czy wszystko można zalgorytmizować?
Nie na wszystko jest algorytm • Problemy, których nie można rozwiązać algorytmicznie: • Problem „stopu” • Rozwiązywanie równań diofantycznych • Problem domina
„Problem stopu” • Nie istnieje uniwersalny algorytm, który dla dowolnego algorytmu i dowolnych poprawnych danych dla tego algorytmu zatrzymuje się z wynikiem • TAK – gdy dany program na podanych danych wejściowych zatrzymuje się • NIE – gdy dany program na podanych danych wejściowych nie zatrzymuje się
Dowód „problemu stopu” • Oznaczenia: • algorytm R na danych X nie zatrzymuje się: R(X), • algorytm R na danych X zatrzymuje się: R(X). • Problem stopu: Nie istnieje algorytm Q, który zawsze zatrzymuje się, taki, że • Q(R#X)=”TAK” wtedy i tylko wtedy gdy R(X) • Q(R#X)=”NIE” wtedy i tylko wtedy gdy R(X)
Dowód „problemu stopu” cd. • Gdyby istniał taki algorytm Q to budujemy algorytm S: • Dane wejściowe algorytm i dane do algorytmu • Początek: Q(R#R) • Jeżeli Q(R#R)=”TAK” to pętla nieskończona • Jeżeli Q(R#R)=”NIE” to stop (wynik nieważny). • Badamy S(S). • Jeżeli S(S) to Q(S#S)=”NIE” i wtedy zgodnie z konstrukcją S(S) • Jeżeli S(S) to Q(S#S)=”TAK” i wtedy zgodnie z konstrukcją S(S) • Sprzeczność
„Problem domina” • Dane dla algorytmu: • kwadratowe karty podzielone przekątnymi na 4 części • każda część pomalowana jakimś kolorem (daną jest opis kilku typów kart). • Pytanie: czy można pokryć dowolną skończoną powierzchnię kartami opisanych typów (kart nie można przekręcać) mając do dyspozycji dowolną liczbę kart każdego typu?
„Problem domina” – przykład Następującym zestawem płytek można pokryć dowolny fragment płaszczyzny
„Problem domina” - przykład Następującym zestawem płytek nie można pokryć płaszczyzny
Część II. Rekurencja
Przykład rozumowania • Zadanie: • znaleźć wzór na sumę kolejnych liczb naturalnych: 1 + 2 + 3 + 4 + 5 + ... + n = ?
Przykład problemu • Narysować Drzewo Pitagorasa • Pień – dowolny kwadrat • Gałęzie – dwa kwadraty, których suma pól daje pień umieszczone nad pniem tak aby boki stanowiły trójkąt prostokątny • Gałązki – następne kwadraty „wyrastające” z gałęzi według tej samej zasady • Gałązeczki – wyrastają z gałązek tak jak gałązki na gałęziach • Itd...