Projektowanie i analiza algorytmów

Podobne dokumenty
Algorytmy i Struktury Danych

Algorytmy i Struktury Danych

Schemat programowania dynamicznego (ang. dynamic programming)

Projektowanie i Analiza Algorytmów

Programowanie dynamiczne cz. 2

Algorytmy i struktury danych.

Zaawansowane algorytmy i struktury danych

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

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Projektowanie i analiza algorytmów

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

Programowanie dynamiczne

Programowanie dynamiczne (optymalizacja dynamiczna).

Temat: Algorytmy zachłanne

Matematyczne Podstawy Informatyki

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

Wstęp do programowania

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

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

Teoretyczne podstawy informatyki

Wstęp do programowania

Efektywność Procedur Obliczeniowych. wykład 5

9. Schematy aproksymacyjne

Technologie Informacyjne

Programowanie dynamiczne i algorytmy zachłanne

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

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

Metody Programowania

Wykład 10 Grafy, algorytmy grafowe

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

TEORETYCZNE PODSTAWY INFORMATYKI

Ćwiczenie 3 Programowanie dynamiczne

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

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

Macierze. Rozdział Działania na macierzach

PRZEWODNIK PO PRZEDMIOCIE

TEORETYCZNE PODSTAWY INFORMATYKI

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

Zał nr 4 do ZW. Dla grupy kursów zaznaczyć kurs końcowy. Liczba punktów ECTS charakterze praktycznym (P)

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA.

Wstęp do Programowania potok funkcyjny

Teoretyczne podstawy informatyki

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy i struktury danych

KARTA MODUŁU KSZTAŁCENIA

Programowanie dynamiczne

1 Macierze i wyznaczniki

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

Optymalizacja. Algorytmy dokładne

Analiza numeryczna Kurs INP002009W. Wykłady 6 i 7 Rozwiązywanie układów równań liniowych. Karol Tarnowski A-1 p.

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

Wstęp do programowania

ALGORYTMY I STRUKTURY DANYCH

Obliczenia iteracyjne

Modele Obliczeń. Wykład 1 - Wprowadzenie. Marcin Szczuka. Instytut Matematyki, Uniwersytet Warszawski

O MACIERZACH I UKŁADACH RÓWNAŃ

Wykład 5. Metoda eliminacji Gaussa

Ekoenergetyka Matematyka 1. Wykład 3.

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

Obliczenia naukowe Wykład nr 8

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Algorytmy i struktury danych

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

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

Macierze - obliczanie wyznacznika macierzy z użyciem permutacji

Wybrane podstawowe rodzaje algorytmów

Analiza algorytmów zadania podstawowe

Algorytmy i struktury danych IS/IO, WIMiIP

Metody Programowania

Technologie Informacyjne

Rozdział 5. Macierze. a 11 a a 1m a 21 a a 2m... a n1 a n2... a nm

Rekurencja/rekursja. Iluzja istnienia wielu kopii tego samego algorytmu (aktywacji) Tylko jedna aktywacja jest aktywna w danej chwili

Programowanie dynamiczne

Technologia informacyjna Algorytm Janusz Uriasz

TEORETYCZNE PODSTAWY INFORMATYKI

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Realizacja w roku akademickim 2016/17

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Algorytmy i struktury danych. wykład 2

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

O rekurencji i nie tylko

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Algorytmy i Struktury Danych.

Algorytmy dla maszyny PRAM

Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych

15. Macierze. Definicja Macierzy. Definicja Delty Kroneckera. Definicja Macierzy Kwadratowej. Definicja Macierzy Jednostkowej

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Definicja macierzy Typy i właściwości macierzy Działania na macierzach Wyznacznik macierzy Macierz odwrotna Normy macierzy RACHUNEK MACIERZOWY

Układy równań liniowych

Programowanie liniowe

Sztuczna inteligencja

Przetwarzanie i transmisja danych multimedialnych. Wykład 7 Transformaty i kodowanie. Przemysław Sękalski.

Algorytmy i Struktury Danych.

Podstawy programowania. Podstawy C# Przykłady algorytmów

Podejście zachłanne, a programowanie dynamiczne

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Algorytmika Problemów Trudnych

Matematyka dyskretna. Andrzej Łachwa, UJ, A/15

Sortowanie - wybrane algorytmy

Transkrypt:

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 3: Programowanie dynamiczne 1. Wprowadzenie. 2. Idea programowania dynamicznego. 3. Wyznaczanie wartości ciągów metodą programowania dynamicznego: silnia, liczby Fibonacciego, współczynniki dwumienne, liczby Stirlinga. 4. Inne algorytmy programowania dynamicznego: problem podziału zbioru, dyskretny problem plecakowy, problem iloczynu łańcucha macierzy. 5. Wymagania czasowe i pamięciowe algorytmów programowania dynamicznego.

Pojęcie programowania dynamicznego Programowanie dynamiczne jest to metoda rozwiązywania problemów optymalizacyjnych dekomponowalnych rekurencyjnie na podproblemy, obejmująca cztery podstawowe kroki: 1. scharakteryzowanie struktury rozwiązania optymalnego 2. rekurencyjne określenie kosztu rozwiązania optymalnego 3. obliczenie kosztu optymalnego metodą wstępującą (bottom-up) 4. opracowanie rozwiązania optymalnego na postawie wyników wcześniejszych obliczeń Uwaga: w odróżnieniu od metody dziel i zwycieżaj podproblemy nie są na ogół rozłączne a liczba różnych podproblemów jest wielomianowa. Twórcą metody programowania dynamicznego jest Richard Bellman.

Własność optymalnej podstruktury Własność optymalnej podstruktury jest własnością problemów, które można rozwiązywać za pomocą algorytmów. Mówi się, że dany problem ma własność optymalnej podstruktury, jeżeli jego optymalne rozwiązania jest funkcją optymalnych rozwiązań podproblemów. Jeżeli problem wykazuje własność optymalnej podstruktury, to zazwyczaj można znaleźć rozwiązujący go algorytm dynamiczny, a czasem zachłanny.

Ciągi liczbowe: silnia Silnia (ang. Factorial) n!=n (n-1) 2 1= n (n-1)! Program iteracyjny s(n) obliczamy w tablicy w czasie O(n) wraz z wszystkimi wartościami s(i), dla 0<=i<=n-1 : s[0]=1 for (i=1; i<=n; i++) { s[i]= i*s[i-1]; }

Ciągi liczbowe: liczby Fibonacciego Liczby Fibonacciego można obliczyć ze wzorów: F(1)=1, F(2)=1, F(n)=F(n-1)+F(n-2), dla n>2. Program iteracyjny f(n) obliczamy w tablicy w czasie O(n) wraz z wszystkimi wartościami f(i), dla 1<=i<=n-1 : f[1]=1; f[2]:=1; for (i=3; i<=n; i++) { f[i] = f[i-1]+f[i-2]; }

Współczynniki dwumienne C(n,k) C(n,k)=0, C(n,k)=1, C(n,k)=C(n-1,k)+C(n-1,k-1), dla k >n; dla k=0 i dla k=n; dla 0<k<n. Program iteracyjny (m - numer wiersza trójkąta Pascala): for (i=0; i<=m; i++) { C[i,0] = 1; C[i,i] = 1; } for (n=2; n<=m; n++) { for (k=1; k<=n-1; k++) { C[n,k]=C[n-1,k]+C[n-1,k-1]; } }

Współczynniki dwumienne C(n,k)

Liczby Stirlinga drugiego rodzaju S(n,k) S(n,n)=1, dla n >= 1; S(n,1)=1, dla n > 1; S(n,k)=S(n-1,k-1)+k*S(n-1,k), dla 2<k<n. Program iteracyjny: for (i=1; i<=m; i++) { S[i,1] = 1; S[i, i] = 1; } for (n=3; n<=m; n++) { for (k=2; k<=n-1; k++) { S[n,k]=S[n-1,k-1]+k*S[n-1,k]; } }

Liczby Stirlinga drugiego rodzaju S(n,k)

Problem podziału zbioru (PARTITION)

Programowanie dynamiczne dla problemu podziału zbioru Dla rozwiązania problemu podziału można zastosować następującą metodę: konstruujemy prostokątną tablicę, której wierszom odpowiadają numery kolejnych podzbiorów zbioru A, a kolumnami są kolejne liczby naturalne. Komórki t(i, j) tablicy wypełniamy odpowiednio wartościami ze zbioru {0, 1}: wartość t(i, j) = 1, jeśli istnieje podzbiór zbioru {a1,, ai} dla którego suma rozmiarów jest równa j, a w przeciwnym przypadku wartość t(i, j) = 0.

Programowanie dynamiczne dla problemu podziału zbioru

Problem plecakowy dyskretny i ciągły Dane są rozmiary i wartości elementów oraz pojemność plecaka. Wyznacz optymalne upakowanie plecaka, tak aby miał maksymalną wartość przy nieprzekroczonej pojemności. Warianty problemu: dyskretny (0-1), dyskretny z wieloma egzemplarzami przedmiotów, ciągły (przedmioty są podzielne, a wartość części pozostaje w stałej proporcji do całości przedmiotu) Przykład:

Dyskretny problem plecakowy (przedmioty dostępne w wielu egzemplarzach)

Dyskretny problem plecakowy (przedmioty dostępne w wielu egzemplarzach)

Problem iloczynu łańcucha macierzy 1 Dany jest łańcuch macierzy M1M2M3 Mn Wyznacz optymalną kolejność wykonywania mnożeń tych macierzy, tak aby liczba elementarnych mnożeń ich elementów była minimalna. Przykład:

Problem iloczynu łańcucha macierzy 2

Problem iloczynu łańcucha macierzy 3 Dowód poprawności metody: Minimalny koszt mnożenia łańcucha macierzy MiMi+1 Mj, dla 1 <= i < = n - j oraz dowolnego k, i < k < i+j, jest wyznaczany jako suma minimalnego kosztu mnożenia podłańcucha MiMi+1 Mk-1, minimalnego kosztu mnożenia podłańcucha MkMk+1 Mj oraz kosztu mnożenia tych dwóch macierzy wynikowych przez siebie. Gdyby koszt mnożenia podłańcucha MiMi+1 Mk-1 (lub MkMk+1 Mj ) nie był minimalny, to mógłby być zmniejszony do wartości minimalnej, ale to oznaczałoby, że koszt mnożenia MiMi+1 Mj również nie był minimalny.

Zalety programowania dynamicznego 1. Problemy o strukturze rekurencyjnej podproblemów są tą metodą przetwarzane w czasie wielomianowym eliminacja wielokrotnego rozwiązywania tych samych podproblemów. 2. Rozwiązywane są wszystkie różne podproblemy danego problemu a wyniki przechowywane w tablicy o rozmiarze wielomianowym (najczęściej O(n^2) lub O(nm). 3. Po rozwiązaniu wszystkich podproblemów i zbudowaniu tablicy z ich rozwiązaniami czas rozwiązywania problemu jest zwykle liniowy, np. O(n). 4. Istnieje możliwość wyznaczenia dokładnego rozwiązania problemu optymalizacyjnego, który czasami nie posiada algorytmu wielomianowego (np. problem plecakowy).

Wady programowania dynamicznego 1. Istnieje potrzeba rekurencyjnego sformułowania problemu. 2. Należy dowieść własności optymalnej podstruktury. 3. Wymagana jest pamięć o wymiarach zależnych od danych wejściowych (np. rozmiaru problemu). 4. Istnieją ograniczenia zastosowań algorytmów programowania dynamicznego związane z wielkością liczb występujących w przetwarzanych problemach.

Źródła wzorów, przykładów i rysunków : 1. Cormen T.H., Leiserson C.E., Rievest R.L. : Wprowadzenie do algorytmów, WNT 1999 2. Garey M.R., Johnson D.S. : Computers and intractability. A guide to the theory of NP-completeness, W.H. Freeman and Company, NY 1979 2. Ruskey F. : Combinatorial generation, wersja robocza książki, 2003. 3. Sedgewick R. : Algorithms in C, Addison-Wesley 1990 4. Stojmenovič I. : Recursive algorithms in computer science courses: Fibonacci numbers and binomial coefficients, IEEE Trans. Education 43 (3), 2000, 273-276. 5. Wikipedia, Helionica.