Algorytmy i Struktury Danych

Podobne dokumenty
Projektowanie i analiza algorytmów

Algorytmy i Struktury Danych

Schemat programowania dynamicznego (ang. dynamic programming)

Projektowanie i Analiza Algorytmów

Programowanie dynamiczne cz. 2

Zaawansowane algorytmy i struktury danych

Algorytmy i struktury danych.

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

Programowanie dynamiczne

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

Matematyczne Podstawy Informatyki

Programowanie dynamiczne (optymalizacja dynamiczna).

Temat: Algorytmy zachłanne

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

Technologie Informacyjne

Wstęp do programowania

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

Teoretyczne podstawy informatyki

Efektywność Procedur Obliczeniowych. wykład 5

Programowanie dynamiczne i algorytmy zachłanne

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

INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA.

Metody Programowania

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

PRZEWODNIK PO PRZEDMIOCIE

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

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI

Ćwiczenie 3 Programowanie dynamiczne

9. Schematy aproksymacyjne

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

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

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

Wykład 10 Grafy, algorytmy grafowe

TEORETYCZNE PODSTAWY INFORMATYKI

Teoretyczne podstawy informatyki

KARTA MODUŁU KSZTAŁCENIA

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

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy i struktury danych

Programowanie dynamiczne

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

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 5. Prof. dr hab. inż. Jan Magott

Wykład 5. Metoda eliminacji Gaussa

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

Wstęp do programowania

Obliczenia naukowe Wykład nr 8

ALGORYTMY I STRUKTURY DANYCH

Algorytmy i struktury danych IS/IO, WIMiIP

Wstęp do Programowania potok funkcyjny

O rekurencji i nie tylko

Metody Programowania

Wybrane podstawowe rodzaje algorytmów

TEORETYCZNE PODSTAWY INFORMATYKI

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

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

O MACIERZACH I UKŁADACH RÓWNAŃ

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

Macierze. Rozdział Działania na macierzach

Technologie Informacyjne

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

Analiza algorytmów zadania podstawowe

Wykłady specjalistyczne. (Matematyka w finansach i ekonomii; Matematyczne metody informatyki)

Obliczenia iteracyjne

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

PRZEWODNIK PO PRZEDMIOCIE

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

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

Technologia informacyjna Algorytm Janusz Uriasz

Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln)

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

koordynator modułu dr hab. Michał Baczyński rok akademicki 2012/2013

Algorytmy i Struktury Danych.

Optymalizacja. Algorytmy dokładne

Sortowanie - wybrane algorytmy

Macierze - obliczanie wyznacznika macierzy z użyciem permutacji

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

1 Macierze i wyznaczniki

Programowanie liniowe

Zaliczenie. Egzamin. lub. Wykład. Zaliczenie. Ćwiczenie. 3 zadania. Projekty. Ocena. Na ocenę

Algorytmy i Struktury Danych

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

Algorytmy i Struktury Danych.

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

INTERPOLACJA I APROKSYMACJA FUNKCJI

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

Algorytmy i struktury danych

1. Algorytmika. WPROWADZENIE DO ALGORYTMIKI Wprowadzenie do algorytmów. Pojęcie algorytmu.

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 )

Algorytmy i struktury danych. wykład 2

Algorytmy wyznaczania centralności w sieci Szymon Szylko

Matematyka dyskretna

5. Rozwiązywanie układów równań liniowych

Wstęp do programowania

Geodezja i Kartografia I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)

ECTS (Część 2. Metody numeryczne) Nazwa w języku angielskim: Algorithms and data structures.

Transkrypt:

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 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: 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 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. Ruskey F. : Combinatorial generation, wersja robocza książki, 2003. 3. Sedgewick R. : Algorithms in C, Addison-Wesley 1990 4. Stojmenovic I. : Recursive algorithms in computer science courses: Fibonacci numbers and binomial coefficients, IEEE Trans. Education 43 (3), 2000, 273-276. 5. Helionica.