Programowanie dynamiczne cz. 2

Wielkość: px
Rozpocząć pokaz od strony:

Download "Programowanie dynamiczne cz. 2"

Transkrypt

1 Programowanie dynamiczne cz. 2 Wykład 7 16 kwietnia 2019 (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

2 Outline 1 Mnożenie ciągu macierzy Konstruowanie optymalnego rozwiązania 2 Podstawy programowania dynamicznego Optymalna podstruktura Wspólne podproblemy 3 Spamiętywanie 4 Programowanie dynamiczne - podsumowanie (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

3 4-Konstruowanie optymalnego rozwiązania Algorytm M C O wypełnia tablicę m, rozwiązując problem optymalnego nawiasowania wyznaczając dla coraz dłuższych podciągów oryginalnego ciągu macierzy optymalną liczbę mnożeń, ale nie podaje jawnie kolejności mnożeń. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

4 4-Konstruowanie optymalnego rozwiązania Algorytm M C O wypełnia tablicę m, rozwiązując problem optymalnego nawiasowania wyznaczając dla coraz dłuższych podciągów oryginalnego ciągu macierzy optymalną liczbę mnożeń, ale nie podaje jawnie kolejności mnożeń. Do wyznaczenia najlepszej kolejności mnożenia macierzy używa się tablicy s[1..n, 1..n]. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

5 4-Konstruowanie optymalnego rozwiązania Algorytm M C O wypełnia tablicę m, rozwiązując problem optymalnego nawiasowania wyznaczając dla coraz dłuższych podciągów oryginalnego ciągu macierzy optymalną liczbę mnożeń, ale nie podaje jawnie kolejności mnożeń. Do wyznaczenia najlepszej kolejności mnożenia macierzy używa się tablicy s[1..n, 1..n]. Każde pole s[i, j] zawiera taką wartość k, że optymalnie nawiasowanie dla A i A i+1...a j dzieli iloczyn między A k a A k+1. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

6 4-Konstruowanie optymalnego rozwiązania Algorytm M C O wypełnia tablicę m, rozwiązując problem optymalnego nawiasowania wyznaczając dla coraz dłuższych podciągów oryginalnego ciągu macierzy optymalną liczbę mnożeń, ale nie podaje jawnie kolejności mnożeń. Do wyznaczenia najlepszej kolejności mnożenia macierzy używa się tablicy s[1..n, 1..n]. Każde pole s[i, j] zawiera taką wartość k, że optymalnie nawiasowanie dla A i A i+1...a j dzieli iloczyn między A k a A k+1. Ostatnim mnożeniem pary macierzy powinno być A 1..s[1,n] A s[1,n]+1..n. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

7 4-Konstruowanie optymalnego rozwiązania Algorytm M C O wypełnia tablicę m, rozwiązując problem optymalnego nawiasowania wyznaczając dla coraz dłuższych podciągów oryginalnego ciągu macierzy optymalną liczbę mnożeń, ale nie podaje jawnie kolejności mnożeń. Do wyznaczenia najlepszej kolejności mnożenia macierzy używa się tablicy s[1..n, 1..n]. Każde pole s[i, j] zawiera taką wartość k, że optymalnie nawiasowanie dla A i A i+1...a j dzieli iloczyn między A k a A k+1. Ostatnim mnożeniem pary macierzy powinno być A 1..s[1,n] A s[1,n]+1..n. Wcześniejsze mnożenia mogą być odtworzone rekurencyjnie, ponieważ s[1, s[1..n]] wyznacza ostatnie mnożenie w czasie obliczania A 1..s[1,n], a s[s[1..n] + 1, n] wyznacza ostatnie mnożenie w czasie obliczania A s[1,n]+1..n. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

8 4-Konstruowanie optymalnego rozwiązania PRINT-OPTIMAL-PARENS(s, i, j) 1: if i = j then 2: PRINT A i 3: else 4: PRINT ( 5: PRINT-OPTIMAL-PARENS(s, i, s[i,j]) 6: PRINT-OPTIMAL-PARENS(s, s[i,j]+1, j) 7: PRINT ) (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

9 4-Konstruowanie optymalnego rozwiązania PRINT-OPTIMAL-PARENS(s, i, j) 1: if i = j then 2: PRINT A i 3: else 4: PRINT ( 5: PRINT-OPTIMAL-PARENS(s, i, s[i,j]) 6: PRINT-OPTIMAL-PARENS(s, s[i,j]+1, j) 7: PRINT ) A 1 A 2 A 3 A 4 A 5 A (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

10 4-Konstruowanie optymalnego rozwiązania PRINT-OPTIMAL-PARENS(s, i, j) 1: if i = j then 2: PRINT A i 3: else 4: PRINT ( 5: PRINT-OPTIMAL-PARENS(s, i, s[i,j]) 6: PRINT-OPTIMAL-PARENS(s, s[i,j]+1, j) 7: PRINT ) A 1 A 2 A 3 A 4 A 5 A Wywołanie PRINT OPTIMAL PARENS(s, 1, 6) zwróci ((A 1 (A 2 A 3 ))((A 4 A 5 )A 6 )). (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

11 Podstawy programowania dynamicznego Problem optymalizacyjny musi mieć 2 podstawowe cechy aby rokował nadzieję na rozwiązanie go za pomocą programowania dynamicznego: (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

12 Podstawy programowania dynamicznego Problem optymalizacyjny musi mieć 2 podstawowe cechy aby rokował nadzieję na rozwiązanie go za pomocą programowania dynamicznego: optymalną podstrukturę, (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

13 Podstawy programowania dynamicznego Problem optymalizacyjny musi mieć 2 podstawowe cechy aby rokował nadzieję na rozwiązanie go za pomocą programowania dynamicznego: optymalną podstrukturę, wspólne podproblemy. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

14 Podstawy programowania dynamicznego Problem optymalizacyjny musi mieć 2 podstawowe cechy aby rokował nadzieję na rozwiązanie go za pomocą programowania dynamicznego: optymalną podstrukturę, wspólne podproblemy. Własność wspólnych podproblemów wykorzystywana jest również w metodzie zwanej spamiętywaniem. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

15 Podstawy programowania dynamicznego Problem optymalizacyjny musi mieć 2 podstawowe cechy aby rokował nadzieję na rozwiązanie go za pomocą programowania dynamicznego: optymalną podstrukturę, wspólne podproblemy. Własność wspólnych podproblemów wykorzystywana jest również w metodzie zwanej spamiętywaniem. Problem wykazuje optymalną podstrukturę, jeśli jego optymalne rozwiązanie jest funkcją optymalnych rozwiązań podproblemów. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

16 Podstawy programowania dynamicznego Problem optymalizacyjny musi mieć 2 podstawowe cechy aby rokował nadzieję na rozwiązanie go za pomocą programowania dynamicznego: optymalną podstrukturę, wspólne podproblemy. Własność wspólnych podproblemów wykorzystywana jest również w metodzie zwanej spamiętywaniem. Problem wykazuje optymalną podstrukturę, jeśli jego optymalne rozwiązanie jest funkcją optymalnych rozwiązań podproblemów. Jeżeli problem ma własność optymalnej podstruktury, to (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

17 Podstawy programowania dynamicznego Problem optymalizacyjny musi mieć 2 podstawowe cechy aby rokował nadzieję na rozwiązanie go za pomocą programowania dynamicznego: optymalną podstrukturę, wspólne podproblemy. Własność wspólnych podproblemów wykorzystywana jest również w metodzie zwanej spamiętywaniem. Problem wykazuje optymalną podstrukturę, jeśli jego optymalne rozwiązanie jest funkcją optymalnych rozwiązań podproblemów. Jeżeli problem ma własność optymalnej podstruktury, to przeważnie istnieje rozwiązanie optymalne uzyskane za pomocą programowania dynamicznego, (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

18 Podstawy programowania dynamicznego Problem optymalizacyjny musi mieć 2 podstawowe cechy aby rokował nadzieję na rozwiązanie go za pomocą programowania dynamicznego: optymalną podstrukturę, wspólne podproblemy. Własność wspólnych podproblemów wykorzystywana jest również w metodzie zwanej spamiętywaniem. Problem wykazuje optymalną podstrukturę, jeśli jego optymalne rozwiązanie jest funkcją optymalnych rozwiązań podproblemów. Jeżeli problem ma własność optymalnej podstruktury, to przeważnie istnieje rozwiązanie optymalne uzyskane za pomocą programowania dynamicznego, czasem również skuteczna okazuje się strategia zachłanna. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

19 Optymalna podstruktura Poszukiwanie optymalnej podstruktury: (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

20 Optymalna podstruktura Poszukiwanie optymalnej podstruktury: 1) Wykazujemy, że rozwiązanie problemu polega na dokonaniu wyboru (wybieramy indeks, który dzieli ciąg macierzy). Wybór pozostawia jeden lub więcej podproblemów do rozwiązania. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

21 Optymalna podstruktura Poszukiwanie optymalnej podstruktury: 1) Wykazujemy, że rozwiązanie problemu polega na dokonaniu wyboru (wybieramy indeks, który dzieli ciąg macierzy). Wybór pozostawia jeden lub więcej podproblemów do rozwiązania. 2) Zakładamy, że jeden z możliwych wyborów doprowadzi nas do rozwiązania optymalnego. Nie troszczymy się o to w jaki sposób dokonać właściwego wyboru. Musimy być pewni, że właściwy wybór jest wśród rozważanych. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

22 Optymalna podstruktura Poszukiwanie optymalnej podstruktury: 1) Wykazujemy, że rozwiązanie problemu polega na dokonaniu wyboru (wybieramy indeks, który dzieli ciąg macierzy). Wybór pozostawia jeden lub więcej podproblemów do rozwiązania. 2) Zakładamy, że jeden z możliwych wyborów doprowadzi nas do rozwiązania optymalnego. Nie troszczymy się o to w jaki sposób dokonać właściwego wyboru. Musimy być pewni, że właściwy wybór jest wśród rozważanych. 3) Dla danego wyboru określa się wynikające z niego podproblemy oraz charakteryzuje się całą podprzestrzeń podproblemów. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

23 Optymalna podstruktura Poszukiwanie optymalnej podstruktury: 1) Wykazujemy, że rozwiązanie problemu polega na dokonaniu wyboru (wybieramy indeks, który dzieli ciąg macierzy). Wybór pozostawia jeden lub więcej podproblemów do rozwiązania. 2) Zakładamy, że jeden z możliwych wyborów doprowadzi nas do rozwiązania optymalnego. Nie troszczymy się o to w jaki sposób dokonać właściwego wyboru. Musimy być pewni, że właściwy wybór jest wśród rozważanych. 3) Dla danego wyboru określa się wynikające z niego podproblemy oraz charakteryzuje się całą podprzestrzeń podproblemów. 4) Pokazujemy za pomocą techniki wytnij i wklej, że rozwiązania podproblemów składających się na optymalne rozwiązanie same w sobie muszą być optymalne. Klasyczny dowód nie wprost, przez sprowadzenie do sprzeczności. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

24 Optymalna podstruktura Poszukiwanie optymalnej podstruktury: 1) Wykazujemy, że rozwiązanie problemu polega na dokonaniu wyboru (wybieramy indeks, który dzieli ciąg macierzy). Wybór pozostawia jeden lub więcej podproblemów do rozwiązania. 2) Zakładamy, że jeden z możliwych wyborów doprowadzi nas do rozwiązania optymalnego. Nie troszczymy się o to w jaki sposób dokonać właściwego wyboru. Musimy być pewni, że właściwy wybór jest wśród rozważanych. 3) Dla danego wyboru określa się wynikające z niego podproblemy oraz charakteryzuje się całą podprzestrzeń podproblemów. 4) Pokazujemy za pomocą techniki wytnij i wklej, że rozwiązania podproblemów składających się na optymalne rozwiązanie same w sobie muszą być optymalne. Klasyczny dowód nie wprost, przez sprowadzenie do sprzeczności. Zakładamy, że żadne z danych rozwiązań podproblemu nie jest optymalne. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

25 Optymalna podstruktura Poszukiwanie optymalnej podstruktury: 1) Wykazujemy, że rozwiązanie problemu polega na dokonaniu wyboru (wybieramy indeks, który dzieli ciąg macierzy). Wybór pozostawia jeden lub więcej podproblemów do rozwiązania. 2) Zakładamy, że jeden z możliwych wyborów doprowadzi nas do rozwiązania optymalnego. Nie troszczymy się o to w jaki sposób dokonać właściwego wyboru. Musimy być pewni, że właściwy wybór jest wśród rozważanych. 3) Dla danego wyboru określa się wynikające z niego podproblemy oraz charakteryzuje się całą podprzestrzeń podproblemów. 4) Pokazujemy za pomocą techniki wytnij i wklej, że rozwiązania podproblemów składających się na optymalne rozwiązanie same w sobie muszą być optymalne. Klasyczny dowód nie wprost, przez sprowadzenie do sprzeczności. Zakładamy, że żadne z danych rozwiązań podproblemu nie jest optymalne. Wycinając nieoptymalne rozwiązanie podproblemu i wklejając w to miejsce rozwiązanie optymalne, wykazujemy, że jesteśmy w stanie uzyskać lepsze rozwiązanie pierwotnego problemu, i przez to zaprzeczamy założeniu, jakoby posiadaliśmy już rozwiązanie optymalne. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

26 Optymalna podstruktura Optymalne podstruktury różnią się: (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

27 Optymalna podstruktura Optymalne podstruktury różnią się: ilością podproblemów wykorzystanych w optymalnym rozwiązaniu pierwotnego problemu, (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

28 Optymalna podstruktura Optymalne podstruktury różnią się: ilością podproblemów wykorzystanych w optymalnym rozwiązaniu pierwotnego problemu, ilością podproblemów, które trzeba rozważyć, żeby wybrać ten, który wchodzi w skład rozwiązania optymalnego. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

29 Optymalna podstruktura Optymalne podstruktury różnią się: ilością podproblemów wykorzystanych w optymalnym rozwiązaniu pierwotnego problemu, ilością podproblemów, które trzeba rozważyć, żeby wybrać ten, który wchodzi w skład rozwiązania optymalnego. Mnożenie podciągu macierzy A i A i+1...a j - problem z dwoma podproblemami oraz z j i możliwościami wyboru. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

30 Optymalna podstruktura Optymalne podstruktury różnią się: ilością podproblemów wykorzystanych w optymalnym rozwiązaniu pierwotnego problemu, ilością podproblemów, które trzeba rozważyć, żeby wybrać ten, który wchodzi w skład rozwiązania optymalnego. Mnożenie podciągu macierzy A i A i+1...a j - problem z dwoma podproblemami oraz z j i możliwościami wyboru. Dla macierzy A k, która wyznacza punkt podziału w iloczynie mamy dwa podproblemy, które muszą być rozwiązane optymalnie: (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

31 Optymalna podstruktura Optymalne podstruktury różnią się: ilością podproblemów wykorzystanych w optymalnym rozwiązaniu pierwotnego problemu, ilością podproblemów, które trzeba rozważyć, żeby wybrać ten, który wchodzi w skład rozwiązania optymalnego. Mnożenie podciągu macierzy A i A i+1...a j - problem z dwoma podproblemami oraz z j i możliwościami wyboru. Dla macierzy A k, która wyznacza punkt podziału w iloczynie mamy dwa podproblemy, które muszą być rozwiązane optymalnie: nawiasowanie A i A k+1...a k, (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

32 Optymalna podstruktura Optymalne podstruktury różnią się: ilością podproblemów wykorzystanych w optymalnym rozwiązaniu pierwotnego problemu, ilością podproblemów, które trzeba rozważyć, żeby wybrać ten, który wchodzi w skład rozwiązania optymalnego. Mnożenie podciągu macierzy A i A i+1...a j - problem z dwoma podproblemami oraz z j i możliwościami wyboru. Dla macierzy A k, która wyznacza punkt podziału w iloczynie mamy dwa podproblemy, które muszą być rozwiązane optymalnie: nawiasowanie A i A k+1...a k, nawiasowanie A k+1 A k+2...a j. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

33 Optymalna podstruktura Optymalne podstruktury różnią się: ilością podproblemów wykorzystanych w optymalnym rozwiązaniu pierwotnego problemu, ilością podproblemów, które trzeba rozważyć, żeby wybrać ten, który wchodzi w skład rozwiązania optymalnego. Mnożenie podciągu macierzy A i A i+1...a j - problem z dwoma podproblemami oraz z j i możliwościami wyboru. Dla macierzy A k, która wyznacza punkt podziału w iloczynie mamy dwa podproblemy, które muszą być rozwiązane optymalnie: nawiasowanie A i A k+1...a k, nawiasowanie A k+1 A k+2...a j. Po optymalnym rozwiązaniu podproblemów, wybieramy indeks k spośród j i kandydatów. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

34 Optymalna podstruktura Optymalne podstruktury różnią się: ilością podproblemów wykorzystanych w optymalnym rozwiązaniu pierwotnego problemu, ilością podproblemów, które trzeba rozważyć, żeby wybrać ten, który wchodzi w skład rozwiązania optymalnego. Mnożenie podciągu macierzy A i A i+1...a j - problem z dwoma podproblemami oraz z j i możliwościami wyboru. Dla macierzy A k, która wyznacza punkt podziału w iloczynie mamy dwa podproblemy, które muszą być rozwiązane optymalnie: nawiasowanie A i A k+1...a k, nawiasowanie A k+1 A k+2...a j. Po optymalnym rozwiązaniu podproblemów, wybieramy indeks k spośród j i kandydatów. Czas działania algorytmu programowania dynamicznego zależy od: (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

35 Optymalna podstruktura Optymalne podstruktury różnią się: ilością podproblemów wykorzystanych w optymalnym rozwiązaniu pierwotnego problemu, ilością podproblemów, które trzeba rozważyć, żeby wybrać ten, który wchodzi w skład rozwiązania optymalnego. Mnożenie podciągu macierzy A i A i+1...a j - problem z dwoma podproblemami oraz z j i możliwościami wyboru. Dla macierzy A k, która wyznacza punkt podziału w iloczynie mamy dwa podproblemy, które muszą być rozwiązane optymalnie: nawiasowanie A i A k+1...a k, nawiasowanie A k+1 A k+2...a j. Po optymalnym rozwiązaniu podproblemów, wybieramy indeks k spośród j i kandydatów. Czas działania algorytmu programowania dynamicznego zależy od: a) liczby wszystkich podproblemów, (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

36 Optymalna podstruktura Optymalne podstruktury różnią się: ilością podproblemów wykorzystanych w optymalnym rozwiązaniu pierwotnego problemu, ilością podproblemów, które trzeba rozważyć, żeby wybrać ten, który wchodzi w skład rozwiązania optymalnego. Mnożenie podciągu macierzy A i A i+1...a j - problem z dwoma podproblemami oraz z j i możliwościami wyboru. Dla macierzy A k, która wyznacza punkt podziału w iloczynie mamy dwa podproblemy, które muszą być rozwiązane optymalnie: nawiasowanie A i A k+1...a k, nawiasowanie A k+1 A k+2...a j. Po optymalnym rozwiązaniu podproblemów, wybieramy indeks k spośród j i kandydatów. Czas działania algorytmu programowania dynamicznego zależy od: a) liczby wszystkich podproblemów, b) liczby możliwych wyborów dla każdego podproblemu. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

37 Optymalna podstruktura Dla problemu mnożenia macierzy: (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

38 Optymalna podstruktura Dla problemu mnożenia macierzy: Θ(n 2 ) podproblemów, (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

39 Optymalna podstruktura Dla problemu mnożenia macierzy: Θ(n 2 ) podproblemów, dla każdego podproblemu do n 1 możliwych wyborów. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

40 Optymalna podstruktura Dla problemu mnożenia macierzy: Θ(n 2 ) podproblemów, dla każdego podproblemu do n 1 możliwych wyborów. Czas działania algorytmu M C O jest rzędu Θ(n 3 ). (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

41 Optymalna podstruktura Dla problemu mnożenia macierzy: Θ(n 2 ) podproblemów, dla każdego podproblemu do n 1 możliwych wyborów. Czas działania algorytmu M C O jest rzędu Θ(n 3 ). W programowaniu dynamicznym optymalna podstruktura jest wykorzystywana z dołu do góry. Najpierw odnajdujemy optymalne rozwiązania podproblemów, a następnie wyznaczamy optymalne rozwiązanie pierwotnego problemu. Wyznaczenie optymalnego rozwiązania problemu wymaga wybrania tych podproblemów, które złożą się na ostateczne rozwiązanie. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

42 Optymalna podstruktura Dla problemu mnożenia macierzy: Θ(n 2 ) podproblemów, dla każdego podproblemu do n 1 możliwych wyborów. Czas działania algorytmu M C O jest rzędu Θ(n 3 ). W programowaniu dynamicznym optymalna podstruktura jest wykorzystywana z dołu do góry. Najpierw odnajdujemy optymalne rozwiązania podproblemów, a następnie wyznaczamy optymalne rozwiązanie pierwotnego problemu. Wyznaczenie optymalnego rozwiązania problemu wymaga wybrania tych podproblemów, które złożą się na ostateczne rozwiązanie. W algorytmach zachłannych optymalna podstruktura jest wykorzystywana z góry na doł. Algorytmy zachłanne najpierw dokonują wyboru podproblemu lokalnie optymalnego, a następnie rozwiązują wybrany podproblem. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

43 Wspólne podproblemy Zwykle liczba wszystkich podproblemów jest wielomianowa ze względu na rozmiar danych wejściowych. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

44 Wspólne podproblemy Zwykle liczba wszystkich podproblemów jest wielomianowa ze względu na rozmiar danych wejściowych. Problem optymalizacyjny ma własność wspólnych podproblemów, jeśli algorytm rekurencyjny wielokrotnie oblicza rozwiązanie tego samego podproblemu. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

45 Wspólne podproblemy Zwykle liczba wszystkich podproblemów jest wielomianowa ze względu na rozmiar danych wejściowych. Problem optymalizacyjny ma własność wspólnych podproblemów, jeśli algorytm rekurencyjny wielokrotnie oblicza rozwiązanie tego samego podproblemu. Procedura M C O do m[3, 4] odwołuje się 4 razy: podczas obliczania m[2, 4], m[1, 4], m[3, 5] oraz m[3, 6]. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

46 Wspólne podproblemy Zwykle liczba wszystkich podproblemów jest wielomianowa ze względu na rozmiar danych wejściowych. Problem optymalizacyjny ma własność wspólnych podproblemów, jeśli algorytm rekurencyjny wielokrotnie oblicza rozwiązanie tego samego podproblemu. Procedura M C O do m[3, 4] odwołuje się 4 razy: podczas obliczania m[2, 4], m[1, 4], m[3, 5] oraz m[3, 6]. Problemy, dla których właściwe jest podejście dziel i zwyciężaj, generują istotnie różne podproblemy w każdym kroku rekursji. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

47 Wspólne podproblemy Zwykle liczba wszystkich podproblemów jest wielomianowa ze względu na rozmiar danych wejściowych. Problem optymalizacyjny ma własność wspólnych podproblemów, jeśli algorytm rekurencyjny wielokrotnie oblicza rozwiązanie tego samego podproblemu. Procedura M C O do m[3, 4] odwołuje się 4 razy: podczas obliczania m[2, 4], m[1, 4], m[3, 5] oraz m[3, 6]. Problemy, dla których właściwe jest podejście dziel i zwyciężaj, generują istotnie różne podproblemy w każdym kroku rekursji. W programowaniu dynamicznym wykorzystujemy własność wspólnych podproblemów, rozwiązując każdy podproblem tylko raz i zapamiętując gotowe rozwiązania do późniejszego wykorzystania w tabeli. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

48 Wspólne podproblemy Zwykle liczba wszystkich podproblemów jest wielomianowa ze względu na rozmiar danych wejściowych. Problem optymalizacyjny ma własność wspólnych podproblemów, jeśli algorytm rekurencyjny wielokrotnie oblicza rozwiązanie tego samego podproblemu. Procedura M C O do m[3, 4] odwołuje się 4 razy: podczas obliczania m[2, 4], m[1, 4], m[3, 5] oraz m[3, 6]. Problemy, dla których właściwe jest podejście dziel i zwyciężaj, generują istotnie różne podproblemy w każdym kroku rekursji. W programowaniu dynamicznym wykorzystujemy własność wspólnych podproblemów, rozwiązując każdy podproblem tylko raz i zapamiętując gotowe rozwiązania do późniejszego wykorzystania w tabeli. Korzystając bezpośrednio ze wzoru na m[i, j] można napisać nieefektywną procedurę rekurencyjną obliczającą minimalną liczbę mnożeń skalarnych. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

49 Wspólne podproblemy RECURSIVE MATRIX CHAIN(p, i, j) 1: if i = j then 2: return 0 3: m[i, j] 4: for k i to j 1 do 5: q RECURSIVE MATRIX CHAIN(p, i, k) + RECURSIVE MATRIX CHAIN(p, k + 1, j) + p i 1 p k p j 6: if q < m[i, j] then 7: m[i, j] q 8: return m[i, j] (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

50 Wspólne podproblemy Drzewo rekursji dla R M C (p, 1, 4). (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

51 Wspólne podproblemy Czas T (n) potrzebny do obliczenia m[i, j] przez procedurę rekurencyjną jest co najmniej wykładniczy ze względu na n. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

52 Wspólne podproblemy Czas T (n) potrzebny do obliczenia m[i, j] przez procedurę rekurencyjną jest co najmniej wykładniczy ze względu na n. 1 if n = 1, T (n) n (T (k) + T (n k) + 1) if n > 1 k=1 (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

53 Wspólne podproblemy Czas T (n) potrzebny do obliczenia m[i, j] przez procedurę rekurencyjną jest co najmniej wykładniczy ze względu na n. 1 if n = 1, T (n) n (T (k) + T (n k) + 1) if n > 1 k=1 Dla i = 1, 2,..., n 1 każdy składnik sumy T (i) występuje raz jako T (k) i raz jako T (n k). Przed znak sumy wyciągamy też n 1 jedynek. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

54 Wspólne podproblemy Czas T (n) potrzebny do obliczenia m[i, j] przez procedurę rekurencyjną jest co najmniej wykładniczy ze względu na n. 1 if n = 1, T (n) n (T (k) + T (n k) + 1) if n > 1 k=1 Dla i = 1, 2,..., n 1 każdy składnik sumy T (i) występuje raz jako T (k) i raz jako T (n k). Przed znak sumy wyciągamy też n 1 jedynek. T (n) 2 n 1 T (i) + n i=1 (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

55 Wspólne podproblemy Czas T (n) potrzebny do obliczenia m[i, j] przez procedurę rekurencyjną jest co najmniej wykładniczy ze względu na n. 1 if n = 1, T (n) n (T (k) + T (n k) + 1) if n > 1 k=1 Dla i = 1, 2,..., n 1 każdy składnik sumy T (i) występuje raz jako T (k) i raz jako T (n k). Przed znak sumy wyciągamy też n 1 jedynek. T (n) 2 n 1 T (i) + n i=1 Korzystając z metody podstawiania można udowodnić, że T (n) = Ω(2 n ). (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

56 Wspólne podproblemy Udowodnimy, że T (n) 2 n 1, dla każdego n 1. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

57 Wspólne podproblemy Udowodnimy, że T (n) 2 n 1, dla każdego n 1. Dla n = 1, T (1) 1 = 2 0. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

58 Wspólne podproblemy Udowodnimy, że T (n) 2 n 1, dla każdego n 1. Dla n = 1, T (1) 1 = 2 0. Dla n 2, T (n) 2 n 1 2 i 1 + n. i=1 (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

59 Wspólne podproblemy Udowodnimy, że T (n) 2 n 1, dla każdego n 1. Dla n = 1, T (1) 1 = 2 0. Dla n 2, T (n) 2 n 1 2 i 1 + n. i=1 = 2 n 2 2 i + n. i=0 (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

60 Wspólne podproblemy Udowodnimy, że T (n) 2 n 1, dla każdego n 1. Dla n = 1, T (1) 1 = 2 0. Dla n 2, T (n) 2 n 1 2 i 1 + n. i=1 = 2 n 2 2 i + n. i=0 = 2(2 n 1 1) + n. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

61 Wspólne podproblemy Udowodnimy, że T (n) 2 n 1, dla każdego n 1. Dla n = 1, T (1) 1 = 2 0. Dla n 2, T (n) 2 n 1 2 i 1 + n. i=1 = 2 n 2 2 i + n. i=0 = 2(2 n 1 1) + n. = (2 n 2) + n. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

62 Wspólne podproblemy Udowodnimy, że T (n) 2 n 1, dla każdego n 1. Dla n = 1, T (1) 1 = 2 0. Dla n 2, T (n) 2 n 1 2 i 1 + n. i=1 = 2 n 2 2 i + n. i=0 = 2(2 n 1 1) + n. = (2 n 2) + n. 2 n 1. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

63 Wspólne podproblemy Udowodnimy, że T (n) 2 n 1, dla każdego n 1. Dla n = 1, T (1) 1 = 2 0. Dla n 2, T (n) 2 n 1 2 i 1 + n. i=1 = 2 n 2 2 i + n. i=0 = 2(2 n 1 1) + n. = (2 n 2) + n. 2 n 1. Czas działania procedury R M C (p, 1, n) jest co najmniej wykładniczy ze względu na n. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

64 Spamiętywanie Algorytm rekurencyjny można uzupełnić o mechanizm spamiętywania. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

65 Spamiętywanie Algorytm rekurencyjny można uzupełnić o mechanizm spamiętywania. Podobnie jak w zwyczajnym programowaniu dynamiczny, używamy tu tablicy do zapamiętywania rozwiązań podproblemów, lecz zapełnianie tablicy jest wbudowane w algorytm rekurencyjny. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

66 Spamiętywanie Algorytm rekurencyjny można uzupełnić o mechanizm spamiętywania. Podobnie jak w zwyczajnym programowaniu dynamiczny, używamy tu tablicy do zapamiętywania rozwiązań podproblemów, lecz zapełnianie tablicy jest wbudowane w algorytm rekurencyjny. Każde pole tablicy na początku zawiera wartość oznaczającą, że odpowiadający mu podproblem nie był jeszcze rozwiązywany. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

67 Spamiętywanie Algorytm rekurencyjny można uzupełnić o mechanizm spamiętywania. Podobnie jak w zwyczajnym programowaniu dynamiczny, używamy tu tablicy do zapamiętywania rozwiązań podproblemów, lecz zapełnianie tablicy jest wbudowane w algorytm rekurencyjny. Każde pole tablicy na początku zawiera wartość oznaczającą, że odpowiadający mu podproblem nie był jeszcze rozwiązywany. Gdy podproblem pojawia się w trakcie obliczeń, po raz pierwszy, obliczone rozwiązanie zostaje zapamiętane w odpowiednim polu tablicy. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

68 Spamiętywanie Algorytm rekurencyjny można uzupełnić o mechanizm spamiętywania. Podobnie jak w zwyczajnym programowaniu dynamiczny, używamy tu tablicy do zapamiętywania rozwiązań podproblemów, lecz zapełnianie tablicy jest wbudowane w algorytm rekurencyjny. Każde pole tablicy na początku zawiera wartość oznaczającą, że odpowiadający mu podproblem nie był jeszcze rozwiązywany. Gdy podproblem pojawia się w trakcie obliczeń, po raz pierwszy, obliczone rozwiązanie zostaje zapamiętane w odpowiednim polu tablicy. Każde kolejne wystąpienie tego samego podproblemu nie wymaga ponownych obliczeń. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

69 Spamiętywanie MEMORIZED MATRIX CHAIN(p, i, j) 1: n length[p] 1 2: for i 1 to n do 3: for j i to n do 4: m[i, j] 5: return LOOKUP CHAIN(p, 1, n) (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

70 Spamiętywanie LOOKUP CHAIN(p,1,n) 1: if m[i, j] < then 2: return m[i, j] 3: if i = j then 4: m[i, j] 0 5: else 6: for k i to j 1 do 7: q LOOKUP CHAIN(p, i, k) + LOOKUP CHAIN(p, k + 1, j) + p i 1 p k p j 8: if q < m[i, j] then 9: m[i, j] q 10: return m[i, j] (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

71 Spamiętywanie Procedura M M C działa w czasie O(n 3 ): (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

72 Spamiętywanie Procedura M M C działa w czasie O(n 3 ): Każde z Θ(n 2 ) pól tablicy m zostaje raz zainicjowane w wierszu 4, a następnie raz zmodyfikowane przez jedno wywołanie procedury L C. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

73 Spamiętywanie Procedura M M C działa w czasie O(n 3 ): Każde z Θ(n 2 ) pól tablicy m zostaje raz zainicjowane w wierszu 4, a następnie raz zmodyfikowane przez jedno wywołanie procedury L C. Wywołania procedury L C można podzielić na dwie kategorie: (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

74 Spamiętywanie Procedura M M C działa w czasie O(n 3 ): Każde z Θ(n 2 ) pól tablicy m zostaje raz zainicjowane w wierszu 4, a następnie raz zmodyfikowane przez jedno wywołanie procedury L C. Wywołania procedury L C można podzielić na dwie kategorie: (1) wywołania kiedy m[i, j] =, (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

75 Spamiętywanie Procedura M M C działa w czasie O(n 3 ): Każde z Θ(n 2 ) pól tablicy m zostaje raz zainicjowane w wierszu 4, a następnie raz zmodyfikowane przez jedno wywołanie procedury L C. Wywołania procedury L C można podzielić na dwie kategorie: (1) wywołania kiedy m[i, j] =, (2) wywołania kiedy m[i, j] <. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

76 Spamiętywanie Procedura M M C działa w czasie O(n 3 ): Każde z Θ(n 2 ) pól tablicy m zostaje raz zainicjowane w wierszu 4, a następnie raz zmodyfikowane przez jedno wywołanie procedury L C. Wywołania procedury L C można podzielić na dwie kategorie: (1) wywołania kiedy m[i, j] =, (2) wywołania kiedy m[i, j] <. Wywołań pierwszego typu mamy Θ(n 2 ) - jedno na każdy element tablicy. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

77 Spamiętywanie Procedura M M C działa w czasie O(n 3 ): Każde z Θ(n 2 ) pól tablicy m zostaje raz zainicjowane w wierszu 4, a następnie raz zmodyfikowane przez jedno wywołanie procedury L C. Wywołania procedury L C można podzielić na dwie kategorie: (1) wywołania kiedy m[i, j] =, (2) wywołania kiedy m[i, j] <. Wywołań pierwszego typu mamy Θ(n 2 ) - jedno na każdy element tablicy. Wywołania drugiego typu pojawiają się jako rekurencyjne wywołania w wywołaniach pierwszego typu. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

78 Spamiętywanie Procedura M M C działa w czasie O(n 3 ): Każde z Θ(n 2 ) pól tablicy m zostaje raz zainicjowane w wierszu 4, a następnie raz zmodyfikowane przez jedno wywołanie procedury L C. Wywołania procedury L C można podzielić na dwie kategorie: (1) wywołania kiedy m[i, j] =, (2) wywołania kiedy m[i, j] <. Wywołań pierwszego typu mamy Θ(n 2 ) - jedno na każdy element tablicy. Wywołania drugiego typu pojawiają się jako rekurencyjne wywołania w wywołaniach pierwszego typu. Kiedy w wywołaniu L C pojawiają się wywołania rekurencyjne to jest ich O(n). Łącznie wywołań drugiego typu jest O(n 3 ). (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

79 Spamiętywanie Procedura M M C działa w czasie O(n 3 ): Każde z Θ(n 2 ) pól tablicy m zostaje raz zainicjowane w wierszu 4, a następnie raz zmodyfikowane przez jedno wywołanie procedury L C. Wywołania procedury L C można podzielić na dwie kategorie: (1) wywołania kiedy m[i, j] =, (2) wywołania kiedy m[i, j] <. Wywołań pierwszego typu mamy Θ(n 2 ) - jedno na każdy element tablicy. Wywołania drugiego typu pojawiają się jako rekurencyjne wywołania w wywołaniach pierwszego typu. Kiedy w wywołaniu L C pojawiają się wywołania rekurencyjne to jest ich O(n). Łącznie wywołań drugiego typu jest O(n 3 ). Każde wywołanie drugiego typu zabiera czas O(1), a każde wywołanie pierwszego typu jest wykonywane w czasie O(n) plus czas poświęcony na rekurencję. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

80 Spamiętywanie Procedura M M C działa w czasie O(n 3 ): Każde z Θ(n 2 ) pól tablicy m zostaje raz zainicjowane w wierszu 4, a następnie raz zmodyfikowane przez jedno wywołanie procedury L C. Wywołania procedury L C można podzielić na dwie kategorie: (1) wywołania kiedy m[i, j] =, (2) wywołania kiedy m[i, j] <. Wywołań pierwszego typu mamy Θ(n 2 ) - jedno na każdy element tablicy. Wywołania drugiego typu pojawiają się jako rekurencyjne wywołania w wywołaniach pierwszego typu. Kiedy w wywołaniu L C pojawiają się wywołania rekurencyjne to jest ich O(n). Łącznie wywołań drugiego typu jest O(n 3 ). Każde wywołanie drugiego typu zabiera czas O(1), a każde wywołanie pierwszego typu jest wykonywane w czasie O(n) plus czas poświęcony na rekurencję. Łączny czas działania M M C to O(n 3 ). (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

81 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można rozwiązać w czasie O(n 3 ) zarówno w sposób zstępujący za pomocą algorytmu ze spamiętywaniem, jak i w sposób wstępujący za pomocą algorytmu opartego na programowaniu dynamicznym. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

82 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można rozwiązać w czasie O(n 3 ) zarówno w sposób zstępujący za pomocą algorytmu ze spamiętywaniem, jak i w sposób wstępujący za pomocą algorytmu opartego na programowaniu dynamicznym. W obu podejściach wykorzystana jest własność wspólnych podproblemów. Jest Θ(n 2 ) różnych podproblemów i oba powyższe algorytmy obliczają rozwiązanie każdego podproblemu co najwyżej raz. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

83 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można rozwiązać w czasie O(n 3 ) zarówno w sposób zstępujący za pomocą algorytmu ze spamiętywaniem, jak i w sposób wstępujący za pomocą algorytmu opartego na programowaniu dynamicznym. W obu podejściach wykorzystana jest własność wspólnych podproblemów. Jest Θ(n 2 ) różnych podproblemów i oba powyższe algorytmy obliczają rozwiązanie każdego podproblemu co najwyżej raz. Jeśli wszystkie podproblemy muszą być rozwiązane co najmniej jeden raz, to wstępujący algorytm oparty na programowaniu dynamicznym jest zwykle efektywniejszy o stały czynnik od zstępującego algorytmu ze spamiętywaniem, ponieważ odpada dodatkowy koszt związany z realizacją rekursji, a koszty obsługi tablicy z rozwiązaniami podproblemów są mniejsze. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

84 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można rozwiązać w czasie O(n 3 ) zarówno w sposób zstępujący za pomocą algorytmu ze spamiętywaniem, jak i w sposób wstępujący za pomocą algorytmu opartego na programowaniu dynamicznym. W obu podejściach wykorzystana jest własność wspólnych podproblemów. Jest Θ(n 2 ) różnych podproblemów i oba powyższe algorytmy obliczają rozwiązanie każdego podproblemu co najwyżej raz. Jeśli wszystkie podproblemy muszą być rozwiązane co najmniej jeden raz, to wstępujący algorytm oparty na programowaniu dynamicznym jest zwykle efektywniejszy o stały czynnik od zstępującego algorytmu ze spamiętywaniem, ponieważ odpada dodatkowy koszt związany z realizacją rekursji, a koszty obsługi tablicy z rozwiązaniami podproblemów są mniejsze. Jeśli jednak niektóre podproblemy nie muszą zostać nigdy rozwiązane, to algorytm ze spamiętywaniem może okazać się szybszy, bo oblicza tylko to, co konieczne. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

85 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można zgodnie z algorytmem Hu i Shing rozwiązać w czasie O(n lg(n)). (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

86 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można zgodnie z algorytmem Hu i Shing rozwiązać w czasie O(n lg(n)). Programowanie dynamiczne to skuteczna technika rozwiązywania problemów NP trudnych. (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

87 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można zgodnie z algorytmem Hu i Shing rozwiązać w czasie O(n lg(n)). Programowanie dynamiczne to skuteczna technika rozwiązywania problemów NP trudnych. Typowe problemy rozwiązywane za pomocą programowania dynamicznego: (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

88 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można zgodnie z algorytmem Hu i Shing rozwiązać w czasie O(n lg(n)). Programowanie dynamiczne to skuteczna technika rozwiązywania problemów NP trudnych. Typowe problemy rozwiązywane za pomocą programowania dynamicznego: Najdłuższy wspólny podciąg, (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

89 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można zgodnie z algorytmem Hu i Shing rozwiązać w czasie O(n lg(n)). Programowanie dynamiczne to skuteczna technika rozwiązywania problemów NP trudnych. Typowe problemy rozwiązywane za pomocą programowania dynamicznego: Najdłuższy wspólny podciąg, Problem plecakowy, (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

90 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można zgodnie z algorytmem Hu i Shing rozwiązać w czasie O(n lg(n)). Programowanie dynamiczne to skuteczna technika rozwiązywania problemów NP trudnych. Typowe problemy rozwiązywane za pomocą programowania dynamicznego: Najdłuższy wspólny podciąg, Problem plecakowy, Algorytm Floyda-Warshalla - wyszukiwania najkrótszych ścieżek pomiędzy wszystkimi parami wierzchołków w grafie ważonym, (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

91 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można zgodnie z algorytmem Hu i Shing rozwiązać w czasie O(n lg(n)). Programowanie dynamiczne to skuteczna technika rozwiązywania problemów NP trudnych. Typowe problemy rozwiązywane za pomocą programowania dynamicznego: Najdłuższy wspólny podciąg, Problem plecakowy, Algorytm Floyda-Warshalla - wyszukiwania najkrótszych ścieżek pomiędzy wszystkimi parami wierzchołków w grafie ważonym, Algorytm znajdujący cykl Hamiltona (problem komiwojażera), (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

92 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można zgodnie z algorytmem Hu i Shing rozwiązać w czasie O(n lg(n)). Programowanie dynamiczne to skuteczna technika rozwiązywania problemów NP trudnych. Typowe problemy rozwiązywane za pomocą programowania dynamicznego: Najdłuższy wspólny podciąg, Problem plecakowy, Algorytm Floyda-Warshalla - wyszukiwania najkrótszych ścieżek pomiędzy wszystkimi parami wierzchołków w grafie ważonym, Algorytm znajdujący cykl Hamiltona (problem komiwojażera), Algorytm Bellmana-Forda - wyszukiwania najkrótszych ścieżek w grafie ważonym z wierzchołka źródłowego do wszystkich pozostałych wierzchołków (baza dla protokołu RIP - Routing Information Protocol), (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

93 Programowanie dynamiczne - podsumowanie Problem optymalnego nawiasowania iloczynu ciągu macierzy można zgodnie z algorytmem Hu i Shing rozwiązać w czasie O(n lg(n)). Programowanie dynamiczne to skuteczna technika rozwiązywania problemów NP trudnych. Typowe problemy rozwiązywane za pomocą programowania dynamicznego: Najdłuższy wspólny podciąg, Problem plecakowy, Algorytm Floyda-Warshalla - wyszukiwania najkrótszych ścieżek pomiędzy wszystkimi parami wierzchołków w grafie ważonym, Algorytm znajdujący cykl Hamiltona (problem komiwojażera), Algorytm Bellmana-Forda - wyszukiwania najkrótszych ścieżek w grafie ważonym z wierzchołka źródłowego do wszystkich pozostałych wierzchołków (baza dla protokołu RIP - Routing Information Protocol),... (Wykład 7) Programowanie dynamiczne cz kwietnia / 19

Programowanie dynamiczne (optymalizacja dynamiczna).

Programowanie dynamiczne (optymalizacja dynamiczna). Programowanie dynamiczne (optymalizacja dynamiczna). W wielu przypadkach zadania, których złożoność wynikająca z pełnego przeglądu jest duża (zwykle wyk ładnicza) można rozwiązać w czasie wielomianowym

Bardziej szczegółowo

Techniki konstruowania algorytmów. Metoda dziel i zwyciężaj

Techniki konstruowania algorytmów. Metoda dziel i zwyciężaj Techniki konstruowania algorytmów Metoda dziel i zwyciężaj Technika dziel i zwyciężaj Aby rozwiązać problem techniką dziel i zwyciężaj musi on wykazywać własność podstruktury rozwiązanie problemu można

Bardziej szczegółowo

Schemat programowania dynamicznego (ang. dynamic programming)

Schemat programowania dynamicznego (ang. dynamic programming) Schemat programowania dynamicznego (ang. dynamic programming) Jest jedną z metod rozwiązywania problemów optymalizacyjnych. Jej twórcą (1957) był amerykański matematyk Richard Ernest Bellman. Schemat ten

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Algorytmy i Struktury Danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 9: Programowanie

Bardziej szczegółowo

Temat: Algorytmy zachłanne

Temat: Algorytmy zachłanne Temat: Algorytmy zachłanne Algorytm zachłanny ( ang. greedy algorithm) wykonuje zawsze działanie, które wydaje się w danej chwili najkorzystniejsze. Wybiera zatem lokalnie optymalną możliwość w nadziei,

Bardziej szczegółowo

Projektowanie i analiza algorytmów

Projektowanie i analiza algorytmów POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Projektowanie i analiza algorytmów www.pk.edu.pl/~zk/piaa_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład

Bardziej szczegółowo

Algorytmy i struktury danych.

Algorytmy i struktury danych. Algorytmy i struktury danych. Wykład 4 Krzysztof M. Ocetkiewicz Krzysztof.Ocetkiewicz@eti.pg.gda.pl Katedra Algorytmów i Modelowania Systemów, WETI, PG Problem plecakowy mamy plecak o określonej pojemności

Bardziej szczegółowo

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew 1. ( pkt) Dany jest algorytm, który dla dowolnej liczby naturalnej n, powinien wyznaczyd sumę kolejnych liczb naturalnych mniejszych od n. Wynik algorytmu jest zapisany w zmiennej suma. Algorytm i=1; suma=0;

Bardziej szczegółowo

Programowanie dynamiczne i algorytmy zachłanne

Programowanie dynamiczne i algorytmy zachłanne Programowanie dynamiczne i algorytmy zachłanne Tomasz Głowacki tglowacki@cs.put.poznan.pl Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia na Politechnice Poznańskiej w zakresie technologii

Bardziej szczegółowo

Wstęp do Programowania potok funkcyjny

Wstęp do Programowania potok funkcyjny i programowanie dynamiczne Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 i programowanie dynamiczne Outline 1 i programowanie dynamiczne i programowanie dynamiczne Rekurencyjny zapis rozwiązania

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Algorytmy zachłanne, programowanie dynamiczne Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. IX Jesień 2014 1 / 26 Algorytmy zachłanne Strategia polegająca

Bardziej szczegółowo

Programowanie dynamiczne

Programowanie dynamiczne Programowanie dynamiczne Ciąg Fibonacciego fib(0)=1 fib(1)=1 fib(n)=fib(n-1)+fib(n-2), gdzie n 2 Elementy tego ciągu stanowią liczby naturalne tworzące ciąg o takiej własności, że kolejny wyraz (z wyjątkiem

Bardziej szczegółowo

Sortowanie przez scalanie

Sortowanie przez scalanie Sortowanie przez scalanie Wykład 2 12 marca 2019 (Wykład 2) Sortowanie przez scalanie 12 marca 2019 1 / 17 Outline 1 Metoda dziel i zwyciężaj 2 Scalanie Niezmiennik pętli - poprawność algorytmu 3 Sortowanie

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Programowanie dynamiczne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. X Jesień 2013 1 / 21 Dziel i zwyciężaj przypomnienie 1 Podział problemu na 2 lub

Bardziej szczegółowo

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki Porównanie algorytmów wyszukiwania najkrótszych ścieżek między wierzchołkami grafu. Instytut Informatyki 22 listopada 2015 Algorytm DFS w głąb Algorytm przejścia/przeszukiwania w głąb (ang. Depth First

Bardziej szczegółowo

Wykład 10 Grafy, algorytmy grafowe

Wykład 10 Grafy, algorytmy grafowe . Typy złożoności obliczeniowej Wykład Grafy, algorytmy grafowe Typ złożoności oznaczenie n Jedna operacja trwa µs 5 logarytmiczna lgn. s. s.7 s liniowa n. s.5 s. s Logarytmicznoliniowa nlgn. s.8 s.4 s

Bardziej szczegółowo

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących

Bardziej szczegółowo

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne Algorytmy i struktury danych Wykład VIII Elementarne techniki algorytmiczne Co dziś? Algorytmy zachłanne (greedyalgorithms) 2 Tytułem przypomnienia metoda dziel i zwyciężaj. Problem można podzielić na

Bardziej szczegółowo

Wykład 3. Metoda dziel i zwyciężaj

Wykład 3. Metoda dziel i zwyciężaj Wykład 3 Metoda dziel i zwyciężaj 1 Wprowadzenie Technika konstrukcji algorytmów dziel i zwyciężaj. przykładowe problemy: Wypełnianie planszy Poszukiwanie (binarne) Sortowanie (sortowanie przez łączenie

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott Metody konstrukcji algorytmów: Siłowa (ang. brute force), Dziel i zwyciężaj (ang. divide-and-conquer), Zachłanna (ang.

Bardziej szczegółowo

INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA.

INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA. INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA http://www.infoceram.agh.edu.pl Klasy metod algorytmicznych Metoda TOP-DOWN (zstępująca, analityczna) Metoda BOTTOM-UP (wstępująca, syntetyczna)

Bardziej szczegółowo

Strategia "dziel i zwyciężaj"

Strategia dziel i zwyciężaj Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań teoretycznych z egzaminów. Strona 1 z 12 Pytania teoretyczne z egzaminu pisemnego z 25 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 4a: Rozwiązywanie rekurencji http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Czas działania programu Dla konkretnych

Bardziej szczegółowo

Algorytmy i struktury danych IS/IO, WIMiIP

Algorytmy i struktury danych IS/IO, WIMiIP Algorytmy i struktury danych IS/IO, WIMiIP Danuta Szeliga AGH Kraków Spis treści I 1 Algorytmy i struktury danych 2 Spis treści 3 Organizacja zajęć 4 Literatura 5 Pojęcia podstawowe Rozwiązywanie problemu

Bardziej szczegółowo

Programowanie dynamiczne

Programowanie dynamiczne Programowanie dynamiczne Programowanie rekurencyjne: ZALETY: - prostota - naturalność sformułowania WADY: - trudność w oszacowaniu zasobów (czasu i pamięci) potrzebnych do realizacji Czy jest możliwe wykorzystanie

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 03/0 Przeszukiwanie w głąb i wszerz I Przeszukiwanie metodą

Bardziej szczegółowo

Wybrane podstawowe rodzaje algorytmów

Wybrane podstawowe rodzaje algorytmów Wybrane podstawowe rodzaje algorytmów Tomasz Głowacki tglowacki@cs.put.poznan.pl Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia na Politechnice Poznańskiej w zakresie technologii informatycznych

Bardziej szczegółowo

Złożoność obliczeniowa zadania, zestaw 2

Złożoność obliczeniowa zadania, zestaw 2 Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze

Bardziej szczegółowo

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie: Rekurencje Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie: T(n) = Θ(1) (dla n = 1) T(n) = 2 T(n/2) + Θ(n) (dla n

Bardziej szczegółowo

Algorytmy wyznaczania centralności w sieci Szymon Szylko

Algorytmy wyznaczania centralności w sieci Szymon Szylko Algorytmy wyznaczania centralności w sieci Szymon Szylko Zakład systemów Informacyjnych Wrocław 10.01.2008 Agenda prezentacji Cechy sieci Algorytmy grafowe Badanie centralności Algorytmy wyznaczania centralności

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI 16/01/2017 WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Repetytorium złożoność obliczeniowa 2 Złożoność obliczeniowa Notacja wielkie 0 Notacja Ω i Θ Rozwiązywanie

Bardziej szczegółowo

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania Politechnika Poznańska Modele i narzędzia optymalizacji w systemach informatycznych zarządzania Joanna Józefowska POZNAŃ 2010/11 Spis treści Rozdział 1. Metoda programowania dynamicznego........... 5

Bardziej szczegółowo

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy:

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy: Temat: Powtórzenie wiadomości z PODSTAW INFORMATYKI I: Pojęcia: złożoność czasowa algorytmu, rząd funkcji kosztu. Algorytmy. Metody programistyczne. Struktury danych. Literatura. A. V. Aho, J.E. Hopcroft,

Bardziej szczegółowo

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Sortowanie danych. Jolanta Bachan. Podstawy programowania Sortowanie danych Podstawy programowania 2013-06-06 Sortowanie przez wybieranie 9 9 9 9 9 9 10 7 7 7 7 7 10 9 1 3 3 4 10 7 7 10 10 10 10 4 4 4 4 4 4 3 3 3 3 2 2 2 2 2 2 2 3 1 1 1 1 1 1 Gurbiel et al. 2000

Bardziej szczegółowo

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Metoda Dziel i zwyciężaj. Problem Sortowania, cd. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 2 Bożena Woźna-Szcześniak (AJD) Algorytmy

Bardziej szczegółowo

Podejście zachłanne, a programowanie dynamiczne

Podejście zachłanne, a programowanie dynamiczne Podejście zachłanne, a programowanie dynamiczne Algorytm zachłanny pobiera po kolei elementy danych, za każdym razem wybierając taki, który wydaje się najlepszy w zakresie spełniania pewnych kryteriów

Bardziej szczegółowo

Algorytmika Problemów Trudnych

Algorytmika Problemów Trudnych Algorytmika Problemów Trudnych Wykład 9 Tomasz Krawczyk krawczyk@tcs.uj.edu.pl Kraków, semestr letni 2016/17 plan wykładu Algorytmy aproksymacyjne: Pojęcie algorytmu aproksymacyjnego i współczynnika aproksymowalności.

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

Analiza algorytmów zadania podstawowe Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą

Bardziej szczegółowo

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1 Wykład Algorytmy grafowe metoda zachłanna. Właściwości algorytmu zachłannego:. W przeciwieństwie do metody programowania dynamicznego nie występuje etap dzielenia na mniejsze realizacje z wykorzystaniem

Bardziej szczegółowo

Ćwiczenie 3 Programowanie dynamiczne

Ćwiczenie 3 Programowanie dynamiczne Ćwiczenie 3 Programowanie dynamiczne [źródło: Wprowadzenie do algorytmów, T.H. Cormen, Ch.E. Leiserson, R.L.Rivest, Wyd. Naukowo-Techniczne Warszawa, 2001; ZłoŜoność obliczeniowa problemów kombinatorycznych,

Bardziej szczegółowo

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n ) SORTOWANIE 1 SORTOWANIE Proces ustawiania zbioru elementów w określonym porządku. Stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. 2 Definicja Ciąg wejściowy: a 1,

Bardziej szczegółowo

Technologie informacyjne Wykład VII-IX

Technologie informacyjne Wykład VII-IX Technologie informacyjne -IX A. Matuszak 19 marca 2013 A. Matuszak Technologie informacyjne -IX Rekurencja A. Matuszak (2) Technologie informacyjne -IX Gotowanie jajek na miękko weż czysty garnek włóż

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 9 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Zasada dziel i zwyciężaj Przykłady znajdowanie

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Algorytmy zachłanne, algoritme Dijkstry Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XI Jesień 2013 1 / 25 Algorytmy zachłanne Strategia polegająca na

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Algorytmy zachłanne. dr inż. Urszula Gałązka

Algorytmy zachłanne. dr inż. Urszula Gałązka Algorytmy zachłanne dr inż. Urszula Gałązka Algorytm zachłanny O Dokonuje wyboru, który w danej chwili wydaje się najkorzystniejszy. O Mówimy, że jest to wybór lokalnie optymalny O W rzeczywistości nie

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Rekurencja, metoda dziel i zwyciężaj Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 1 / 27 Rekurencja Recursion See Recursion. P. Daniluk(Wydział

Bardziej szczegółowo

Złożoność obliczeniowa klasycznych problemów grafowych

Złożoność obliczeniowa klasycznych problemów grafowych Złożoność obliczeniowa klasycznych problemów grafowych Oznaczenia: G graf, V liczba wierzchołków, E liczba krawędzi 1. Spójność grafu Graf jest spójny jeżeli istnieje ścieżka łącząca każdą parę jego wierzchołków.

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Wykład 2 2 Problemy algorytmiczne Klasy problemów algorytmicznych Liczby Fibonacciego Przeszukiwanie tablic Największy

Bardziej szczegółowo

Efektywna metoda sortowania sortowanie przez scalanie

Efektywna metoda sortowania sortowanie przez scalanie Efektywna metoda sortowania sortowanie przez scalanie Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Metoda dziel i zwycięŝaj Dzielimy

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 7 Prof. dr hab. inż. Jan Magott Problemy NP-zupełne Transformacją wielomianową problemu π 2 do problemu π 1 (π 2 π 1 ) jest funkcja f: D π2 D π1 spełniająca

Bardziej szczegółowo

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Wykład 4. Określimy teraz pewną ważną klasę pierścieni. Wykład 4 Określimy teraz pewną ważną klasę pierścieni. Twierdzenie 1 Niech m, n Z. Jeśli n > 0 to istnieje dokładnie jedna para licz q, r, że: m = qn + r, 0 r < n. Liczbę r nazywamy resztą z dzielenia

Bardziej szczegółowo

Wykorzystanie algorytmów mrówkowych w dynamicznym problem

Wykorzystanie algorytmów mrówkowych w dynamicznym problem Wykorzystanie algorytmów mrówkowych w dynamicznym problemie marszrutyzacji Promotor: dr inż. Aneta Poniszewska-Marańda Współpromotor: mgr inż. Łukasz Chomątek 18 stycznia 2013 Przedmiot i cele pracy dyplomowej

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Złożoność obliczeniowa, poprawność programów Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XII Jesień 2013 1 / 20 Złożoność obliczeniowa Problem Ile czasu

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Wykład 14c 2 Definicje indukcyjne Twierdzenia dowodzone przez indukcje Definicje indukcyjne Definicja drzewa

Bardziej szczegółowo

Heurystyczne metody przeszukiwania

Heurystyczne metody przeszukiwania Heurystyczne metody przeszukiwania Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Pojęcie heurystyki Metody heurystyczne są jednym z ważniejszych narzędzi sztucznej inteligencji.

Bardziej szczegółowo

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott Struktury danych i złozoność obliczeniowa Prof. dr hab. inż. Jan Magott Formy zajęć: Wykład 1 godz., Ćwiczenia 1 godz., Projekt 2 godz.. Adres strony z materiałami do wykładu: http://www.zio.iiar.pwr.wroc.pl/sdizo.html

Bardziej szczegółowo

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Egzamin, AISDI, I termin, 18 czerwca 2015 r. Egzamin, AISDI, I termin, 18 czerwca 2015 r. 1 W czasie niezależnym do danych wejściowych działają algorytmy A. sortowanie bąbelkowego i Shella B. sortowanie szybkiego i przez prosty wybór C. przez podział

Bardziej szczegółowo

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II Wykład 6. Drzewa cz. II 1 / 65 drzewa spinające Drzewa spinające Zliczanie drzew spinających Drzewo T nazywamy drzewem rozpinającym (spinającym) (lub dendrytem) spójnego grafu G, jeżeli jest podgrafem

Bardziej szczegółowo

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie Więcej o sprawności algorytmów Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie Załóżmy, że możemy wykonać dane zadanie przy użyciu dwóch algorytmów: jednego o złożoności czasowej

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Algorytm 1. Termin algorytm jest używany w informatyce

Bardziej szczegółowo

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s]. Zadanie 1. Wiązka zadań Od szczegółu do ogółu Rozważmy następujący algorytm: Dane: Algorytm 1: k liczba naturalna, A[1...2 k ] tablica liczb całkowitych. n 1 dla i=1,2,,k wykonuj n 2n s 1 dopóki s

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 5 Prof. dr hab. inż. Jan Magott DMT rozwiązuje problem decyzyjny π przy kodowaniu e w co najwyżej wielomianowym czasie, jeśli dla wszystkich łańcuchów wejściowych

Bardziej szczegółowo

Wykład 5 Dopasowywanie lokalne

Wykład 5 Dopasowywanie lokalne Wykład 5 Dopasowywanie lokalne Dopasowanie par (sekwencji) Dopasowanie globalne C A T W A L K C A T W A L K C O W A R D C X X O X W X A X R X D X Globalne dopasowanie Schemat punktowania (uproszczony)

Bardziej szczegółowo

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność

Bardziej szczegółowo

a) 7 b) 19 c) 21 d) 34

a) 7 b) 19 c) 21 d) 34 Zadanie 1. Pytania testowe dotyczące podstawowych własności grafów. Zadanie 2. Przy każdym z zadań może się pojawić polecenie krótkiej charakterystyki algorytmu. Zadanie 3. W zadanym grafie sprawdzenie

Bardziej szczegółowo

Programowanie dynamiczne

Programowanie dynamiczne Programowanie dynamiczne Patryk Żywica 5 maja 2008 1 Spis treści 1 Problem wydawania reszty 3 1.1 Sformułowanie problemu...................... 3 1.2 Algorytm.............................. 3 1.2.1 Prosty

Bardziej szczegółowo

Problem skoczka szachowego i inne cykle Hamiltona na szachownicy n x n

Problem skoczka szachowego i inne cykle Hamiltona na szachownicy n x n i inne cykle Hamiltona na szachownicy n x n Uniwersytet Warszawski 15 marca 2007 Agenda 1 2 naiwne Prosty algorytm liniowy 3 Problem znany był już od bardzo dawna, jako łamigłówka logiczna. Był też stosowany

Bardziej szczegółowo

1 Wprowadzenie do algorytmiki

1 Wprowadzenie do algorytmiki Teoretyczne podstawy informatyki - ćwiczenia: Prowadzący: dr inż. Dariusz W Brzeziński 1 Wprowadzenie do algorytmiki 1.1 Algorytm 1. Skończony, uporządkowany ciąg precyzyjnie i zrozumiale opisanych czynności

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych POLITECHNIKA KRAKOWSKA WYDZIAŁ INŻYNIERII ELEKTRYCZNEJ i KOMPUTEROWEJ Katedra Automatyki i Technik Informacyjnych Algorytmy i Struktury Danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew

Bardziej szczegółowo

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

Matematyka dyskretna. Andrzej Łachwa, UJ, /15 Matematyka dyskretna Andrzej Łachwa, UJ, 2013 andrzej.lachwa@uj.edu.pl 6/15 Sumy Oto dwie konwencje zapisu skończonych sum wyrazów: (notacja Sigma, Fourier, 1820) Czasami stosowana jest ogólniejsza notacja,

Bardziej szczegółowo

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) 16.01.2003 Algorytmy i Struktury Danych PIŁA ALGORYTMY ZACHŁANNE czas [ms] Porównanie Algorytmów Rozwiązyjących problem TSP 100 000 000 000,000 10 000 000

Bardziej szczegółowo

KARTA MODUŁU KSZTAŁCENIA

KARTA MODUŁU KSZTAŁCENIA KARTA MODUŁU KSZTAŁCENIA I. Informacje ogólne 1 Nazwa modułu kształcenia Algorytmy i struktury danych 2 Nazwa jednostki prowadzącej moduł Instytut Informatyki, Zakład Informatyki Stosowanej 3 Kod modułu

Bardziej szczegółowo

Wykład 5. Metoda eliminacji Gaussa

Wykład 5. Metoda eliminacji Gaussa 1 Wykład 5 Metoda eliminacji Gaussa Rozwiązywanie układów równań liniowych Układ równań liniowych może mieć dokładnie jedno rozwiązanie, nieskończenie wiele rozwiązań lub nie mieć rozwiązania. Metody dokładne

Bardziej szczegółowo

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Pseudokod: silnia(n): jeżeli n == 0 silnia = 1 w przeciwnym

Bardziej szczegółowo

Teoria obliczeń i złożoność obliczeniowa

Teoria obliczeń i złożoność obliczeniowa Teoria obliczeń i złożoność obliczeniowa Kontakt: dr hab. inż. Adam Kasperski, prof. PWr. pokój 509 B4 adam.kasperski@pwr.wroc.pl materiały + informacje na stronie www. Zaliczenie: Egzamin Literatura Problemy

Bardziej szczegółowo

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami dr inż. Mariusz Uchroński Wrocławskie Centrum Sieciowo-Superkomputerowe Agenda Cykliczny problem przepływowy

Bardziej szczegółowo

Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa

Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa M. Czoków, J. Piersa 2012-01-10 1 Łańcucha Markowa 2 Istnienie Szukanie stanu stacjonarnego 3 1 Łańcucha Markowa 2 Istnienie Szukanie stanu stacjonarnego

Bardziej szczegółowo

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel Wstęp do programowania Dziel i rządź Piotr Chrząstowski-Wachtel Divide et impera Starożytni Rzymianie znali tę zasadę Łatwiej się rządzi, jeśli poddani są podzieleni Nie chodziło im jednak bynajmniej o

Bardziej szczegółowo

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne). [12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne). Tworzenie projektów informatycznych opiera się w dużej mierze na formułowaniu i implementacji algorytmów,

Bardziej szczegółowo

Podstawy Informatyki. Sprawność algorytmów

Podstawy Informatyki. Sprawność algorytmów Podstawy Informatyki Sprawność algorytmów Sprawność algorytmów Kryteria oceny oszczędności Miara złożoności rozmiaru pamięci (złożoność pamięciowa): Liczba zmiennych + liczba i rozmiar struktur danych

Bardziej szczegółowo

//warunki początkowe m=500; T=30; c=0.4; t=linspace(0,t,m); y0=[-2.5;2.5];

//warunki początkowe m=500; T=30; c=0.4; t=linspace(0,t,m); y0=[-2.5;2.5]; 4.3. Przykłady wykorzystania funkcji bibliotecznych 73 MATLAB % definiowanie funkcji function [dx]=vderpol(t,y) global c; dx=[y(2); c*(1-y(1)^2)*y(2)-y(1)]; SCILAB // definiowanie układu function [f]=vderpol(t,y,c)

Bardziej szczegółowo

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Matematyka dyskretna. Andrzej Łachwa, UJ, /14 Matematyka dyskretna Andrzej Łachwa, UJ, 2016 andrzej.lachwa@uj.edu.pl 6/14 Sumy Oto dwie konwencje zapisu skończonych sum wyrazów: (notacja Sigma, Fourier, 1820) Czasami stosowana jest ogólniejsza notacja,

Bardziej szczegółowo

Algorytmy Grafowe. dr hab. Bożena Woźna-Szcześniak, prof. UJD. Wykład 5 i 6. Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie

Algorytmy Grafowe. dr hab. Bożena Woźna-Szcześniak, prof. UJD. Wykład 5 i 6. Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie Algorytmy Grafowe dr hab. Bożena Woźna-Szcześniak, prof. UJD Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie b.wozna@ujd.edu.pl Wykład 5 i 6 B. Woźna-Szcześniak (UJD) Algorytmy

Bardziej szczegółowo

Egzamin z Metod Numerycznych ZSI, Egzamin, Gr. A

Egzamin z Metod Numerycznych ZSI, Egzamin, Gr. A Egzamin z Metod Numerycznych ZSI, 06.2007. Egzamin, Gr. A Imię i nazwisko: Nr indeksu: Section 1. Test wyboru, max 33 pkt Zaznacz prawidziwe odpowiedzi literą T, a fałszywe N. Każda prawidłowa odpowiedź

Bardziej szczegółowo

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Wieczorowe Studia Licencjackie Wrocław, 7.11.2006 Wstęp do programowania Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Zaprezentujemy teraz algorytm na wyznaczanie wszystkich

Bardziej szczegółowo

Politechnika Wrocławska. Dopasowywanie sekwencji Sequence alignment

Politechnika Wrocławska. Dopasowywanie sekwencji Sequence alignment Dopasowywanie sekwencji Sequence alignment Drzewo filogenetyczne Kserokopiarka zadanie: skopiować 300 stron. Co może pójść źle? 2x ta sama strona Opuszczona strona Nadmiarowa pusta strona Strona do góry

Bardziej szczegółowo

Przykłady problemów optymalizacyjnych

Przykłady problemów optymalizacyjnych Przykłady problemów optymalizacyjnych NAJKRÓTSZA ŚCIEŻKA W zadanym grafie G = (V, A) wyznacz najkrótsza ścieżkę od wierzchołka s do wierzchołka t. 2 7 5 5 3 9 5 s 8 3 1 t 2 2 5 5 1 5 4 Przykłady problemów

Bardziej szczegółowo

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Algorytmika i programowanie Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Tablice Tablica jest zbiorem elementów tego samego typu. Każdy element jest identyfikowany (numer

Bardziej szczegółowo

Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A

Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A Zadanie do wykonania 1) Utwórz na pulpicie katalog w formacie Imię nazwisko, w którym umieść wszystkie pliki związane z

Bardziej szczegółowo

Metoda podziału i ograniczeń

Metoda podziału i ograniczeń Seminarium: Algorytmy heurystyczne Metoda podziału i ograniczeń Mateusz Łyczek Wrocław, 16 marca 011 r. 1 Metoda podziału i ograniczeń Metoda podziału i ograniczeń służy do rozwiązywania problemów optymalizacyjnych.

Bardziej szczegółowo

Algorytmy i struktury danych Metody programowania Języki i paradygmaty programowania Nazwa jednostki prowadzącej przedmiot Instytut Matematyki

Algorytmy i struktury danych Metody programowania Języki i paradygmaty programowania Nazwa jednostki prowadzącej przedmiot Instytut Matematyki OPIS MODUŁU KSZTAŁCENIA (przedmiot lub grupa przedmiotów) Nazwa modułu/ przedmiotu Przedmiot/y Algorytmy i metody Algorytmy i struktury danych Metody Języki i paradygmaty Nazwa jednostki prowadzącej przedmiot

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: I KARTA PRZEDMIOTU CEL PRZEDMIOTU PRZEWODNIK PO PRZEDMIOCIE C1. Podniesienie poziomu wiedzy studentów z zagadnień dotyczących analizy i syntezy algorytmów z uwzględnieniem efektywności

Bardziej szczegółowo

Wykład z modelowania matematycznego. Zagadnienie transportowe.

Wykład z modelowania matematycznego. Zagadnienie transportowe. Wykład z modelowania matematycznego. Zagadnienie transportowe. 1 Zagadnienie transportowe zostało sformułowane w 1941 przez F.L.Hitchcocka. Metoda rozwiązania tego zagadnienia zwana algorytmem transportowymópracowana

Bardziej szczegółowo

Rekurencja. Przygotowała: Agnieszka Reiter

Rekurencja. Przygotowała: Agnieszka Reiter Rekurencja Przygotowała: Agnieszka Reiter Definicja Charakterystyczną cechą funkcji (procedury) rekurencyjnej jest to, że wywołuje ona samą siebie. Drugą cechą rekursji jest jej dziedzina, którą mogą być

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

Analiza algorytmów zadania podstawowe Analiza algorytmów zadania podstawowe 15 stycznia 2019 Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r P Jaka wartość zostanie zwrócona

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Drzewa poszukiwań binarnych 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów

Bardziej szczegółowo

Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie:

Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie: Ciągi rekurencyjne Zadanie 1 Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie: w dwóch przypadkach: dla i, oraz dla i. Wskazówka Należy poszukiwać rozwiązania w postaci, gdzie

Bardziej szczegółowo

Wykład 4. Droga i cykl Eulera i Hamiltona

Wykład 4. Droga i cykl Eulera i Hamiltona Wykład 4. i Hamiltona Wykład 4. i Hamiltona 1 / 35 Grafy Eulera Niech G będzie grafem spójnym. Definicja Jeżeli w grafie G istnieje zamknięta droga prosta zawierająca wszystkie krawędzie grafu, to taką

Bardziej szczegółowo