Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałDanuta Szewczyk Został zmieniony 9 lat temu
1
Algorytmika Skąd wziąć przepis na sukces (w programowaniu)? Czyli: dlaczego warto planować poszczególne etapy rozwiązywania zadania programistycznego?
2
Algorytmika
3
Składniki Garnki, miski, talerze, piekarnik,… Osoba przygotowująca PRZEPIS Efekt: potrawa Przykład z życia: proces przygotowania potrawy
4
Algorytmika Dane wejściowe oprogramowanie Komputer ALGORYTM Wynik proces numerycznego rozwiązywania zadania
5
Algorytmika Składniki Garnki, miski, piekarnik,… Osoba przygotowująca PRZEPIS Efekt: potrawa Przygotowanie potrawy a numeryczne rozwiązywanie zadania Dane wejściowe oprogramowanie Komputer ALGORYTM Wynik
6
Algorytmika 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). Definicje
7
Algorytmika IV w. p.n.e., Euklides: znajdowanie największego wspólnego dzielnika liczb naturalnych. Pomysł Euklidesa traktowany jest jako pierwszy algorytm Historia algorytmiki: algorytm Euklidesa (1)
8
Algorytmika Algorytm Euklidesa: największy wspólny dzielnik dwóch liczb. 1.Są dwie różne liczby: n 1 i n 2, od większej odejmujemy mniejszą, dostajemy n 3 2.Są dwie liczby n 3 i mniejsza spośród n 1 i n 2, od większej odejmujemy mniejszą, dostajemy n 4 3.… 4.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 n 1 i n 2 Historia algorytmiki: algorytm Euklidesa (2)
9
Algorytmika Algorytm Euklidesa: największy wspólny dzielnik 221 i 286 1.Mamy 221 i 286, różnica: 65 2.Mamy 221 i 65, różnica: 156 3.Mamy 156 i 65, różnica: 91 4.Mamy 91 i 65, różnica: 26 5.Mamy 65 i 26, różnica: 39 6.Mamy 39 i 26, różnica: 13 7.Mamy 26 i 13, różnica: 13 – NWD 221 i 286 Historia algorytmiki: algorytm Euklidesa (3)
10
Algorytmika 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ą Historia algorytmiki: Muhammed Alchwarizmi (łac. Algorismus)
11
Algorytmika 1801 r. Joseph Jacquard: krosno tkackie, wzór tkaniny sterowany był „dziurkowanymi kartami” (mechanizm rozpoznawał otwory, kierowanie pracą maszyny) Historia algorytmiki: XIX w. (1)
12
Algorytmika 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 Historia algorytmiki: XIX w. (2)
13
Algorytmika Ok.1840 - 70 r. Charles Babbage, pomysł „maszyny analitycznej”, wykonywanie algorytmów zapisanych w „programach” zakodowanych w dziurkowanych kartach. Nieukończona Historia algorytmiki: XIX w. (3)
14
Algorytmika 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 Historia algorytmiki: XIX w. (4)
15
Algorytmika 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 Historia algorytmiki: XIX w. (5)
16
Algorytmika 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 Historia algorytmiki: XIX i XX w.
17
Algorytmika 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 Historia algorytmiki: XIX i XX w.
18
Algorytmika 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 Historia algorytmiki: XX w.
19
Algorytmika
20
jak duża puszka? Jak duża papryka? Co to znaczy „garść”? Jak duża łyżka? Jakiego oleju? Ile soli? Ile pieprzu? Poziom szczegółowości (1)
21
Algorytmika W jaki sposób umyć? Małe kawałki? Podsmaż delikatnie? Odrobina oleju? Średniej wielkości? Pestki papryki też kroić? Poziom szczegółowości (2)
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. 1.Wprowadzamy zmienną suma i ją zerujemy 2.Przewertuj jednego po drugim wszystkich pracowników, zarobki każdego dodawaj do wartości zmiennej suma 3.Gdy przewertujesz wszystkich, przedstaw wartość zmiennej suma jako wynik
28
Algorytmika Krótkie algorytmy a długotrwałość procesów pracownicyzarobkiSuma (na wejściu = 0) Pracownik 120000 Pracownik 23000050000 Pracownik 31500065000 … Pracownik N250005435000 wynik 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) pracownicyzarobki Pracownik 120000 Pracownik 2 Pracownik 3-1000 …
33
Algorytmika Zadanie algorytmiczne a algorytm(5) Za odpowiednie traktowanie danych odpowiada algorytm. Musi on zidentyfikować dane nietypowe. pracownicyzarobki Pracownik 120000 Pracownik 2 Pracownik 3-1000 … 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 o Iteracja ograniczona (for) „wykonaj A dokładnie N razy” o Iteracja warunkowa (while, do – while) „wykonuj A aż do Q” lub „dopóki Q wykonuj A”, Q – warunek logiczny Ubijaj białka aż do spienienia. Ser należy zmielić trzykrotnie. 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. 1.Wprowadzamy zmienną suma i ją zerujemy 2.Przewertuj jednego po drugim wszystkich pracowników, zarobki każdego dodawaj do wartości zmiennej suma 3.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) 1.Wprowadź zmienną suma i ją wyzeruj; przejdź do pierwszej płacy z listy; 2.N-1 razy wykonaj: Dodaj aktualną płacę do zmiennej suma; Przejdź do następnej płacy; 3.Dodaj aktualną płacę do zmiennej suma; 4.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 1.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) 2.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) 3.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) 4.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 o 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 (N 2 )
46
Algorytmy i dane Sortowanie (4) Sortowanie przez wstawianie 1.Tworzę nową (pustą) tablicę [ ], 1 element danej tablicy umieszczam w nowej tablicy [ 4, 10, 5, 3, 8 ]; [ ] [ 4 ]; 2.element 2 danej tablicy umieszczam w nowej tablicy przed lub za tamtejszym elementem [ 4, 10, 5, 3, 8 ]; [ 4 ] [ 4, 10 ]; 1 por. 3.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. 4.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. 5.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 o 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 (N 2 ) 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 1.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) 2.porównuję parami kolejne elementy bez ostatniego [ 4, 5, 3, 8, 10 ] [ 4, 3, 5, 8, 10 ] (3 porównania) 3.porównuję parami kolejne elementy bez 2 ostatnich [ 4, 3, 5, 8, 10 ] [ 3, 4, 5, 8, 10 ] (2 porównania) 4.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 o 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 (N 2 ) Możliwe usprawnienia? Jeśli przy danym i nie ma już żadnych zamian, sortowanie jest zakończone.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.