Algorytmika
Download
1 / 50

Algorytmika - PowerPoint PPT Presentation


  • 107 Views
  • Uploaded on

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,…

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Algorytmika' - cardea


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Algorytmika

Algorytmika

Skąd wziąć przepis na sukces (w programowaniu)?

Czyli: dlaczego warto planować poszczególne etapy rozwiązywania zadania programistycznego?



Algorytmika2

Algorytmika

Przykład z życia: proces przygotowania potrawy

  • Składniki

  • Garnki, miski, talerze, piekarnik,…

  • Osoba przygotowująca

  • PRZEPIS

  • Efekt: potrawa


Algorytmika3

Algorytmika

proces numerycznego rozwiązywania zadania

  • Dane wejściowe

  • oprogramowanie

  • Komputer

  • ALGORYTM

  • Wynik


Algorytmika4

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


Algorytmika5

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


Algorytmika6

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


Algorytmika7

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


Algorytmika8

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


Algorytmika9

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ą


Algorytmika10

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)


Algorytmika11

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


Algorytmika12

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


Algorytmika13

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


Algorytmika14

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


Algorytmika15

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


Algorytmika16

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


Algorytmika17

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



Algorytmika19

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?


Algorytmika20

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ć?


Algorytmika21

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”)


Algorytmika22

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


Algorytmika23

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ć


Algorytmika24

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)


Algorytmika25

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)


Algorytmika26

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


Algorytmika27

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.


Algorytmika28

Algorytmika

Zadanie algorytmiczne a algorytm(1)


Algorytmika29

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.


Algorytmika30

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!


Algorytmika31

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)


Algorytmika32

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ę.


Algorytmika33

Algorytmika

Przykłady zadań algorytmicznych

Dane: poprawna sytuacja szachowa; wynik: ruch dający największą szansę na wygranie


Algorytmika34

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)


Algorytmy i dane

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ść.


  • Algorytmy i dane1

    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, …


    Algorytmy i dane2

    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.


    Algorytmy i dane3

    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.


    Algorytmy i dane4

    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?


    Algorytmy i dane5

    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)


  • Algorytmy i dane6

    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


    Algorytmy i dane7

    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, …


    Algorytmy i dane8

    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ń


    Algorytmy i dane9

    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)


  • Algorytmy i dane10

    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.


    Algorytmy i dane11

    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]


  • Algorytmy i dane12

    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)


    Algorytmy i dane13

    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ń


    Algorytmy i dane14

    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.