• Nie Znaleziono Wyników

INFORMATYKI TEORETYCZNE PODSTAWY

N/A
N/A
Protected

Academic year: 2021

Share "INFORMATYKI TEORETYCZNE PODSTAWY"

Copied!
74
0
0

Pełen tekst

(1)

TEORETYCZNE PODSTAWY INFORMATYKI

WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień

1

15/10/2018

Prof. dr hab. Elżbieta Richter-Wąs

(2)

Wykład 2

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

2

Problemy algorytmiczne

Klasy problemów algorytmicznych

Liczby Fibonacciego

Przeszukiwanie tablic

Największy wspólny podzielnik

Algorytmy zachłanne

Materiał w oparciu o wykład: D. Kane, Univ. San Diego, USA

„Data Structures and Algorithms, Algorithmic Toolbox”

(3)

Klasy problemów → typy algorytmów

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

3

 Mogą być prosto zaimplementowane w dowolnym języku programowania

 Proste (naturalne) rozwiązanie jest efektywne.

(4)

Prosty problem: liniowy scan

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

4

 Znajdź słowo w tekście.

 Przeszukujemy tekst liniowo

 Prosty algorytm działa dobrze

 Nie można/ nie ma powodu aby go poprawiać.

(5)

Algorytmiczny problem:

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

5

 Znajdź najkrótszą drogę pomiędzy dwoma

punktami.

(6)

Algorytmiczny problem:

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

6

 Znajdź najlepsze przyporządkowanie studentów do

pokoi w akademiku.

(7)

Algorytmiczny problem:

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

7

 Zdefiniuj miarę podobieństwa dwóch dokumentów.

(8)

Algorytmiczny problem:

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

8

 Nie jest oczywiste jak rozwiązać.

 Proste pomysły są zbyt wolne.

 Można optymalizować rozwiązanie.

(9)

Problemy ze sztucznej inteligencji

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

9

 Rozumienie wypowiadanych słów

 Rozpoznawanie obrazów

 Gra w gry planszowe lub inne

 Itd…

(10)

Liczby Fibonacciego

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

10

 Definicja

(11)

Liczby Fibonacciego

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

11

 Przykład: studiowanie populacji królików

(12)

Liczby Fibonacciego

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

12

 Bardzo szybko rosną

 Dowód indukcyjny

(13)

Liczby Fibonacciego

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

13

 Przykład

(14)

Naiwny algorytm: rekurencyjny

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

14

 Czas wykonania: T(n) oznacza liczbę linii kodu które są wykonywane dla danej wartości n.

 Funkcja rekurencyjna (pseudokod)

(15)

Naiwny algorytm: rekurencyjny

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

15

(16)

Naiwny algorytm: rekurencyjny

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

16

(17)

Naiwny algorytm: rekurencyjny

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

17

 Czas wykonania algorytmu: złożoność obliczeniowa

(18)

Naiwny algorytm: rekurencyjny

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

18

 Dlaczego tak czasochłonny?

(19)

Naiwny algorytm: rekurencyjny

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

19

 Dlaczego tak czasochłonny?

(20)

Efektywny algorytm: iteracja

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

20

 Spróbujmy ręcznie policzyć

Definicja

(21)

Efektywny algorytm: iteracja

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

21

 Funkcja: iteracyjne wypełnianie tablicy (pseudokod)

(22)

Liczby Fibonaciego

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

22

 Naiwny algorytm ( z definicji ): prosty, elegancki, nieakceptowalnie wolny

 Iteracyjny algorytm: bardzo szybki

Zastosowanie ulepszonego (iteracyjnego) algorytmu

umożliwia wykonanie obliczeń.

(23)

Przeszukiwanie: obrazu, tablicy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

23

(24)

Metoda: „dziel i zwyciężaj”

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

24

 Podziel na problemy tego same typu, obszary nie

mogą się pokrywać.

(25)

Metoda: „dziel i zwyciężaj”

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

25

 Podziel na problemy tego same typu, obszary nie mogą się pokrywać.

Nie są tego samego typu Nie są rozłączne

(26)

Metoda: „dziel i zwyciężaj”

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

26

 Dziel na mniejsze problemy:

(27)

Metoda: „dziel i zwyciężaj”

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

27

 Zwyciężaj: rozwiąż mniejsze problemy:

(28)

Metoda: „dziel i zwyciężaj”

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

28

 Połącz z powrotem:

(29)

Przykład: liniowe przeszukiwanie tablicy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

29

 Tłumaczenie słów: w danym wierszu słowa mają to

samo znaczenie.

(30)

Przykład: liniowe przeszukiwanie tablicy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

30

 Rozwiązanie rekurencyjne

(31)

Przykład: liniowe przeszukiwanie tablicy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

31

 Rozwiązanie rekurencyjne

Ilość operacji

(32)

Przykład: liniowe przeszukiwanie tablicy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

32

 Rozwiązanie iteracyjne

(33)

Przykład: posortowana tablica

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

33

 Przeszukiwanie posortowanej tablicy: ilość operacji

(34)

Przykład: przeszukiwanie binarne

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

34

 Przeszukiwanie binarne posortowanej tablicy:

(35)

Przykład: przeszukiwanie binarne

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

35

 Przeszukiwanie binarne: szukamy liczby „50”

(36)

Przykład: przeszukiwanie binarne

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

36

 Przeszukiwanie binarne: szukamy liczby „50”

(37)

Przykład: przeszukiwanie binarne

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

37

 Przeszukiwanie binarne: szukamy liczby „50”

(38)

Metoda: „dziel i zwyciężaj”

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

38

 Dzielimy rekurencyjnie na rozłączne (dla danego etapu podziału) mniejsze problemy tego samego typu.

 Rozwiązujemy mniejsze problemy

 Scalamy rozwiązania

(39)

Metoda: „dziel i zwyciężaj”

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

39

 Wersja rekurencyjna: przeszukiwanie binarne

(40)

Metoda: „dziel i zwyciężaj”

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

40

 Wersja rekurencyjna: złożoność obliczeniowa

Ilość operacji

(41)

Metoda: „dziel i zwyciężaj”

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

41

 Wersja iteracyjna: przeszukiwanie binarne

(42)

Metoda: „dziel i zwyciężaj”

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

42

Tłumaczenie słów: w każdej kolumnie posortowane wg.

kolejności liter słowa w danym języku. W danym wierszu

słowa nie maja tego samego znaczenia.

(43)

Metoda: „dziel i zwyciężaj”

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

43

Tłumaczenie słów: w każdej kolumnie posortowane wg. kolejności liter słowa w danym języku. W danym wierszu słowa nie maja

tego samego znaczenia.

Zorganizuj jako przeszukiwanie binarne: pomocnicze tabele.

(44)

Największy wspólny podzielnik (NWP)

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

44

Definicja

Dla pary liczb całkowitych a,b, ich największy wspólny podzielnik d = NWP(a,b) to największa liczba całkowita d taka ze dzieli bez reszty a, b.

Kryptografia

Teoria liczb Funkcje specjalne

(45)

Największy wspólny podzielnik (NWP)

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

45

Definicja

Dla pary liczb całkowitych a,b, ich największy wspólny podzielnik d = NWP(a,b) to największa liczba całkowita d taka ze dzieli bez reszty a, b.

gcd –

greatest common divisor

(46)

Naiwny algorytm znajdowania NWP

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

46

 Ilość operacji w przybliżeniu równa a+b

 Bardzo wolny już dla liczb 20-to cyfrowych

(47)

Algorytm Euklidesa

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

47

Lemat:

Jeżeli a’ = reszta z dzielenia a/b to gcd(a,b)=gcd(a’,b) = gcd(b,a’)

Dowod (szkic)

a = a’ + b*q

d dzieli a i b wtedy i tylko wtedy jeżeli d dzieli a’ i b.

(48)

Algorytm Euklidesa

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

48

Funkcja rekurencyjna, wprost zastosowanie lematu.

(49)

Algorytm Euklidesa

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

49

Przykład

Ilość operacji: każdy krok redukuje liczby o czynnik 2.

Ilość kroków to log(a*b).

Jeżeli liczba 100-cyfrowa,

potrzebne około 600 kroków.

Każdy krok to pojedyncze

dzielenie.

(50)

Efektywny algorytm

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

50

 Naiwny algorytm jest zbyt wolny.

 Algorytm Euklidesa dużo efektywniejszy.

 Wymyślenie efektywnego algorytmu wymagało

wiedzy na temat problemu, w tym przypadku z

dziedziny teorii liczb..

(51)

Algorytm zachłanny

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

51

 Jaka jest największa liczba która możesz zbudować maja do dyspozycji podane cyfry.

????

(52)

Algorytm zachłanny

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

52

 Jaka jest największa liczba która możesz zbudować używając wszystkie podane cyfry.

Poprawna odpowiedz

(53)

Strategia zachłanna: największa liczba

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

53

Znajdź największą cyfrę

Dołącz do liczby

Usuń cyfrę z listy cyfr

Powtarzaj dopóki lista cyfr nie jest pusta

(54)

Strategia zachłanna: tankowanie benzyny

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

54

Pełny bak benzyny wystarcz na przejechanie 400km. Na których stancjach tankować paliwo aby ilość tankowan potrzebna do przejechania 950 km była minimalna.

Tylko dwa tankowania

(55)

Wybór strategii

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

55

Jakie są możliwości

Zatankuj na każdej stacji po drodze

Zatankuj na najdalszej stacji do której możesz dojechać

Jedz aż do pustego baku.

Strategia zachłanna

1) Wystartuj w punkcie A

2) Dojedz do najdalszej możliwie stacji benzynowej

3) Zatankuj i potraktuj ten punkt jako nowy punkt A

Powtarzaj (1-3) dopóki nie zajdzie A=B

(56)

Podproblem

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

56

 Podproblem jest taki sam jak oryginalny problem.

(57)

Algorytm zachłanny: liniowa zależność od ilości stacji benzynowych.

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

57

(58)

Jak podzielić na grupy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

58

 Chcemy podzielić na grupy gdzie wiek dziecka nie różni się więcej niż o 1 rok i tak aby było jak

najmniej grup.

(59)

Jak efektywnie podzielić na grupy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

59

 Naiwny algorytm

Ilość operacji:

co najmniej 2

n

dla n elementów które

należy pogrupować.

(60)

Jak efektywnie podzielić na grupy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

60

Naiwny algorytm

Rozważmy podział na 2 grupy: C = G1 + G2

Każdy element i może być zaakceptowany do grupy G1 albo odrzucony i wtedy jest w grupie G2.

W ten sposób można utworzyć 2 n różnych grup G1

Ilość operacji co najmniej 2 n

(61)

Jak efektywnie podzielić na grupy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

61

Posortujmy najpierw elementy (punkty): n log(n)

Zdefiniujmy problem jako poszukiwanie

najmniejszej ilości odcinków które pokryją wszystkie punkty. Długość odcinka nie większa niż 1 jednostka.

Jak to zrobić: zacznij od najbardziej lewego punktu i

wyznacz odcinek o długości co najwyżej 1. Punkty

leżące na odcinku tworzą jedna grupę.

(62)

Jak efektywnie podzielić na grupy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

62

 Posortujmy najpierw elementy (punkty): n log(n)

 Zdefiniujmy problem jako poszukiwanie najmniejszej ilości odcinków które pokryją wszystkie punkty.

Długość odcinka nie większa niż 1 jednostka.

(63)

Jak efektywnie podzielić na grupy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

63

Ilość operacji proporcjonalna do n

Sortowanie:

Ilość operacji

proporcjonalna

do n log(n)

(64)

Jak efektywnie podzielić na grupy

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

64

Naiwny algorytm: ilość operacji ~ 2 n

Bardzo wolny już dla n=50

Sortowanie + algorytm zachłanny

Sortowanie ~ n log()

Algorytm zachłanny ~ n

Całość efektywna nawet dla n=10 000 000

(65)

Algorytm zachłanny: pakowanie plecaka

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

65

 Jak najlepiej zapakować plecak

(66)

Algorytm zachłanny: pakowanie plecaka

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

66

 Jak najlepiej zapakować plecak

(67)

Algorytm zachłanny: pakowanie plecaka

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

67

 Jak najlepiej zapakować plecak

(68)

Algorytm zachłanny: pakowanie plecaka

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

68

 Jak najlepiej zapakować plecak

(69)

Algorytm zachłanny: pakowanie plecaka

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

69

 Jak najlepiej zapakować plecak

(70)

Algorytm zachłanny: pakowanie plecaka

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

70

 Jak najlepiej zapakować plecak

(71)

Algorytm zachłanny: pakowanie plecaka

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

71

Jak najlepiej zapakować plecak

1) Dopóki plecak nie jest pełny, wybierz grupę i o największym vi/wi.

2) Jeżeli przedmioty mieszczą się w plecaku umieść wszystkie. Jeżeli nie ta tyle aby zapełnić plecak.

3) Jeżeli jeszcze jest miejsce w plecaku, wybierz nowe i na kolejne o największym vi/wi.

Powtarzaj (1)-(3) do momentu zapełnienia plecaka

lub aż nie będzie więcej przedmiotów które się w

nim mieszczą.

(72)

Algorytm zachłanny: pakowanie plecaka

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

72

(73)

Algorytm zachłanny: pakowanie plecaka

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

73

 Czy można efektywniej?

Ilość operacji które były wykonywane: n 2

Wybieranie kolejnego i – maksymalnie n-razy

Wkładanie przedmiotów – maksymalnie n-razy

Gdybyśmy najpierw posortowali wg. malejącego vi/wi to ilość operacji bylaby: n log(n) + n + n

Sortowanie: n log(n) operacji

Wybranie kolejnego i – 1operacja

Wkładanie do plecaka – n operacji

(74)

Algorytm zachłanny: pakowanie plecaka

15/10/2018 Prof. dr hab. Elżbieta Richter-Wąs

74

 Posortowaliśmy:

Cytaty

Powiązane dokumenty

 Ma postać ciągu kroków których jest liniowa ilość (np. stała albo proporcjonalna do liczby danych) które muszą zostać bezwarunkowo wykonane jeden po drugim.. 

w języku matematycznym, lista jest ciągiem n elementów, który zapisujemy jako (a1,a2, …,an)..  Zadaniem systemu operacyjnego jest zarządzanie i szeregowanie zasobów

WFAiS UJ, Informatyka Stosowana I rok studiów, I

 możliwość zapisu dowolnie dużej liczby, jednak do zapisu bardzo dużych liczb (nawet okrągłych) jest potrzebna duża liczba cyfr..  Współcześnie powszechnie używany

w języku matematycznym, lista jest ciągiem n elementów, który zapisujemy jako (a1,a2, …,an)..  Zadaniem systemu operacyjnego jest zarządzanie i szeregowanie zasobów

Zaletą systemów pozycyjnych jest ich klarowność, łatwość dokonywania nawet złożonych operacji arytmetycznych oraz możliwość zapisu dowolnie dużej liczby, jednak do

 Jeśli graf G stanowi pojedynczą spójną składową to drzewo rozpinające zawsze istnieje.. minimal spanning tree) to drzewo rozpinające, w którym suma etykiet jego

 Przyjmujemy zasadę że czas działania pewnych prosty operacji na danych wynosi O(1), czyli jest niezależny od rozmiaru danych wejściowych.. indeksowanie