• Nie Znaleziono Wyników

Wykład 7 – Algorytmy

N/A
N/A
Protected

Academic year: 2021

Share "Wykład 7 – Algorytmy"

Copied!
197
0
0

Pełen tekst

(1)

Technologie Informacyjne

Wykład 7

Algorytmy.

Podstawowe konstrukcje algorytmiczne (przegląd, podział zadania, programowanie dynamiczne, rekurencja, . . . )

Wojciech Myszka Jakub Słowiński

Instytut Materiałoznawstwa i Mechaniki Technicznej Wydział Mechaniczny

(2)

Krótkie podsumowanie

Krótkie podsumowanie

Wiemy: 1 co to jest komputer 2

z jakich elementów jest skonstruowany.

3

co to jest procesor. . .

4

i jak działa

5

troszeczkę o tym, że komputery potrzebują programów

6

co to jest program

Nie bardzo wiemy:

1

skąd się bierze program

2

i czy na pewno jest niezbędny. . .

(3)

Krótkie podsumowanie

Krótkie podsumowanie

Wiemy: 1 co to jest komputer 2

z jakich elementów jest skonstruowany.

3

co to jest procesor. . .

4

i jak działa

5

troszeczkę o tym, że komputery potrzebują programów

6

co to jest program Nie bardzo wiemy:

1

skąd się bierze program

2

(4)

Krótkie podsumowanie

Krótkie podsumowanie

Wiemy: 1 co to jest komputer 2

z jakich elementów jest skonstruowany.

3

co to jest procesor. . .

4

i jak działa

5

troszeczkę o tym, że komputery potrzebują programów

6

co to jest program Nie bardzo wiemy:

1

skąd się bierze program

2

i czy na pewno jest niezbędny. . .

(5)

Krótkie podsumowanie

Krótkie podsumowanie

Wiemy: 1 co to jest komputer 2

z jakich elementów jest skonstruowany.

3

co to jest procesor. . .

4

i jak działa

5

troszeczkę o tym, że komputery potrzebują programów

6

co to jest program Nie bardzo wiemy:

1

skąd się bierze program

2

(6)

Krótkie podsumowanie

Krótkie podsumowanie

Wiemy: 1 co to jest komputer 2

z jakich elementów jest skonstruowany.

3

co to jest procesor. . .

4

i jak działa

5

troszeczkę o tym, że komputery potrzebują programów

6

co to jest program Nie bardzo wiemy:

1

skąd się bierze program

2

i czy na pewno jest niezbędny. . .

(7)

Krótkie podsumowanie

Krótkie podsumowanie

Wiemy: 1 co to jest komputer 2

z jakich elementów jest skonstruowany.

3

co to jest procesor. . .

4

i jak działa

5

troszeczkę o tym, że komputery potrzebują programów

6

co to jest program Nie bardzo wiemy:

1

skąd się bierze program

2

(8)

Krótkie podsumowanie

Krótkie podsumowanie

Wiemy: 1 co to jest komputer 2

z jakich elementów jest skonstruowany.

3

co to jest procesor. . .

4

i jak działa

5

troszeczkę o tym, że komputery potrzebują programów

6

co to jest program

Nie bardzo wiemy:

1

skąd się bierze program

2

i czy na pewno jest niezbędny. . .

(9)

Krótkie podsumowanie

Krótkie podsumowanie

Wiemy: 1 co to jest komputer 2

z jakich elementów jest skonstruowany.

3

co to jest procesor. . .

4

i jak działa

5

troszeczkę o tym, że komputery potrzebują programów

6

co to jest program

Nie bardzo wiemy:

1

skąd się bierze program

2

(10)

Krótkie podsumowanie

Krótkie podsumowanie

Wiemy: 1 co to jest komputer 2

z jakich elementów jest skonstruowany.

3

co to jest procesor. . .

4

i jak działa

5

troszeczkę o tym, że komputery potrzebują programów

6

co to jest program Nie bardzo wiemy:

1

skąd się bierze program

2

i czy na pewno jest niezbędny. . .

(11)

Krótkie podsumowanie

Krótkie podsumowanie

Wiemy: 1 co to jest komputer 2

z jakich elementów jest skonstruowany.

3

co to jest procesor. . .

4

i jak działa

5

troszeczkę o tym, że komputery potrzebują programów

6

co to jest program Nie bardzo wiemy:

1

skąd się bierze program

2

(12)

Krótkie podsumowanie

Krótkie podsumowanie

Wiemy: 1 co to jest komputer 2

z jakich elementów jest skonstruowany.

3

co to jest procesor. . .

4

i jak działa

5

troszeczkę o tym, że komputery potrzebują programów

6

co to jest program Nie bardzo wiemy:

1

skąd się bierze program

2

i czy na pewno jest niezbędny. . .

(13)

Jak powstaje program

Jak powstaje program

(14)

Jak powstaje program

Jak powstaje program

Tak opowiedział klient

(15)

Jak powstaje program

(16)

Jak powstaje program

Jak powstaje program

Tak opowiedział klient Tak zrozumiał kierownik projektu Tak zaprojektowali analitycy

(17)

Jak powstaje program

(18)

Jak powstaje program

Jak powstaje program

Tak zaprogramowali programiści Tak zobaczyli to beta-testerzy

(19)

Jak powstaje program

(20)

Jak powstaje program

Jak powstaje program

Tak wygląda dokumentacja

(21)

Jak powstaje program

(22)

Jak powstaje program

Jak powstaje program

Tak wygląda dokumentacja Tak wygląda po zainstalowaniu u klienta Za co klient zapłacił

(23)

Jak powstaje program

(24)

Jak powstaje program

Jak powstaje program

Tak wygląda wsparcie Tak wyglądają procedury awaryjne

(25)

Jak powstaje program

(26)

Jak powstaje program

Jak powstaje program

To był oczywiście żart. . .

Ale to jest jakoś tak:

Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie . . . (IMMT PWr) TI-W01 2014 7 / 1

(27)

Jak powstaje program

Jak powstaje program

To był oczywiście żart. . . Ale to jest jakoś tak:

Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie . . .

(28)

Jak powstaje program

Jak powstaje program

To był oczywiście żart. . . Ale to jest jakoś tak: Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie . . . (IMMT PWr) TI-W01 2014 7 / 1

(29)

Jak powstaje program

Jak powstaje program

To był oczywiście żart. . . Ale to jest jakoś tak: Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie . . .

(30)

Jak powstaje program

Jak powstaje program

To był oczywiście żart. . . Ale to jest jakoś tak: Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie . . . (IMMT PWr) TI-W01 2014 7 / 1

(31)

Jak powstaje program

Jak powstaje program

To był oczywiście żart. . . Ale to jest jakoś tak: Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie . . .

(32)

Jak powstaje program

Jak powstaje program

To był oczywiście żart. . . Ale to jest jakoś tak: Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie . . . (IMMT PWr) TI-W01 2014 7 / 1

(33)

Jak powstaje program

Jak powstaje program

To był oczywiście żart. . . Ale to jest jakoś tak: Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie . . .

(34)

Jak powstaje program

Jak powstaje program

To był oczywiście żart. . . Ale to jest jakoś tak: Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie . . . (IMMT PWr) TI-W01 2014 7 / 1

(35)

Jak powstaje program

Jak powstaje program

To był oczywiście żart. . . Ale to jest jakoś tak: Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie

(36)

Jak powstaje program

Jak powstaje program

To był oczywiście żart. . . Ale to jest jakoś tak: Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie . . . (IMMT PWr) TI-W01 2014 7 / 1

(37)

Co to sa algorytmy?

Algorytmy...

Codzienne czynności zwykle wykonuje się w określonym porządku, wiele z nich jest jedno- lub dwustronnie zależnych. Przykładem niech będzie sprzątanie: mycie okien, zmiana firanek, wytarcie mebli, odkurzenie i umycie podłogi. Czynności te dają wykonać się pojedynczo niezależnie, ale żeby sprzątanie miało sens należy wykonać je w pewnej (z góry) określonej kolejności. Podobnie rzecz ma się z operacjami, które wykonywać będzie, w ramach określonego programu, komputer. Zautomatyzowany, zapisany w określonym języku programowania

algorytm będzie programem, wykonywanym przez maszynę lub urządzenie (lub ich zestaw).

(38)

Co to sa algorytmy?

Algorytm

Słowo „algorytm” jest bardzo nowe (w pewnym sensie).

Pochodzi od nazwiska Abu Abdallah Muhammad ibn Musa al-Khwarizmi — perskiego matematyka (IX w.) i pierwotnie oznaczało (każde)

obliczenia w dziesiętnym systemie obliczeniowym.Algorytm to

jednoznaczny przepis przetworzenia w skończonym czasie pewnych danych wejściowych do pewnych danych wynikowych.

(Wikipedia)Czasami rezygnuje się z żądania skończoności. Czasami, jeżeli

algorytm się nie kończy — nazywamy gometodą obliczeniową.

(39)

Co to sa algorytmy?

Algorytm

Słowo „algorytm” jest bardzo nowe (w pewnym sensie).

Pochodzi od nazwiska Abu Abdallah Muhammad ibn Musa al-Khwarizmi — perskiego matematyka (IX w.) i pierwotnie oznaczało (każde)

obliczenia w dziesiętnym systemie obliczeniowym.

Algorytm to

jednoznaczny przepis przetworzenia w skończonym czasie pewnych danych wejściowych do pewnych danych wynikowych.

(Wikipedia)Czasami rezygnuje się z żądania skończoności. Czasami, jeżeli

(40)

Co to sa algorytmy?

Algorytm

Słowo „algorytm” jest bardzo nowe (w pewnym sensie).

Pochodzi od nazwiska Abu Abdallah Muhammad ibn Musa al-Khwarizmi — perskiego matematyka (IX w.) i pierwotnie oznaczało (każde)

obliczenia w dziesiętnym systemie obliczeniowym.Algorytm to

jednoznaczny przepis przetworzenia w skończonym czasie pewnych danych wejściowych do pewnych danych wynikowych.

(Wikipedia)

Czasami rezygnuje się z żądania skończoności. Czasami, jeżeli

algorytm się nie kończy — nazywamy gometodą obliczeniową.

(41)

Co to sa algorytmy?

Algorytm

Słowo „algorytm” jest bardzo nowe (w pewnym sensie).

Pochodzi od nazwiska Abu Abdallah Muhammad ibn Musa al-Khwarizmi — perskiego matematyka (IX w.) i pierwotnie oznaczało (każde)

obliczenia w dziesiętnym systemie obliczeniowym.Algorytm to

jednoznaczny przepis przetworzenia w skończonym czasie pewnych danych wejściowych do pewnych danych wynikowych.

(42)

Przepis kucharski

Algorytm I

Przepis kucharski

Składniki: 22 dag twardej czekolady półsłodkiej, 2 łyżki stołowe

wody,

1

4 filiżanki cukru pudru, 6 jajek rozdzielonych na żółtka i białka. . .

(43)

Przepis kucharski

Algorytm II

Przepis kucharski

Przepis:

„Włóż czekoladę z dwiema łyżkami stołowymi wody do garnka o podwójnym dnie. Kiedy czekolada się rozpuści, domieszaj cukier puder; dodaj po trochu masło. Odstaw. Ubijaj żółtka około 5 minut, aż staną się gęste i nabiorą koloru cytrynowego. Delikatnie dołóż czekoladę. Ponownie lekko podgrzej, aby rozpuścić czekoladę, jeśli to będzie konieczne. Domieszaj rum i wanilię. Ubijaj białka aż do spienienia. Ubijając dodaj 2 łyżki stołowe cukru i ubijaj dalej, aż

(44)

Przepis kucharski

Algorytm III

Przepis kucharski

utworzą się sztywne pagórki. Delikatnie połącz białka z masą czekoladowo-żółtkową.

Wlej do salaterek (oddzielnych naczyń), które będą podane na stół. Ochładzaj przez co najmniej 4 godziny. Wedle życzenia podawaj z bitą śmietaną. Wyjdzie z tego 6 do 8 porcji.”

(45)

Algorytm Euklidesa

Algorytm Euklidesa

Oto jedna z jego wersji algorytmu Euklidesa:

Dane są dwie dodatnie liczby całkowite m i n, należy znaleźć ich

największy wspólny dzielnik (NWD) tj. największą dodatnią liczbę

całkowitą, która dzieli całkowicie zarówno m jak i n.

1 [Znajdowanie reszty] Podzielm przez n i niech r oznacza resztę

z tego dzielenia. (Mamy 0 ≤ r < n.)

2 [Czy wyszło zero?] Jeśli r

= 0 zakończ algorytm; odpowiedzią jest n.

(46)

Algorytm Euklidesa

Algorytm Euklidesa

Oto jedna z jego wersji algorytmu Euklidesa:

Dane są dwie dodatnie liczby całkowite m i n, należy znaleźć ich

największy wspólny dzielnik (NWD) tj. największą dodatnią liczbę

całkowitą, która dzieli całkowicie zarówno m jak i n.

1 [Znajdowanie reszty] Podzielm przez n i niech r oznacza resztę

z tego dzielenia. (Mamy 0 ≤ r < n.)

2 [Czy wyszło zero?] Jeśli r

= 0 zakończ algorytm; odpowiedzią jest n.

3 [Upraszczanie] Wykonajm ← n, n ← r i wróć do kroku 1.

(47)

Algorytm Euklidesa

Algorytm Euklidesa

Oto jedna z jego wersji algorytmu Euklidesa:

Dane są dwie dodatnie liczby całkowite m i n, należy znaleźć ich

największy wspólny dzielnik (NWD) tj. największą dodatnią liczbę

całkowitą, która dzieli całkowicie zarówno m jak i n.

1 [Znajdowanie reszty] Podzielm przez n i niech r oznacza resztę

z tego dzielenia. (Mamy 0 ≤ r < n.)

2 [Czy wyszło zero?] Jeśli r

= 0 zakończ algorytm; odpowiedzią jest n.

(48)

Algorytm Euklidesa

Algorytm Euklidesa

Oto jedna z jego wersji algorytmu Euklidesa:

Dane są dwie dodatnie liczby całkowite m i n, należy znaleźć ich

największy wspólny dzielnik (NWD) tj. największą dodatnią liczbę

całkowitą, która dzieli całkowicie zarówno m jak i n.

1 [Znajdowanie reszty] Podzielm przez n i niech r oznacza resztę

z tego dzielenia. (Mamy 0 ≤ r < n.)

2 [Czy wyszło zero?] Jeśli r

= 0 zakończ algorytm; odpowiedzią jest n.

3 [Upraszczanie] Wykonajm ← n, n ← r i wróć do kroku 1.

(49)

Algorytm Euklidesa

Algorytm Euklidesa

Oto jedna z jego wersji algorytmu Euklidesa:

Dane są dwie dodatnie liczby całkowite m i n, należy znaleźć ich

największy wspólny dzielnik (NWD) tj. największą dodatnią liczbę

całkowitą, która dzieli całkowicie zarówno m jak i n.

1 [Znajdowanie reszty] Podzielm przez n i niech r oznacza resztę

z tego dzielenia. (Mamy 0 ≤ r < n.)

2 [Czy wyszło zero?] Jeśli r

= 0 zakończ algorytm; odpowiedzią jest n.

(50)

Algorytm Euklidesa

Dzielenie z resztą

Dygresja 5 3 = 12 3 =1.6666(6) = 1.6667 = 1 reszta 2 bo 1 × 3+ 2 = 5 (IMMT PWr) TI-W01 2014 14 / 1

(51)

Algorytm Euklidesa

Dzielenie z resztą

Dygresja 5 3 =1 2 3 = 1.6666(6) = 1.6667 = 1 reszta 2 bo 1 × 3+ 2 = 5

(52)

Algorytm Euklidesa

Dzielenie z resztą

Dygresja 5 3 =1 2 3 =1.6666(6) = 1.6667 = 1 reszta 2 bo 1 × 3+ 2 = 5 (IMMT PWr) TI-W01 2014 14 / 1

(53)

Algorytm Euklidesa

Dzielenie z resztą

Dygresja 5 3 =1 2 3 =1.6666(6) = 1.6667 = 1 reszta 2 bo 1 × 3+ 2 = 5

(54)

Algorytm Euklidesa

Dzielenie z resztą

Dygresja 5 3 =1 2 3 =1.6666(6) = 1.6667 = 1 reszta 2 bo 1 × 3+ 2 = 5 (IMMT PWr) TI-W01 2014 14 / 1

(55)

Algorytm Euklidesa

Dzielenie z resztą

Dygresja 5 3 =1 2 3 =1.6666(6) = 1.6667 = 1 reszta 2 bo 1 × 3+ 2 = 5

(56)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć do kroku 1.

(57)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 24/44 = 0 r 24 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć do kroku 1.

(58)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ

algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć do kroku 1.

(59)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć

(60)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć

do kroku 1.

(61)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 44/24 = 1 r 20 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć do kroku 1.

(62)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ

algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć do kroku 1.

(63)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć

(64)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć

do kroku 1.

(65)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 24/20 = 1 r 4 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć do kroku 1.

(66)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ

algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć do kroku 1.

(67)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć

(68)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć

do kroku 1.

(69)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 20/4 = 5 r 0 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć do kroku 1.

(70)

Algorytm Euklidesa

Algorytm Euklidesa

Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1

[Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 ≤ r < n.)

2

[Czy wyszło zero?] Jeśli r = 0 zakończ

algorytm; odpowiedzią jest n.

3

[Upraszczanie] Wykonaj m ← n, n ← r i wróć do kroku 1.

(71)

Cechy algorytmu

Skończoność

Po pierwsze powinien być skończony; oznacza to, że po skończonej (być może bardzo dużej) liczbie kroków algorytm się zatrzyma.

1

Pytanie pomocnicze: Co gwarantuje, że algorytm Euklidesa zakończy się w skończonej liczbie kroków?

Procedura, która ma wszystkie cechy algorytmu poza skończonością nazywana jest metodą obliczeniową. Podaj przykłady metod

(72)

Cechy algorytmu

Cechy algorytmu II

Dobre zdefiniowanie

Po drugie powinien być „dobrze zdefiniowany”. Każdy krok algorytmu musi być opisany precyzyjnie. Wszystkie możliwe przypadki powinny być uwzględnione, a podejmowane akcje dobrze opisane.2 Oczywiście język naturalny nie jest wystarczająco precyzyjny — może to prowadzić do nieporozumień. z tego powodu używa się bardziej formalnych sposobów zapisu algorytmów, aż po języki programowania. . .

2

Zwracam też uwagę, że algorytmy kucharskie nie są odpowiednio precyzyjne: co to znaczy „lekko podgrzej”?

(73)

Cechy algorytmu

Cechy algorytmu III

Dane wejściowe

Po trzecie powinien mieć precyzyjnie zdefiniowane dane wejściowe. Pewne algorytmy mogą nie mieć danych wejściowych (mieć zero danych wejściowych). Dane wejściowe to wartości, które muszą być zdefiniowane zanim rozpocznie się wykonanie algorytmu.

(74)

Cechy algorytmu

Cechy algorytmu IV

Dane wyjściowe

Po czwarte zdefiniowane dane wyjściowe. Daną wyjściową algorytmu Euklidesa jest liczna n która jest naprawdę największym wspólnym dzielnikiem danych wejściowych. Osobną sprawą jest pokazanie skąd wynika, że wynik algorytmu Euklidesa jest rzeczywiście NWD liczb m i n.

(75)

Cechy algorytmu

Cechy algorytmu V

Efektywność

Po piąte algorytm powinien być określony efektywnie to znaczy jego operacje powinny być wystarczająco proste by można je (teoretycznie?) wykonać w skończonym czasie z wykorzystaniem kartki i ołówka.

(76)

Sposoby zapisu algorytmów

Zapis algorytmu

1 Słowami.

Należy używać prostych zdań (raczej równoważników zdań) w trybie rozkazującym.

2 Schematy blokowe. O tym za chwilę. . . 3 Tablice decyzyjne. O tym później. . . 4 Pseudojęzyk

— rodzaj formalnego zapisu podobny do. . .

5 Język programowania. Następny semestr??? Wcale!!?

(77)

Sposoby zapisu algorytmów

Zapis algorytmu

1 Słowami.

Należy używać prostych zdań (raczej równoważników zdań) w trybie rozkazującym.

2 Schematy blokowe. O tym za chwilę. . .

3 Tablice decyzyjne. O tym później. . . 4 Pseudojęzyk

— rodzaj formalnego zapisu podobny do. . .

(78)

Sposoby zapisu algorytmów

Zapis algorytmu

1 Słowami.

Należy używać prostych zdań (raczej równoważników zdań) w trybie rozkazującym.

2 Schematy blokowe. O tym za chwilę. . . 3 Tablice decyzyjne. O tym później. . .

4 Pseudojęzyk

— rodzaj formalnego zapisu podobny do. . .

5 Język programowania. Następny semestr??? Wcale!!?

(79)

Sposoby zapisu algorytmów

Zapis algorytmu

1 Słowami.

Należy używać prostych zdań (raczej równoważników zdań) w trybie rozkazującym.

2 Schematy blokowe. O tym za chwilę. . . 3 Tablice decyzyjne. O tym później. . . 4 Pseudojęzyk

— rodzaj formalnego zapisu podobny do. . .

(80)

Sposoby zapisu algorytmów

Zapis algorytmu

1 Słowami.

Należy używać prostych zdań (raczej równoważników zdań) w trybie rozkazującym.

2 Schematy blokowe. O tym za chwilę. . . 3 Tablice decyzyjne. O tym później. . . 4 Pseudojęzyk

— rodzaj formalnego zapisu podobny do. . .

5 Język programowania. Następny semestr??? Wcale!!?

(81)

Sposoby zapisu algorytmów

Zapis algorytmu

Schemat blokowy

Schemat blokowy (ang. block diagram, flowchart) — diagram, na którym

procedura, system albo program komputerowy, są reprezentowane przez opisane figury geometryczne połączone liniami zgodnie z kolejnością wykonywania czynności wynikających z przyjętego algorytmu rozwiązania zadania.

Schemat blokowy pozwala dostrzec istotne etapy algorytmu i logiczne zależności między nimi.

Zależnie od przedstawianego zagadnienia stosowane są różne zestawy figur geometrycznych zwanych blokami, których kształty reprezentują

(82)

Sposoby zapisu algorytmów Symbole używane na schematach blokowych

Schemat blokowy

Blok graniczny

Blok graniczny oznacza on

początek, koniec, przerwanie lub wstrzymanie wykonywania

działania, np. blok startu programu.

(83)

Sposoby zapisu algorytmów Symbole używane na schematach blokowych

Schemat blokowy

Blok wejścia-wyjści

Blok wejścia-wyjścia przedstawia

czynność wprowadzania danych do programu i przyporządkowania ich zmiennym dla późniejszego

wykorzystania jak i wyprowadzenia wyników obliczeń, np. czytaj z, pisz

(84)

Sposoby zapisu algorytmów Symbole używane na schematach blokowych

Schemat blokowy

Blok obliczeniowy

Blok obliczeniowy oznacza

wykonanie operacji w efekcie, której zmienią się wartości, postać lub miejsce zapisu danych, np. z = z +

1.

(85)

Sposoby zapisu algorytmów Symbole używane na schematach blokowych

Schemat blokowy

Blok decyzyjny

Blok decyzyjnyprzedstawia wybór

jednego z dwóch wariantów wykonywania programu na podstawie sprawdzenia warunku wpisanego w ów blok, np.

(86)

Sposoby zapisu algorytmów Symbole używane na schematach blokowych

Schemat blokowy

Blok wywołania podprogramu

Blok wywołania podprogramu

oznacza zmianę wykonywanej czynności na skutek wywołania podprogramu, np. MAX(x,y,z)

(87)

Sposoby zapisu algorytmów Symbole używane na schematach blokowych

Schemat blokowy

Blok fragmentu

Blok fragmentuprzedstawia część

programu zdefiniowanego odrębnie, np. sortowanie.

(88)

Sposoby zapisu algorytmów Symbole używane na schematach blokowych

Schemat blokowy

Blok komentarza

Blok komentarzapozwala

wprowadzać komentarze

wyjaśniające poszczególne części schematu co ułatwia zrozumienie go czytającemu, np. wprowadzenie danych.

(89)

Sposoby zapisu algorytmów Symbole używane na schematach blokowych

Schemat blokowy

Łącznik wewnętrzny

Łącznik wewnętrzny służy do

łączenia odrębnych części schematu znajdujących się na tej samej stronie, powiązane ze sobą łączniki oznaczone są tym samym napisem, np. A1, 7.

(90)

Sposoby zapisu algorytmów Symbole używane na schematach blokowych

Schemat blokowy

Łącznik zewnętrzny

Łącznik zewnętrznysłuży do

łączenia odrębnych części schematu znajdujących się na odrębnych stronach, powinien być opisany jak łącznik wewnętrzny, poza tym powinien zawierać numer strony, do której się odwołuje, np. 4.3, 2,B2.

(91)

Tablice decyzyjne

Tablice decyzyjne

Alternatywa dla schematu blokowego.

Bardzo wygodne w przypadku opisu problemów z ogromną ilością decyzji.

Nieźle nadaje się do opisu problemów „z życia wziętych”. Średnie zastosowanie w przypadku problemów obliczeniowych. Dziś już nieco zapomniane.

(92)

Tablice decyzyjne

Tablice decyzyjne c.d

Pomysł tak, gdzieś z lat 50 (zeszłego wieku)!

Tablica decyzyjna to mieszanka warunków i decyzji które należy podejmować w zależności od ich spełnienia.

(93)

Tablice decyzyjne

Zakup samochodu

cena nadmierna cena OK cena niedoszacowana Samochód spełnia

wszystkie wymagania

Targuj się; jak się nie uda— wróć następ-nego dnia i targuj się; kup nawet jak nie uda się zbić ceny

Targuj się; kup nieza-leżnie od wyniku tar-gów

kup

Samochód nie speł-nia wszystkich wyma-gań ale stan i wy-posażenie są akcep-towalne

Rezygnuj Targuj się; kup jeżeli zbiłeś cenę

Targuj się; kup nie-zależnie od wyników targów

Samochód nie speł-nia wymagań

Rezygnuj Rezygnuj Targuj się o dodatki; kup jeśli cena dodat-ków jest rozsądna

(94)

Tablice decyzyjne

Zakup samochodu

cena nadmierna cena OK cena niedoszacowana Samochód spełnia

wszystkie wymagania

Targuj się; jak się nie uda— wróć następ-nego dnia i targuj się; kup nawet jak nie uda się zbić ceny

Targuj się; kup nieza-leżnie od wyniku tar-gów

kup

Samochód nie speł-nia wszystkich wyma-gań ale stan i wy-posażenie są akcep-towalne

Rezygnuj Targuj się; kup jeżeli zbiłeś cenę

Targuj się; kup nie-zależnie od wyników targów

Samochód nie speł-nia wymagań

Rezygnuj Rezygnuj Targuj się o dodatki; kup jeśli cena dodat-ków jest rozsądna

(95)

Tablice decyzyjne

Zakup samochodu

cena nadmierna cena OK cena niedoszacowana Samochód spełnia

wszystkie wymagania

Targuj się; jak się nie uda— wróć następ-nego dnia i targuj się; kup nawet jak nie uda się zbić ceny

Targuj się; kup nieza-leżnie od wyniku tar-gów

kup

Samochód nie speł-nia wszystkich wyma-gań ale stan i wy-posażenie są akcep-towalne

Rezygnuj Targuj się; kup jeżeli zbiłeś cenę

Targuj się; kup nie-zależnie od wyników targów

Samochód nie speł-nia wymagań

Rezygnuj Rezygnuj Targuj się o dodatki; kup jeśli cena dodat-ków jest rozsądna

(96)

Tablice decyzyjne

Zakup samochodu

cena nadmierna cena OK cena niedoszacowana Samochód spełnia

wszystkie wymagania

Targuj się; jak się nie uda— wróć następ-nego dnia i targuj się; kup nawet jak nie uda się zbić ceny

Targuj się; kup nieza-leżnie od wyniku tar-gów

kup

Samochód nie speł-nia wszystkich wyma-gań ale stan i wy-posażenie są akcep-towalne

Rezygnuj Targuj się; kup jeżeli zbiłeś cenę

Targuj się; kup nie-zależnie od wyników targów

Samochód nie speł-nia wymagań

Rezygnuj Rezygnuj Targuj się o dodatki; kup jeśli cena dodat-ków jest rozsądna

(97)

Tablice decyzyjne

Zakup samochodu

cena nadmierna cena OK cena niedoszacowana Samochód spełnia

wszystkie wymagania

Targuj się; jak się nie uda— wróć następ-nego dnia i targuj się; kup nawet jak nie uda się zbić ceny

Targuj się; kup nieza-leżnie od wyniku tar-gów

kup

Samochód nie speł-nia wszystkich wyma-gań ale stan i wy-posażenie są akcep-towalne

Rezygnuj

Targuj się; kup jeżeli zbiłeś cenę

Targuj się; kup nie-zależnie od wyników targów

Samochód nie speł-nia wymagań

Rezygnuj Rezygnuj Targuj się o dodatki; kup jeśli cena dodat-ków jest rozsądna

(98)

Tablice decyzyjne

Zakup samochodu

cena nadmierna cena OK cena niedoszacowana Samochód spełnia

wszystkie wymagania

Targuj się; jak się nie uda— wróć następ-nego dnia i targuj się; kup nawet jak nie uda się zbić ceny

Targuj się; kup nieza-leżnie od wyniku tar-gów

kup

Samochód nie speł-nia wszystkich wyma-gań ale stan i wy-posażenie są akcep-towalne

Rezygnuj Targuj się; kup jeżeli zbiłeś cenę

Targuj się; kup nie-zależnie od wyników targów

Samochód nie speł-nia wymagań

Rezygnuj Rezygnuj Targuj się o dodatki; kup jeśli cena dodat-ków jest rozsądna

(99)

Tablice decyzyjne

Zakup samochodu

cena nadmierna cena OK cena niedoszacowana Samochód spełnia

wszystkie wymagania

Targuj się; jak się nie uda— wróć następ-nego dnia i targuj się; kup nawet jak nie uda się zbić ceny

Targuj się; kup nieza-leżnie od wyniku tar-gów

kup

Samochód nie speł-nia wszystkich wyma-gań ale stan i wy-posażenie są akcep-towalne

Rezygnuj Targuj się; kup jeżeli zbiłeś cenę

Targuj się; kup nie-zależnie od wyników targów

Samochód nie speł-nia wymagań

Rezygnuj Rezygnuj Targuj się o dodatki; kup jeśli cena dodat-ków jest rozsądna

(100)

Tablice decyzyjne

Zakup samochodu

cena nadmierna cena OK cena niedoszacowana Samochód spełnia

wszystkie wymagania

Targuj się; jak się nie uda— wróć następ-nego dnia i targuj się; kup nawet jak nie uda się zbić ceny

Targuj się; kup nieza-leżnie od wyniku tar-gów

kup

Samochód nie speł-nia wszystkich wyma-gań ale stan i wy-posażenie są akcep-towalne

Rezygnuj Targuj się; kup jeżeli zbiłeś cenę

Targuj się; kup nie-zależnie od wyników targów

Samochód nie speł-nia wymagań

Rezygnuj

Rezygnuj Targuj się o dodatki; kup jeśli cena dodat-ków jest rozsądna

(101)

Tablice decyzyjne

Zakup samochodu

cena nadmierna cena OK cena niedoszacowana Samochód spełnia

wszystkie wymagania

Targuj się; jak się nie uda— wróć następ-nego dnia i targuj się; kup nawet jak nie uda się zbić ceny

Targuj się; kup nieza-leżnie od wyniku tar-gów

kup

Samochód nie speł-nia wszystkich wyma-gań ale stan i wy-posażenie są akcep-towalne

Rezygnuj Targuj się; kup jeżeli zbiłeś cenę

Targuj się; kup nie-zależnie od wyników targów

Samochód nie speł-nia wymagań

Rezygnuj Rezygnuj

Targuj się o dodatki; kup jeśli cena dodat-ków jest rozsądna

(102)

Tablice decyzyjne

Zakup samochodu

cena nadmierna cena OK cena niedoszacowana Samochód spełnia

wszystkie wymagania

Targuj się; jak się nie uda— wróć następ-nego dnia i targuj się; kup nawet jak nie uda się zbić ceny

Targuj się; kup nieza-leżnie od wyniku tar-gów

kup

Samochód nie speł-nia wszystkich wyma-gań ale stan i wy-posażenie są akcep-towalne

Rezygnuj Targuj się; kup jeżeli zbiłeś cenę

Targuj się; kup nie-zależnie od wyników targów

Samochód nie speł-nia wymagań

Rezygnuj Rezygnuj Targuj się o dodatki; kup jeśli cena dodat-ków jest rozsądna

(103)

Tablice decyzyjne

Wkładanie palta

R1 R2 R3

C1 Pada T T N

C2 Zimno T N T

A1 Włóż ocieplany płaszcz przeciwdeszczowy X

A2 Włóż zwykły płaszcz przeciwdeszczowy X

(104)

Tablice decyzyjne

Wkładanie palta c.d.

W tabeli pominęliśmy warunek: Pada N

Zimno N

nie wymaga on żadnej specjalnej akcji, choć można by go dodać definiując akcję: „Nie wkładaj żadnego płaszcza”.

(105)

Tablice decyzyjne

Przykład: sklepik

Kolejny przykład to tablica decyzyjna opisująca działania związane z przyjęciem i realizacją zamówienia.

Tablica uwzględnia też politykę firmy, którą można opisać tak:

1

Firma obsługuje tylko zarejestrowanych klientów.

2

(106)

Tablice decyzyjne

Sklepik c.d.

C1 Towar na liście T N — T

C2 Klient zarejestrowany T — N T

C3 Wystarczający zapas towaru T — — N

A1 Zarezerwuj towar X

A2 Zarejestruj transakcję X

A3 Zapisz zamówienie na liście do realizacji X

A4 Wyślij towar X

A5 Odrzuć transakcję X X

(107)

Struktury sterujące

Struktury sterujące

Podczas realizacji algorytmu steruje się kolejnością poszczególnych jego etapów. Układ instrukcji, które są temu pomocne nazywa się strukturami sterującymi. Stosuje się:

bezpośrednie następstwo - „a potem”, „następnie”; wybór warunkowy - ”jeśli A to B”;

iteracja

ograniczona - zrób coś kreśloną liczbę razy

warunkowa - jeśli spełniony jest warunek, wówczas wykonuj

(108)

Struktury sterujące Skoki

Przekazanie sterowania

Skok bezwarunkowy ma postać przejdź do „G” („G" to określone miejsce programu — algorytmu).

Skok warunkowy przejdź do „G” jeżeli spełniony jest jakiś warunek. Duża liczba skoków (do przodu, do tyłu) zmniejsza czytelność algorytmu. Skoki powodują również problemy techniczne: czy można „wyskoczyć” ze środka pętli? Czy można do środka pętli wskoczyć?

(109)

Struktury sterujące Podprogramy

Podprogramy

Podprogram— wyodrębniony zestaw instrukcji (osobny algorytm)

realizujący pewne „zamknięte dzieło”: ma dobrze

3

zdefiniowany zestaw danych (parametrów) wejściowych, zestaw danych wyjściowych i relację (zależność) pomiędzy nimi.

Oszczędność kodu (ta sama czynność wykonywana kilkakrotnie w różnych miejscach programu).

Przejrzystość kodu („duży” problem dzielimy na mniejsze, dobrze zdefiniowane fragmenty).

(110)

Dane Zmienna

Zmienna

Rodzaj pudełka do którego można coś włożyć, wyjąć. (Tak jak pokój hotelowy.) Zmienna zazwyczaj ma jakąś nazwę (przez którą się do niej odwołujemy). Wartość zmiennej (zawartość pokoju hotelowego) zmienia się w razie potrzeb.

W algorytmach używamy zmiennych do przechowywania (pamiętania) różnych wartości. Zakładamy wówczas, że to co tam wstawimy nie ulega zmianie (zniszczeniu) w sposób samorzutny.

Fakt przypisania wartości do zmiennej zaznaczamy w algorytmach w bardzo różny sposób. Najprostszy będzie taki: X = 5, X := X + 1 czy X ← A+ B .

(111)

Dane Wektor

Wektor, tablica I

Zestaw wartości w których wprowadziliśmy rodzaj uporządkowania (dyskutując na temat wyszukiwania wartości maksymalnej mówiliśmy „weźmy pierwszą wartość” — albo jakoś tak). Jeżeli szereg zmiennych tego samego typu ustawimy jedną za drugą (i zaczniemy się do nich odwoływać przez numer: pierwsza, druga, . . . ) — mamy do czynienia

(112)

Dane Wektor

Wektor, tablica II

z wektorem (zwanym czasami tablicą jednowymiarową). Jest to pewna analogia do piętra w hotelu: jest tam szereg pokoi.

Nazwę przypisujemy całemu wektorowi, do poszczególnych jego elementów będziemy odwoływać się przez numer, co zapisujemy

najczęściej jakoś tak: V (I ) (zawartość I —tej komórki wektora V ) albo tak V[J ]. I (J ) nazywany bywa indeksem wektora.

V(1) V(2) V(3) V(4) V(5)

(113)

Dane Wektor

Wektor, tablica III

Analogiczny zapis matematyczny: V1 V2 V3 V4 V5

(114)

Dane Tablica

Tablica (wielowymiarowa) I

Struktura grupująca dane w sposób bardziej złożony.

Czasami mamy potrzebę grupowania danych w struktury bardziej złożone niż wektory. Struktura numerowana za pomocą dwu indeksów nazywana bywa tabelą.

Nasuwa się tu analogia do całego hotelu: pierwszym indeksem jest numer piętra drugim — numer pokoju na piętrze. My mówić będziemy o „wierszach” (poziome wektory) lub kolumnach (pionowe) tablicy.

Odwołanie do elementu tabeli zapisywane bywa tak: W (I , J ) albo W [I , J ] lub rzadziej jako W [I ][J ].

(115)

Dane Tablica

Tablica (wielowymiarowa) II

W najprostszych sytuacjach tablice maja wszystkie wiersze (kolumny) jednakowej długości. Możliwe są jednak i bardziej ogólne przypadki.

Zapis matematyczny: v1,1 v1,2 v1,3 v2,1 v2,2 v2,3 v3,1 v3,2 v3,3 v4,1 v4,2 v4,3 Zapis „algorytmiczny”: V(1, 1) V(1, 2) V(1, 3) V(2, 1) V(2, 2) V(2, 3) V(3, 1) V(3, 2) V(3, 3) V(4, 1) V(4, 2) V(4, 3)

(116)

Dane Kolejka

Kolejka

Struktura bardzo podobna do wektora. Dane dostarczane są do jednego „końca”. Do odbioru danych służy drugi „koniec”.

(117)

Dane Stos

Stos

Struktura podobna do wektora.

Dane dostarczane są do jednego „końca”. Ten sam „koniec” służy do ich odbioru.

(118)

Dane Drzewo

Drzewo albo hierarchia

Struktura z porządkiem.

Wyróżnia się specjalny obiekt będący „początkiem” całej struktury:

korzeń.

Inne elementy to „następniki” albo potomstwo.

Każdy obiekt może mieć kilku równoważnych potomków. Każdy potomek to węzeł drzewa.

Obiekty, które nie mają potomków to liście.

Gałąź to droga od korzenia do liścia.

(119)

Dane Drzewo

Drzewo

root left right child a child

(120)

Dane Inne

Inne struktury danych

Listy (pewne podobieństwo do wektorów czy tablic). Bazy danych (pewne podobieństwo do tablic). Grafy (pewne podobieństwo do drzew).

(121)

Upraszczanie danych

Upraszczanie danych

Komputery są coraz szybsze i sprawniejsze.

Na potrzeby rozważań naukowych — potrzebne są modele uogólniające i jak najprostsze. . .

(122)

Upraszczanie danych Zmienne i tablice

Upraszczanie danych

Zmienne i wektory — bardzo łatwo dają się „zlinearyzować”

Tablice dwu (ale i wielowymiarowe) stosunkowo łatwo można zapisać w taki sposób: trzeba się tylko umówić czy zapisujemy dane wierszami czy

kolumnami Przykład 11 12 13 21 22 23 31 32 33 41 42 43

może być zapisane tak: 11; 12; 13 * 21; 22; 23 * 31; 32; 33 * 41; 42; 43 * albo tak: 11; 21; 31; 41 * 12; 22; 32; 42 * 13; 23; 33; 43 *

albo tak: {{11, 21, 31, 41}, {12, 22, 32, 42}, {13, 23, 33, 43}} czyli jako lista!

(123)

Upraszczanie danych Zmienne i tablice

Upraszczanie danych

Zmienne i wektory — bardzo łatwo dają się „zlinearyzować”

Tablice dwu (ale i wielowymiarowe) stosunkowo łatwo można zapisać w taki sposób: trzeba się tylko umówić czy zapisujemy dane wierszami czy

kolumnami Przykład 11 12 13 21 22 23 31 32 33 41 42 43

może być zapisane tak: 11; 12; 13 * 21; 22; 23 * 31; 32; 33 * 41; 42; 43 * albo tak: 11; 21; 31; 41 * 12; 22; 32; 42 * 13; 23; 33; 43 *

(124)

Upraszczanie danych Zmienne i tablice

Upraszczanie danych

Zmienne i wektory — bardzo łatwo dają się „zlinearyzować”

Tablice dwu (ale i wielowymiarowe) stosunkowo łatwo można zapisać w taki sposób: trzeba się tylko umówić czy zapisujemy dane wierszami czy

kolumnami Przykład 11 12 13 21 22 23 31 32 33 41 42 43

może być zapisane tak: 11; 12; 13 * 21; 22; 23 * 31; 32; 33 * 41; 42; 43 *

albo tak: 11; 21; 31; 41 * 12; 22; 32; 42 * 13; 23; 33; 43 *

albo tak: {{11, 21, 31, 41}, {12, 22, 32, 42}, {13, 23, 33, 43}} czyli jako lista!

(125)

Upraszczanie danych Zmienne i tablice

Upraszczanie danych

Zmienne i wektory — bardzo łatwo dają się „zlinearyzować”

Tablice dwu (ale i wielowymiarowe) stosunkowo łatwo można zapisać w taki sposób: trzeba się tylko umówić czy zapisujemy dane wierszami czy

kolumnami Przykład 11 12 13 21 22 23 31 32 33 41 42 43

może być zapisane tak: 11; 12; 13 * 21; 22; 23 * 31; 32; 33 * 41; 42; 43 * albo tak: 11; 21; 31; 41 * 12; 22; 32; 42 * 13; 23; 33; 43 *

(126)

Upraszczanie danych Zmienne i tablice

Upraszczanie danych

Zmienne i wektory — bardzo łatwo dają się „zlinearyzować”

Tablice dwu (ale i wielowymiarowe) stosunkowo łatwo można zapisać w taki sposób: trzeba się tylko umówić czy zapisujemy dane wierszami czy

kolumnami Przykład 11 12 13 21 22 23 31 32 33 41 42 43

może być zapisane tak: 11; 12; 13 * 21; 22; 23 * 31; 32; 33 * 41; 42; 43 * albo tak: 11; 21; 31; 41 * 12; 22; 32; 42 * 13; 23; 33; 43 *

albo tak: {{11, 21, 31, 41}, {12, 22, 32, 42}, {13, 23, 33, 43}} czyli jako lista!

(127)

Upraszczanie danych Zmienne i tablice

Upraszczanie danych

Podobnie będzie i ze stosem i z kolejką

Baza danych — to właściwie tak bardziej rozbudowana tablica; ale nie znaczy że będzie łatwo. . .

Co z drzewem? T V Q R S G W L

(128)

Upraszczanie danych Drzewa

Upraszczanie danych

T V Q R M N S G W P L

Pokazane drzewo można próbować zapisać tak: T ** V; G ** Q; R; S; W; L ** M; N; P**

(gwiazdki oznaczają tu koniec kolejnych „poziomów” drzewa). Ale jedno co można odtworzyć to... T V Q R M N S G W P L (IMMT PWr) TI-W01 2014 56 / 1

(129)

Upraszczanie danych Drzewa

Upraszczanie danych

T V Q R M N S G W P L

Pokazane drzewo można próbować zapisać tak: T ** V; G ** Q; R; S; W; L ** M; N; P**

(gwiazdki oznaczają tu koniec kolejnych „poziomów” drzewa). Ale jedno co można odtworzyć to... T V Q R M N S G W P L

(130)

Upraszczanie danych Drzewa

Upraszczanie danych

T V Q R M N S G W P L

Jeżeli jednak trochę zapis skomplikować to można uzyskać coś więcej:

(T) (V; G) (Q; R; S) (W; L) () (M; N) () (P) () powyższy zapis jest bardzo zwarty, ale też trochę skomplikowany: nawiasy grupują tylko węzły będące potomkami tego samego węzła. Poziomy drzewa nie są zaznaczane w żaden specjalny sposób i muszą być wyliczane.

Uwaga:jest to zapis listowy!

(131)

Upraszczanie danych Teza

Upraszczanie danych — teza

Przyjmujemy, że każdą strukturę danych można zapisać w postaci liniowej, na przykład na odpowiednio długiej „taśmie” złożonej z „krateczek” w których zapisane są pojedyncze dane.

(132)

Rekurencja Definicje

Definicje

Za wikipedią

Rekursja albo rekurencja (ang. recursion, z łac. recurrere, przybiec

z powrotem) to w logice, programowaniu i w matematyce odwoływanie się (np. funkcji lub definicji) do samej siebie.

(133)

Rekurencja Przykład

Przykład

Silnia Wersja klasyczna 0! = 1 n! =Qn i=1i albo n! = 1 × 2 × 3 × · · · × n Wersja inna 0! = 1 n! = n × (n − 1)!

(134)

Rekurencja Przykład

Przykład

Silnia Wersja klasyczna 0! = 1 n! =Qn i=1i albo n! = 1 × 2 × 3 × · · · × n Wersja inna 0! = 1 n! = n × (n − 1)! (IMMT PWr) TI-W01 2014 60 / 1

(135)

Rekurencja Przykład

Przykład

Kilka liczb In[1]:= 10! Out[1]= 3628800 In[3]:= 20! Out[3]= 2432902008176640000 In[4]:= 30! Out[4]= 265252859812191058636308480000000 In[5]:= 40! Out[5]= 815915283247897734345611269596115894272000000000

(136)

Rekurencja Schemat blokowy

Silnia

„Schematy blokowe”

Wersja klasyczna

1

Jeżeli n = 0, silnia równa się 1; koniec algorytmu.

2 silnia ← 1 3

Powtarzaj dla i zmieniającego się od 1 do n silnia= silnia × i

4

Koniec algorytmu.

Wersja rekurencyjna

1

Funkcja Silnia (parametrem jest n)

2

Jeżeli n = 0; wynik podstaw 1; koniec programu

3 wynik

= wynik × Silnia(n − 1)

4

koniec

(137)

Rekurencja Schemat blokowy

Silnia

„Schematy blokowe”

Wersja klasyczna

1

Jeżeli n = 0, silnia równa się 1; koniec algorytmu.

2 silnia ← 1 3

Powtarzaj dla i zmieniającego się od 1 do n silnia= silnia × i

4

Koniec algorytmu.

Wersja rekurencyjna

1

(138)

Rekurencja Schemat blokowy

Rekurencja na obrazkach: Droste Effect

(139)

Rekurencja Schemat blokowy

(140)

Rekurencja Schemat blokowy

Rekurencja — Escher

(141)

Rekurencja Schemat blokowy

(142)

Rekurencja Schemat blokowy

Rekurencja — Escher

(143)

Rekurencja Schemat blokowy

(144)

Rekurencja Schemat blokowy

Rekurencja — Escher

(145)

Rekurencja Schemat blokowy

(146)

Rekurencja Wieże Hanoi

Wieże Hanoi

Prosta zabawka dziecięca — na patyku nanizanych jest pewna liczba

krążków tak, że na większym zawsze leży krążek mniejszy. Zadaniem naszym

jest umieszczenie wszystkich krążków na sąsiednim „patyku” (korzystając

z jednego tylko „patyka” pomocniczego) w tej samej kolejności. Podczas

każdego ruchu pamiętać trzeba, że krążek większy nie może znaleźć się nigdy

na krążku mniejszym.

(147)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład

(148)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Trzy krążki          1 (IMMT PWr) TI-W01 2014 66 / 1

(149)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Trzy krążki          2

(150)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Trzy krążki        3 (IMMT PWr) TI-W01 2014 66 / 1

(151)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Trzy krążki         4

(152)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Trzy krążki          5 (IMMT PWr) TI-W01 2014 66 / 1

(153)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Trzy krążki       6

(154)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Trzy krążki         7 (IMMT PWr) TI-W01 2014 66 / 1

(155)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Trzy krążki          8

(156)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład

Dwa krążki

(157)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Dwa krążki      

(158)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Dwa krążki      (IMMT PWr) TI-W01 2014 66 / 1

(159)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Dwa krążki     

(160)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przykład Dwa krążki       (IMMT PWr) TI-W01 2014 66 / 1

(161)

Rekurencja Wieże Hanoi

Wieże Hanoi I

Czemu taka nazwa?

„W wielkiej świątyni Benares w Hanoi, pod kopułą, która zaznacza środek świata, znajduje się płytka z brązu, na której umocowane są trzy diamentowe igły, wysokie na łokieć i cienkie jak talia osy.

Na jednej z tych igieł, w momencie stworzenia świata, Bóg umieścił 64 krążki ze szczerego złota. Największy z nich leży na płytce z brązu, a pozostałe jeden na drugim, idąc malejąco od największego do najmniejszego. Jest to wieża Brahma.

Bez przerwy we dnie i w nocy kapłani przekładają krążki z jednej diamentowej igły na drugą, przestrzegając niewzruszonych praw Brahma.

(162)

Rekurencja Wieże Hanoi

Wieże Hanoi II

Czemu taka nazwa?

Wówczas, gdy 64 krążki zostaną przełożone z igły, na której umieścił je Bóg w momencie stworzenia świata, na jedną z dwóch pozostałych igieł, wieża, świątynia, bramini rozsypią się w proch i w jednym oka mgnieniu nastąpi koniec świata”.

Kiedy nastąpi koniec świata?

(163)

Rekurencja Wieże Hanoi

Wieże Hanoi

Koniec świata

Przy trzech krążkach trzeba 7 ruchów (przy dwu — 3!)

Gdy krążków jest 64 — trzeba 2641ruchów, czyli 18446744073709551615

Zakładamy, że przeniesienie krążka zajmuje 1 sekundę. Rok ma 365 × 24 × 3600 sekund (31536000)

Praca ta zajmie 2

64/31536000

(164)

Rekurencja Wieże Hanoi

Wieże Hanoi

Koniec świata

Przy trzech krążkach trzeba 7 ruchów (przy dwu — 3!) Gdy krążków jest 64 — trzeba 2641 ruchów, czyli 18446744073709551615

Zakładamy, że przeniesienie krążka zajmuje 1 sekundę. Rok ma 365 × 24 × 3600 sekund (31536000)

Praca ta zajmie 2

64/31536000

lat (prawie 585 miliardów lat)

(165)

Rekurencja Wieże Hanoi

Wieże Hanoi

Koniec świata

Przy trzech krążkach trzeba 7 ruchów (przy dwu — 3!) Gdy krążków jest 64 — trzeba 2641 ruchów, czyli 18446744073709551615

Zakładamy, że przeniesienie krążka zajmuje 1 sekundę.

Rok ma 365 × 24 × 3600 sekund (31536000) Praca ta zajmie 2

64/31536000

(166)

Rekurencja Wieże Hanoi

Wieże Hanoi

Koniec świata

Przy trzech krążkach trzeba 7 ruchów (przy dwu — 3!) Gdy krążków jest 64 — trzeba 2641 ruchów, czyli 18446744073709551615

Zakładamy, że przeniesienie krążka zajmuje 1 sekundę. Rok ma 365 × 24 × 3600 sekund (31536000)

Praca ta zajmie 2

64/31536000

lat (prawie 585 miliardów lat)

(167)

Rekurencja Wieże Hanoi

Wieże Hanoi

Koniec świata

Przy trzech krążkach trzeba 7 ruchów (przy dwu — 3!) Gdy krążków jest 64 — trzeba 2641 ruchów, czyli 18446744073709551615

Zakładamy, że przeniesienie krążka zajmuje 1 sekundę. Rok ma 365 × 24 × 3600 sekund (31536000)

Praca ta zajmie 2

64/31536000

(168)

Rekurencja Wieże Hanoi

Wieże Hanoi

Jak rozwiązać ten problem?

Gdy krążek jest tylko jeden — problem nie istnieje.

Dla dwu krążków problem jest banalny.

Dla trzech — można go podzielić na trzy zadania:

1

Przeniesienie dwu „górnych” krążków na „trzeci patyczek”. 2

Przeniesienie największego krążka na „patyczek drugi”. 3

Ponowne przeniesienie dwu krążków na największy. . .

(169)

Rekurencja Wieże Hanoi

Wieże Hanoi

Jak rozwiązać ten problem?

Gdy krążek jest tylko jeden — problem nie istnieje. Dla dwu krążków problem jest banalny.

Dla trzech — można go podzielić na trzy zadania:

1

Przeniesienie dwu „górnych” krążków na „trzeci patyczek”. 2

Przeniesienie największego krążka na „patyczek drugi”. 3

(170)

Rekurencja Wieże Hanoi

Wieże Hanoi

Jak rozwiązać ten problem?

Gdy krążek jest tylko jeden — problem nie istnieje. Dla dwu krążków problem jest banalny.

Dla trzech — można go podzielić na trzy zadania:

1

Przeniesienie dwu „górnych” krążków na „trzeci patyczek”. 2

Przeniesienie największego krążka na „patyczek drugi”. 3

Ponowne przeniesienie dwu krążków na największy. . .

(171)

Rekurencja Wieże Hanoi

Wieże Hanoi

Jak rozwiązać ten problem?

Gdy krążek jest tylko jeden — problem nie istnieje. Dla dwu krążków problem jest banalny.

Dla trzech — można go podzielić na trzy zadania:

1

Przeniesienie dwu „górnych” krążków na „trzeci patyczek”.

2

Przeniesienie największego krążka na „patyczek drugi”. 3

(172)

Rekurencja Wieże Hanoi

Wieże Hanoi

Jak rozwiązać ten problem?

Gdy krążek jest tylko jeden — problem nie istnieje. Dla dwu krążków problem jest banalny.

Dla trzech — można go podzielić na trzy zadania:

1

Przeniesienie dwu „górnych” krążków na „trzeci patyczek”. 2

Przeniesienie największego krążka na „patyczek drugi”.

3

Ponowne przeniesienie dwu krążków na największy. . .

(173)

Rekurencja Wieże Hanoi

Wieże Hanoi

Jak rozwiązać ten problem?

Gdy krążek jest tylko jeden — problem nie istnieje. Dla dwu krążków problem jest banalny.

Dla trzech — można go podzielić na trzy zadania:

1

Przeniesienie dwu „górnych” krążków na „trzeci patyczek”. 2

Przeniesienie największego krążka na „patyczek drugi”. 3

(174)

Rekurencja Wieże Hanoi

Wieże Hanoi

Przypadek ogólny 1 Przenieśmy z A na C N − 1krążków. 2

Pozostały krążek (największy! — ale z czego to wynika?) przenieśmy z A na B .

3

Do pozostałych (N − 1) krążków zastosujmy powyższy algorytm (patyk B możemy wykorzystywać jako roboczy, bo na samym spodzie znajduje się krążek największy).

4

powyższą procedurę należy powtarzać aż do zakończenia zadania. (Pierwszy patyczek nazwaliśmy A, drugi — B a trzeci — C .)

(175)

Rekurencja Wieże Hanoi

Wieże Hanoi

Procedura (rekurencyjna)

Procedura przenieś N (krążków) z X na Y używając Z:

1

Jeśli N = 1 to wypisz „X → Y ”;

2

w przeciwnym razie ( jeżeli N > 1) wykonaj co następuje:

1 wywołaj przenieś N − 1 z X naZ używając Y; 2 wypisz „X → Y ”;

3 wywołaj przenieś N − 1 z Z naY używając X; 3

wróć;

Zapis symboliczny A → B oznacza „weź krążek z patyka oznaczonego A i przenieś go na patyk oznaczony B ”

Cytaty

Powiązane dokumenty

Udowodnić, że średnia arytmetyczna tych liczb jest równa n+1 r

[r]

Na czym polega jednokierunkowa analiza wariancji, podać model, jakiej hipotezy dotyczy ta analiza, na jakie składowe rozkłada się całkowita suma kwadratów

Na czym polega jednokierunkowa analiza wariancji, podać model, jakiej hipotezy dotyczy ta analiza, na jakie składowe rozkłada się całkowita suma kwadratów

Udowodni¢, »e je±li M jest projektywny, to M jest

Zaªó»my, »e X interpretuje grup¦.. Zaªó»my, »e X

Zadanie polega na przeniesieniiu całej wieży krążków na jeden z pozostałych prętów, przy czym w każdym ruchu można brać tylko jeden krążek i nie wolno położyć

(2).Ta własność jest najważniejsza, bo z niej wynika wiele pozostałych.. Jej dowód