1 / 50

Algorytmika

Algorytmika. Skąd wziąć przepis na sukces (w programowaniu)? Czyli: dlaczego warto planować poszczególne etapy rozwiązywania zadania programistycznego?. Algorytmika. Algorytmika. Przykład z życia: proces przygotowania potrawy. Składniki Garnki, miski, talerze, piekarnik,…

cardea
Download Presentation

Algorytmika

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algorytmika Skąd wziąć przepis na sukces (w programowaniu)? Czyli: dlaczego warto planować poszczególne etapy rozwiązywania zadania programistycznego?

  2. Algorytmika

  3. Algorytmika Przykład z życia: proces przygotowania potrawy • Składniki • Garnki, miski, talerze, piekarnik,… • Osoba przygotowująca • PRZEPIS • Efekt: potrawa

  4. Algorytmika proces numerycznego rozwiązywania zadania • Dane wejściowe • oprogramowanie • Komputer • ALGORYTM • Wynik

  5. Algorytmika Przygotowanie potrawy a numeryczne rozwiązywanie zadania • Składniki • Garnki, miski, piekarnik,… • Osoba przygotowująca • PRZEPIS • Efekt: potrawa • Dane wejściowe • oprogramowanie • Komputer • ALGORYTM • Wynik

  6. Algorytmika Definicje • Algorytm – zbiór czynności składających się na dany proces. • Algorytmika – obszar ludzkich dociekań, wiedzy i doświadczeń dotyczących algorytmów. Dotyczy nie tylko informatyki, ale bez rozwoju informatyki nie byłoby rozwoju algorytmiki. Ważna w kontekście tych dziedzin nauki, które czerpią korzyści z posługiwania się komputerami (ale nie tylko).

  7. Algorytmika Historia algorytmiki: algorytm Euklidesa (1) • IV w. p.n.e., Euklides: znajdowanie największego wspólnego dzielnika liczb naturalnych. Pomysł Euklidesa traktowany jest jako pierwszy algorytm

  8. Algorytmika Historia algorytmiki: algorytm Euklidesa (2) • Algorytm Euklidesa: największy wspólny dzielnik dwóch liczb. • Są dwie różne liczby: n1 i n2, od większej odejmujemy mniejszą, dostajemy n3 • Są dwie liczby n3 i mniejsza spośród n1 i n2, od większej odejmujemy mniejszą, dostajemy n4 • … • Powtarzamy czynności, aż otrzymana różnica będzie równa mniejszej z aktualnie rozpatrywanej pary liczb; otrzymana liczba jest największym wspólnym dzielnikiem n1 i n2

  9. Algorytmika Historia algorytmiki: algorytm Euklidesa (3) • Algorytm Euklidesa: największy wspólny dzielnik 221 i 286 • Mamy 221 i 286, różnica: 65 • Mamy 221 i 65, różnica: 156 • Mamy 156 i 65, różnica: 91 • Mamy 91 i 65, różnica: 26 • Mamy 65 i 26, różnica: 39 • Mamy 39 i 26, różnica: 13 • Mamy 26 i 13, różnica: 13 – NWD 221 i 286

  10. Algorytmika Historia algorytmiki: Muhammed Alchwarizmi (łac. Algorismus) • IX w. n.e., reguły dodawania, odejmowania, mnożenia i dzielenia liczb dziesiętnych, od jego nazwiska pochodzi słowo algorytm; wielki wpływ na naukę europejską

  11. Algorytmika Historia algorytmiki: XIX w. (1) • 1801 r. Joseph Jacquard: krosno tkackie, wzór tkaniny sterowany był „dziurkowanymi kartami” (mechanizm rozpoznawał otwory, kierowanie pracą maszyny)

  12. Algorytmika Historia algorytmiki: XIX w. (2) 1833 r. Charles Babbage, „maszyna różnicowa” (obliczanie niektórych wzorów matematycznych, tablicowanie wielomianów – dotąd wykonywane „ręcznie”), nieukończona. Zbudowana w Londyńskim Muzeum Nauki, 1990 r., dokładność: 31 cyfr

  13. Algorytmika Historia algorytmiki: XIX w. (3) Ok.1840 - 70 r. Charles Babbage, pomysł „maszyny analitycznej”, wykonywanie algorytmów zapisanych w „programach” zakodowanych w dziurkowanych kartach. Nieukończona

  14. Algorytmika Historia algorytmiki: XIX w. (4) • Maszyna analityczna: • Napęd: silnik parowy • Rozdzielenie pamięci i jednostki obliczeniowej • Wyniki – drukarka, urządzenie kreślarskie, karty dziurkowane • Pętle, instrukcje warunkowe, przetwarzanie równoległe

  15. Algorytmika Historia algorytmiki: XIX w. (5) Współpracownica Charlesa Babbage’a: Ada Lovelace – „pierwsza programistka”, pisała „programy” na maszynę analityczną Problemy: brak finansów, konieczność precyzyjnego wykonania elementów Koncepcje Babbage’a zrealizowano w wieku XX

  16. Algorytmika Historia algorytmiki: XIX i XX w. Koniec XIX w. Herman Hollerith, elektryczna maszyna analityczno – licząca, karty dziurkowane, trzykrotne przyspieszenie obróbki danych ze spisu powszechnego (USA, 1890r.), od firmy Holleritha rozwinęło się IBM

  17. Algorytmika Historia algorytmiki: XIX i XX w. I połowa XX w.: rozwój formalizmu matematycznego, logika matematyczna, prace nad teorią algorytmów, zrozumienie możliwości i ograniczeń algorytmów sterujących pracą maszyn, Alan Turing, Kurt Goedel, Andriej Markow, John von Neumann, … Algorytmika rozwijała się już przed erą komputerów

  18. Algorytmika Historia algorytmiki: XX w. • Lata 40 – te XX w. pierwsze komputery • Lata 50 – te i później: szybkie postępy w projektowaniu i budowie komputerów. • Algorytmy w kontekście informatyki: • zdefiniowanie sposobu rozwiązywania konkretnego problemu (np. jakieś zagadnienie fizyki), komputer – narzędzie do realizacji algorytmu • sterowanie pracą komputera, algorytm – narzędzie umożliwiające funkcjonowanie komputera • Rozwój algorytmiki i informatyki – ściśle powiązane

  19. Algorytmika

  20. Algorytmika Poziom szczegółowości (1) • jak duża puszka? • Jak duża papryka? • Co to znaczy „garść”? • Jak duża łyżka? • Jakiego oleju? • Ile soli? • Ile pieprzu?

  21. Algorytmika Poziom szczegółowości (2) • W jaki sposób umyć? • Małe kawałki? • Podsmaż delikatnie? • Odrobina oleju? • Średniej wielkości? • Pestki papryki też kroić?

  22. Algorytmika Poziom szczegółowości (3) • Przeciętny człowiek wie, jak interpretować informacje zwarte w przepisie, są one wystarczające • „kulinarnemu nowicjuszowi” trzeba dokładnie wytłumaczyć, np. co to jest patelnia, jak usmażyć, żeby nie przypalić, ale żeby nie było surowe itd. • Doświadczonemu kucharzowi wystarczy podać listę najważniejszych składników („mądrej głowie dość dwie słowie”)

  23. Algorytmika Poziom szczegółowości (4) • Mnożenie dwóch liczb, np. 123 * 45 = ? • Pomnóż 5 przez 3, zapisz 5, zapamiętaj 1 • Pomnóż 5 przez 2, dodaj 1, zapisz z przodu 1, zapamiętaj 1 • Pomnóż 5 przez 1, dodaj 1, zapisz z przodu 6, masz liczbę 615 • Pomnóż 4 przez 3, zapisz 2, zapamiętaj 1 • Pomnóż 4 przez 2, dodaj 1, zapisz z przodu 9 • Pomnóż 4 przez 1, zapisz z przodu 4, dopisz z tyłu 0, masz 4920 • Dodaj 615 i 4920, dostajesz 5535

  24. Algorytmika Poziom szczegółowości (5) • Mnożenie dwóch liczb, np. 123 * 45 = ? • Przeciętny człowiek wykona te obliczenia na kartce w ciągu, powiedzmy, 2 minut • Drugoklasista może nie znać tabliczki mnożenia, trzeba mu wytłumaczyć, że 5 * 3 = 5 + 5 + 5 (ale czy umie sprawnie dodawać?) • Osoba „pracująca na liczbach” wykona takie mnożenie w pamięci w kilka sekund, nie trzeba jej niczego tłumaczyć

  25. Algorytmika Poziom szczegółowości (6) • Celem jest jasny i jednoznaczny algorytm • Różni ludzie mogą wymagać różnego poziomu szczegółowości • Nie można zanadto zagłębiać się w opisie szczegółów • Zawsze potrzebny jest „zestaw akcji podstawowych” (delikatne podsmażenie, pokrojenie w małe kawałki; mnożenie cyfr, dodawanie liczb)

  26. Algorytmika Poziom szczegółowości (7) – komputer • Celem jest jasny i jednoznaczny algorytm • Komputery mogą jedynie wykonywać skrajnie proste działania na skrajnie prostych elementach • potrafią dodawać i mnożyć liczby, ale nie mnożą macierzy – możemy im to opisać poprzez operacje dodawania i mnożenia liczb; możemy ewentualnie stworzyć nową „akcję podstawową” – funkcję do mnożenia macierzy • Mogą wykonywać bardzo skomplikowane i złożone zadania, o ile będą one przetłumaczone na najprostsze operacje (na bitach)

  27. Algorytmika Krótkie algorytmy a długotrwałość procesów • Mamy w danej firmie informacje o wszystkich pracownikach, w tym: wysokość zarobków. Interesuje nas suma zarobków wszystkich pracowników. • Wprowadzamy zmienną suma i ją zerujemy • Przewertuj jednego po drugim wszystkich pracowników, zarobki każdego dodawaj do wartości zmiennej suma • Gdy przewertujesz wszystkich, przedstaw wartość zmiennej suma jako wynik

  28. Algorytmika Krótkie algorytmy a długotrwałość procesów Niezależnie od wielkości zatrudnienia algorytm jest ten sam, liczba „narzędzi” (zmiennych) jest ta sama. Różny będzie czas wykonania. Wymagania: poprawnie podana lista płac (konkretny format). Algorytm jest uniwersalny dla nieskończonej liczby list płac.

  29. Algorytmika Zadanie algorytmiczne a algorytm(1)

  30. Algorytmika Zadanie algorytmiczne a algorytm(2) • Algorytm – rozwiązanie zadania algorytmicznego. • Przykład zadania algorytmicznego: na podstawie listy płac o dowolnej długości, zorganizowanej w konkretny sposób, mamy wyznaczyć pewną liczbę – sumę zarobków • znamy: dokładny format dopuszczalnych danych wejściowych • szukamy: pewnej liczby zależnej od danych wejściowych (wiemy, jaka jest ta zależność) • Zadanie algorytmiczne jest rozwiązane, gdy zostaje znaleziony odpowiedni algorytm.

  31. Algorytmika Zadanie algorytmiczne a algorytm(3) W zadaniu algorytmicznym chodzi o znalezienie metody, która na podstawie dowolnych informacji wejściowych (w dopuszczalnym formacie) prowadzi do pewnego wyniku będącego znaną funkcją danych wejściowych. Chodzi o metodę, a nie o sam wynik!

  32. Algorytmika Zadanie algorytmiczne a algorytm(4) Format informacji wejściowych – określony w danych zadania algorytmicznego. Co robić, gdy informacje wejściowe są podane według żądanego formatu, ale są „nietypowe”? Np. ujemne wartości zarobków przy niektórych nazwiskach na liście płac (ew. zero lub puste miejsce)

  33. Algorytmika Zadanie algorytmiczne a algorytm(5) Za odpowiednie traktowanie danych odpowiada algorytm. Musi on zidentyfikować dane nietypowe. Na podstawie „danych nietypowych” można stworzyć listę pozycji, które zostaną odesłane do zweryfikowania przez dział płac. W „dobrym” algorytmie należy przewidzieć taką sytuację.

  34. Algorytmika Przykłady zadań algorytmicznych Dane: poprawna sytuacja szachowa; wynik: ruch dający największą szansę na wygranie

  35. Algorytmika Przykłady zadań algorytmicznych Dane: odległości pomiędzy miastami; wynik: najkrótsza trasa (każde miasto tylko raz, oszczędność paliwa, czasu pracy itd)

  36. Algorytmy i dane Struktury sterujące (1) • Procesor (lub ogólnie wykonawca) może wykonywać pewne akcje podstawowe. • Instrukcje elementarne – zlecenia wykonania akcji podstawowych (jasne, jednoznaczne). • Organizacja kolejności wykonywania akcji. • Algorytm musi zawierać instrukcje sterujące określające kolejność.

  37. Algorytmy i dane Struktury sterujące (2) Struktury sterujące (struktury przepływu sterowania) – układy instrukcji ustalające kolejność. • Typowe struktury sterujące: • Bezpośrednie następstwo (w C++ kolejne instrukcje rozdzielane średnikami): wykonaj A, [potem] wykonaj B, …

  38. Algorytmy i dane Struktury sterujące (3) • Typowe struktury sterujące, cd: • Wybór warunkowy, rozgałęzienie warunkowe (if - else): „jeśli Q to wykonaj A, w przeciwnym razie wykonaj B (albo nie rób nic)”, Q – warunek logiczny Jeśli uważasz, że potrawa jest za mało słona, dodaj szczyptę soli. Uwaga: Algorytm zawierający tylko następstwo i wybór może opisywać procesy nie dłuższe od pewnej ustalonej wielkości, ponieważ żaden jego fragment nie jest nigdy wykonywany więcej niż jeden raz.

  39. Algorytmy i dane Struktury sterujące (4) • Typowe struktury sterujące, cd: • Iteracje – zwroty pętlące • Iteracja ograniczona (for) „wykonaj A dokładnie N razy” • Iteracja warunkowa (while, do – while) „wykonuj A aż do Q” lub „dopóki Q wykonuj A”, Q – warunek logiczny Ser należy zmielić trzykrotnie. Ubijaj białka aż do spienienia. Krótki opis może reprezentować bardzo długi proces.

  40. Algorytmy i dane Struktury sterujące (5) • Mamy w danej firmie informacje o wszystkich pracownikach, w tym: wysokość zarobków. Interesuje nas suma zarobków wszystkich pracowników. • Wprowadzamy zmienną suma i ją zerujemy • Przewertuj jednego po drugim wszystkich pracowników, zarobki każdego dodawaj do wartości zmiennej suma • Gdy przewertujesz wszystkich, przedstaw wartość zmiennej suma jako wynik • Jak to zapisać za pomocą struktur sterujących?

  41. Algorytmy i dane Struktury sterujące (6) • Założenie: dane wejściowe to lista płac oraz liczba N – liczba pracowników (długość listy płac) • Wprowadź zmienną suma i ją wyzeruj; przejdź do pierwszej płacy z listy; • N-1 razy wykonaj: • Dodaj aktualną płacę do zmiennej suma; • Przejdź do następnej płacy; • Dodaj aktualną płacę do zmiennej suma; • Podaj wartość zmiennej suma jako wynik; • Użycie następstwa i iteracji ograniczonej. Jeśli nie znalibyśmy N, użylibyśmy iteracji warunkowej (sprawdzanie, czy już koniec listy)

  42. Algorytmy i dane Struktury sterujące (7) • Składanie struktur sterujących • Wiele kombinacji: następstwo, wybór i iteracje mogą być przeplatane i zagnieżdżane w sobie • Iteracje zagnieżdżone (pętle zagnieżdżone): w każdej iteracji pętli zewnętrznej wykonaj pętlę wewnętrzną • Przykład: wczytywanie tablicy 2-wymiarowa (macierzy) – odczytywanie kolejnych wierszy (w każdym wierszu przechodzimy przez wszystkie kolumny) Zagnieżdżanie pętli – krótki zapis dla dużej ilości operacji

  43. Algorytmy i dane Sortowanie (1) Sortowanie danych – jedno z najczęściej pojawiających się zadań. Dane: tablica liczb [ 4, 10, 5, 3, 8 ] Wynik: tablica z liczbami posortowanymi niemalejąco [ 3, 4, 5, 8, 10 ] Zadanie algorytmiczne: mając dowolnie długą tablicę liczb uzyskaj tablicę liczb posortowanych niemalejąco Algorytmy sortowania: wybór, wstawianie, bąbelkowe, …

  44. Algorytmy i dane Sortowanie (2) • Sortowanie przez wybór • Startuję od elementu 1, szukam elementu najmniejszego, zamieniam go z elementem 1: [ 4, 10, 5, 3, 8 ]  [ 3, 10, 5, 4, 8 ] (4 porównania) • Startuję od elementu 2, szukam elementu najmniejszego, zamieniam go z elementem 2: [ 3, 10, 5, 4, 8 ]  [ 3, 4, 5, 10, 8 ] (3 porównania) • Startuję od elementu 3, szukam elementu najmniejszego, zamieniam go z elementem 3: [ 3, 4, 5, 10, 8 ]  [ 3, 4, 5, 10, 8 ] (2 porównania) • Startuję od elementu 4, szukam elementu najmniejszego, zamieniam go z elementem 4: [ 3, 4, 5, 10, 8 ]  [ 3, 4, 5, 8, 10 ] (1 porównanie) • Szukanie najmniejszego elementu – przez porównywanie wartości na aktualnie badanej pozycji z wartościami na kolejnych pozycjach; tu 10 porównań

  45. Algorytmy i dane Sortowanie (3) • Sortowanie przez wybór: dla N liczb, tablica T • Dla i równych od 1 do N-1 • Pomocnicza zmienna a = T[i], b=0 • Dla j równych od i+1 do N • Jeśli T[j]<a, to a=T[j], b=j • Jeśli b>0, to zamień T[i] z T [j] (potrzebna jeszcze jedna zmienna) • Liczba porównań (N-1) + (N-2) + … + 2 + 1 = N * ( N – 1 ) / 2 • Złożoność algorytmu sortowania przez wybór: O (N2)

  46. Algorytmy i dane Sortowanie (4) • Sortowanie przez wstawianie • Tworzę nową (pustą) tablicę [ ], 1 element danej tablicy umieszczam w nowej tablicy [ 4, 10, 5, 3, 8 ]; [ ]  [ 4 ]; • element 2 danej tablicy umieszczam w nowej tablicy przed lub za tamtejszym elementem [ 4, 10, 5, 3, 8 ]; [ 4 ]  [ 4, 10 ]; 1 por. • element 3 danej tablicy umieszczam w nowej tablicy przed, pomiędzy lub za tamtejszymi elementami [ 4, 10, 5, 3, 8 ]; [ 4, 10 ]  [ 4, 5, 10 ]; 2 por. • element 4 danej tablicy umieszczam w nowej tablicy przed, pomiędzy lub za tamtejszymi elementami [ 4, 10, 5, 3, 8 ]; [ 4, 5, 10 ]  [ 3, 4, 5, 10 ]; 1 por. • element 5 danej tablicy umieszczam w nowej tablicy przed, pomiędzy lub za tamtejszymi elementami [ 4, 10, 5, 3, 8 ]; [ 3, 4, 5, 10 ]  [ 3, 4, 5, 8, 10 ]; 4 por. • Kolejne elementy danej tablicy porównuję z elementami już umieszczonymi w nowej tablicy, tu 8 porównań, ale maksymalnie może być 10.

  47. Algorytmy i dane Sortowanie (5) • Sortowanie przez wstawianie: dla N liczb • Mamy tablicę T1, tworzymy pustą tablicę T2 [N elementów] • Wstawiamy 1 element T1 jako 1 element T2 • Dla i równych od 2 do N • j=1 • Pętla • Jeśli T1[i] < T2[j] , to • jako element T2[j] umieść T1[i], dalsze elementy T2 przesuń, wyjdź z pętli • W przeciwnym razie zwiększ j o 1 • Dopóki j < i • Jeśli j=i, umieść T1[i] jako T2[i]

  48. Algorytmy i dane Sortowanie (6) • Sortowanie przez wstawianie: dla N liczb: • Maksymalna liczba porównań 1 + 2 + … + (N-2) + (N-1) = N * ( N – 1 ) / 2 • Złożoność algorytmu sortowania przez wstawianie: O (N2) • Minimalna liczba porównań – dla każdego i od 2 do N tylko 1 porównanie, razem (N-1) - jeśli tablica wejściowa jest posortowana malejąco • Zamiast z tablicy wejściowej brać elementy od pierwszego do ostatniego, można brać od ostatniego do pierwszego (lub w dowolnym innym porządku) • W podanym ujęciu – potrzebne są dwie tablice (wejściowa i wyjściowa)

  49. Algorytmy i dane Sortowanie (7) • Sortowanie bąbelkowe • porównuję parami kolejne elementy, jeśli następny jest mniejszy od poprzedniego, zamieniam ich kolejność: • [ 4, 10, 5, 3, 8 ]  [ 4, 10, 5, 3, 8 ]  [ 4, 5, 10, 3, 8 ]  [ 4, 5, 3, 10, 8 ] •  [ 4, 5, 3, 8, 10 ] (4 porównania) • porównuję parami kolejne elementy bez ostatniego • [ 4, 5, 3, 8, 10 ]  [ 4, 3, 5, 8, 10 ] (3 porównania) • porównuję parami kolejne elementy bez 2 ostatnich • [ 4, 3, 5, 8, 10 ]  [ 3, 4, 5, 8, 10 ] (2 porównania) • porównuję parami kolejne elementy bez 3 ostatnich • [ 3, 4, 5, 8, 10 ]  [ 3, 4, 5, 8, 10 ] (1 porównanie) • 10 porównań

  50. Algorytmy i dane Sortowanie (8) • Sortowanie bąbelkowe: dla N liczb • Dla i równych od N do 2 • Dla j równych od 1 do i-1 • Jeśli T[j] > T[j+1] , to elementy zamieniamy miejscami • Liczba porównań (N-1) + (N-2) + … + 2 + 1 = N * ( N – 1 ) / 2 • Złożoność algorytmu sortowania bąbelkowego: O (N2) • Możliwe usprawnienia? • Jeśli przy danym i nie ma już żadnych zamian, sortowanie jest zakończone.

More Related