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

Podobne dokumenty
Sortowanie przez scalanie

Algorytmy i Struktury Danych.

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

Analiza algorytmów zadania podstawowe

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

Algorytmy i struktury danych.

Projektowanie i analiza algorytmów

Strategia "dziel i zwyciężaj"

Schemat programowania dynamicznego (ang. dynamic programming)

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

Algorytmy i Struktury Danych

Wstęp do programowania

Wstęp do programowania

Matematyczne Podstawy Informatyki

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

Temat: Algorytmy zachłanne

Programowanie dynamiczne i algorytmy zachłanne

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

Programowanie dynamiczne cz. 2

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytm selekcji Hoare a. Łukasz Miemus

9. Schematy aproksymacyjne

Wstęp do programowania

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Efektywna metoda sortowania sortowanie przez scalanie

Podstawy Informatyki. Sprawność algorytmów

Programowanie w VB Proste algorytmy sortowania

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Podstawowe algorytmy i ich implementacje w C. Wykład 9

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

Informatyka A. Algorytmy

Analiza algorytmów zadania podstawowe

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Znajdowanie największego i najmniejszego elementu w zbiorze n liczb całkowitych

Problemy porządkowe zadania

Algorytmy i Struktury Danych, 2. ćwiczenia

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

Wykład 2. Poprawność algorytmów

Programowanie dynamiczne (optymalizacja dynamiczna).

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

Ćwiczenie 3 Programowanie dynamiczne

Podejście zachłanne, a programowanie dynamiczne

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

Zaawansowane algorytmy i struktury danych

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

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

INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA.

Sortowanie przez wstawianie

Zasady analizy algorytmów

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

5. Podstawowe algorytmy i ich cechy.

Teoretyczne podstawy informatyki

Wstęp do programowania

Algorytmy i Struktury Danych.

Wykład 6. Wyszukiwanie wzorca w tekście

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Algorytmy i Struktury Danych.

Wykład 10 Grafy, algorytmy grafowe

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

TEORETYCZNE PODSTAWY INFORMATYKI

(3 kwiecień 2014) Marika Pankowska Kamila Pietrzak

Techniki projektowania algorytmów

Wstęp do programowania

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

Teoretyczne podstawy informatyki

Programowanie dynamiczne

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Poszukiwanie liniowe wśród liczb naturalnych

Wskaźniki. Programowanie Proceduralne 1

ALGORYTMY I STRUKTURY DANYCH

Algorytmy komputerowe. dr inŝ. Jarosław Forenc

PROBLEM: SORTOWANIE PRZEZ ODWRÓCENIA METODA: ALGORYTMY ZACHŁANNE

Luty 2001 Algorytmy (4) 2000/2001

Technologie informacyjne Wykład VII-IX

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy. Wojciech Horzelski

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych.

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Algorytmy i Struktury Danych, 2. ćwiczenia

Jeszcze o algorytmach

Wstęp do Programowania potok funkcyjny

Strategie optymalizacji

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

Programowanie Równoległe i Rozproszone. Algorytm Kung a. Algorytm Kung a. Programowanie Równoległe i Rozproszone Wykład 8. Przygotował: Lucjan Stapp

Zadania obliczeniowe, algorytmy i złożoność obliczeniowa

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

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

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

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

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 )

Anna Sobocińska Sylwia Piwońska

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

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Przykłady problemów optymalizacyjnych

Transkrypt:

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. greedy), Transformacyjna konstrukcja algorytmu, Programowanie dynamiczne, Przeszukiwanie z powrotami i metoda podziałów i ograniczeń, Algorytmów genetycznych.

Metoda dziel i zwyciężaj Metoda dziel i zwyciężaj 1. Dziel: Podziel problem na podproblemy, 2. Zwyciężaj: Podproblemy rozwiąż rekurencyjnie lub bezpośrednio, jeśli są odpowiednio małe, 3. Scal: Połącz rozwiązania podproblemów w celu wyznaczenia rozwiązania problemu.

n liczba elementów, n/2 ( n/2 ) liczba elementów lewej (prawej) części Źródło: [R. Sedgewick, Algorithms, Second Edition, Addison-Wesley, 1988.]

Metoda dziel i zwyciężaj n liczba elementów, Uzasadnienie formuł: n/2 ( n/2 ) liczba elementów lewej (prawej) części, n parzyste czyli n = 2k, k N +, 2k/2 =k= 2k/2 n nieparzyste czyli n = 2k + 1, k N +, 2k + 1 =k + 1, 2k + 1 =k 2 2

Tablice A p.. q i A q + 1.. r są posortowane, jest wartownikiem większym od każdego z elementów tablicy A, MERGE scala powyższe tablice w posortowaną tablicę A p.. r. Złożoność czasowa gdzie n = r p + 1. Θ(n), Źródło: [CLRS, Wprowadzenie do algorytmów]

Metoda dziel i zwyciężaj Niezmiennik pętli: Przed wykonaniem pętli dla k, tablica A[p.. k 1] zawiera k p najmniejszych elementów tablic L[1.. n 1 + 1] i R[1.. n 2 + 1] będących posortowanymi. L i, R[j] są najmniejszymi elementami tablic L, R, które jeszcze nie zostały skopiowane do tablicy A.

Metoda dziel i zwyciężaj Dziel Zwyciężaj Scal Źródło: [CLRS, Wprowadzenie do algorytmów]

Metoda dziel i zwyciężaj T i Dziel Θ 1 Zwyciężaj Scal 2 T(i/2) Θ i T i czas sortowania i elementów, gdy 1 < i T i = 2 T(i/2)+Θ i

Metoda dziel i zwyciężaj T 1 Dziel Θ 1 T 1 czas sortowania i elementów, gdy 1 = i T 1 = Θ 1

Metoda dziel i zwyciężaj T i = 2 T i 2 Θ 1 jeśli i = 1 +Θ i jeśli i > 1 T i = 2 T i 2 c jeśli i = 1 +c i jeśli i > 1

Metoda dziel i zwyciężaj T i = 2 T i 2 c jeśli i = 1 +c i jeśli i > 1 T i = c i i>1 T i 2 T i 2

log 2 n + 1 poziomów, Złożoność: (log 2 n + 1) cn = Θ(nlog 2 n)

Metoda zachłanna Dyskretny problem plecakowy wersja decyzyjna Dane: Skończony zbiór elementów A = a 1, a 2,, a n. Rozmiar s a i > 0 i waga (wartość) w a i > 0 elementu a i. Pojemność plecaka b > 0 i stała y > 0. Zadanie: Czy istnieje podzbiór A A taki, że: s( a i A a i ) b a i A w(a i ) y?

Metoda zachłanna Dyskretny problem plecakowy wersja optymalizacyjna Dane: Skończony zbiór elementów A = a 1, a 2,, a n. Rozmiar s a i > 0 i waga (wartość) w a i > 0 elementu a i. Pojemność plecaka b > 0 i stała y > 0. Zadanie: Wyznacz podzbiór A A taki, że: s( a i A a i ) b min w(a i ) a i A

Metoda zachłanna Algorytm zachłanny dla wersji optymalizacyjnej 1. Dla każdego elementu i {1, n} oblicz p i = w(a i )/s(a i ). A = i S = 0. 2. Wyznacz sekwencję σ =< σ 1,, σ n > taką, że p σ(j) p σ(j+1) dla j 1, n 1. 3. Dla j {1, n} wykonuj: Jeżeli S + s(a σ j ) b, to 4. Stop A A {a σ j } i S S +s(a σ j ).

Metoda zachłanna i s(a i ) w(a i ) 1 1 9 2 2 8 3 6 7 4 7 10 5 1 8 6 4 7 b=12

Metoda zachłanna i s(a i ) w(a i ) w(a i )/s(a i ) 1 1 9 9 2 2 8 4 3 6 7 1,17 4 7 10 1,43 5 1 8 8 6 4 7 1,75 b=12 σ =< 1, 5, 2, 6, 4, 3 >

Metoda zachłanna S =< 1, 5, 2, 6, 4, 3 > S 0 Weź a 1 i sprawdź czy S + s a 1 b czyli 0 + 1 12. Zatem A {a 1 } i S 1. Weź a 5 i sprawdź czy S + s a 5 b czyli 1 + 1 12. Zatem A {a 1, a 5 } i S 2. Weź a 2 i sprawdź czy S + s a 2 b czyli 2 + 2 12. Zatem A {a 1, a 5, a 2 } i S 4. Weź a 6 i sprawdź czy S + s a 6 b czyli 4 + 4 12. Zatem A {a 1, a 5, a 2, a 6 } i S 8. Weź a 4 i sprawdź czy S + s a 4 b czyli 8 + 7 12. Zatem A {a 1, a 5, a 2, a 6 } i S 8. Weź a 3 i sprawdź czy S + s a 3 b czyli 8 + 6 12. Zatem A {a 1, a 5, a 2, a 6 } i S 8.

Metoda zachłanna Jaka jest złożoność obliczeniowa algorytmu? 1. Dla każdego elementu i {1, n} oblicz p i = w(a i )/s(a i ). A i S 0. 2. Wyznacz sekwencję σ =< σ 1,, σ n > taką, że p σ(j) p σ(j+1) dla j 1, n 1. 3. Dla j {1, n} wykonuj: Jeżeli S + s(a σ j ) b, to 4. Stop A A {a σ j } i S S +s(a σ j ).

Metoda zachłanna Jaka jest złożoność obliczeniowa algorytmu? 1. Dla każdego elementu i {1, n} oblicz p i = w(a i )/s(a i ). A i S 0. O(n) 2. Wyznacz sekwencję σ =< σ 1,, σ n > taką, że p σ(j) p σ(j+1) dla j 1, n 1. 3. Dla j {1, n} wykonuj: Jeżeli S + s(a σ j ) b, to 4. Stop A A {a σ j } i S S +s(a σ j ).

Metoda zachłanna Jaka jest złożoność obliczeniowa algorytmu? 1. Dla każdego elementu i {1, n} oblicz p i = w(a i )/s(a i ). A i S 0. O(n) 2. Wyznacz sekwencję σ =< σ 1,, σ n > taką, że p σ(j) p σ(j+1) dla j 1, n 1. O(n log n) 3. Dla j {1, n} wykonuj: Jeżeli S + s(a σ j ) b, to 4. Stop A A {a σ j } i S S +s(a σ j ).

Metoda zachłanna Jaka jest złożoność obliczeniowa algorytmu? 1. Dla każdego elementu i {1, n} oblicz p i = w(a i )/s(a i ). A i S 0. O(n) 2. Wyznacz sekwencję σ =< σ 1,, σ n > taką, że p σ(j) p σ(j+1) dla j 1, n 1. O(n log n) 3. Dla j {1, n} wykonuj: Jeżeli S + s(a σ j ) b, to A A {a σ j } i S S +s(a σ j ). O(n) 4. Stop

Metoda zachłanna Złożoność obliczeniowa algorytmu O n + O(n log n) + O n = O(n log n) Czy rozwiązanie: A = {a 1, a 5, a 2, a 6 } zajętość plecaka: S = 8 sumaryczna wartość zapakowanych elementów: jest optymalnym? w(a i ) a i X = 9 + 8 + 8 + 7 = 32

Metoda zachłanna i s(a i ) w(a i ) 1 1 9 2 2 8 3 6 7 4 7 10 5 1 8 6 4 7 b=12

Metoda zachłanna Lepszym rozwiązaniem jest: zajętość plecaka: A = {a 1, a 5, a 2, a 4 } S = 11 sumaryczna wartość zapakowanych elementów: w(a i ) a i X = 9 + 8 + 8 + 10 = 35

Metoda zachłanna Dane: Ciągły problem plecakowy wersja decyzyjna Skończony zbiór produktów A = a 1, a 2,, a n. Rozmiar s a i εn i wartość w a i εn elementu a i. Pojemność plecaka b > 0 i stała y > 0. Zadanie: Czy istnieje taki zbiór wartości x 1, x 2,, x n ε[0,1], że: s( i {1,n} a i ) x i b i {1,n} w(a i ) x i y? Czy algorytm zachłanny oparty na p i = w(a i )/s(a i ) da rozwiązanie?

Metoda zachłanna Przykłady interpretacji Dyskretny problem plecakowy Ładowanie sztabek złota do plecaka, Ładowanie bloków betonowych na platformę. Ciągły problem plecakowy Ładowanie złotego piasku, Ładowanie substancji sypkich na platformę do przewozu materiałów różnych gatunków.

Transformacyjna konstrukcja algorytmu Przykład 1. Wyznaczanie najmniejszej wspólnej wielokrotnej (NWW) liczb m, nεn poprzez redukcję problemu: NWW m, n = (m n)/nwp(m, n)

Transformacyjna konstrukcja algorytmu Przykład 2. Startujemy od mało efektywnego (naiwnego) algorytmu i konstruujemy algorytm efektywniejszy. Problem: Wyznaczenie pary najbliższych spośród n elementów tablicy. Metoda siłowa o złożoności O(n 2 ), Transformacja do postaci: 1. Wstępne sortowanie tablicy: O(nlog n), 2. Skanowanie tablicy z wyznaczaniem najmniejszej różnicy między sąsiednimi elementami: O n, Sumaryczny koszt: O(nlog n).

Transformacyjna konstrukcja algorytmu Przykłady 3. Startujemy od mało efektywnego (naiwnego) algorytmu i konstruujemy algorytm efektywniejszy. Problem: Dane: Posortowane niemalejąco tablice A, B o n elementach A i, B[j] N, i, jε 1, n, liczba xεn. Pytanie: Czy istnieją takie A i, B[j], i, jε 1, n, że: A i + B j = x?

Transformacyjna konstrukcja algorytmu Problem: Dane: Posortowane niemalejąco tablice A, B o n elementach A i, B[j] N, i, jε 1, n, liczba xεn. Pytanie: Czy istnieją takie A i, B[j], i, jε 1, n, że: A i + B j = x? Metoda siłowa BOOLEAN EQUAL-SUM-BF(A, B, n) for i 1 to n for j 1 to n O(n 2 ) do if (A i + B j = x) then return true return false

Transformacyjna konstrukcja algorytmu Dane: Posortowane niemalejąco tablice A, B o n elementach A i, B[j] N, i, jε 1, n, liczba xεn. Pytanie: Czy istnieją takie A i, B[j], i, jε 1, n, że: A i + B j = x? Efekt transformacji BOOLEAN EQUAL-SUM-TR(A, B, n) i 1 j n while(i n and j>0) do if (A i + B j = x) then return true else if (A i + B j < x) then i i + 1 else j j 1 return false

Transformacyjna konstrukcja algorytmu X=18 0 4 6 8 11 11 15 1 4 2 2 4 5 7 3 9 12 17

Transformacyjna konstrukcja algorytmu X=18 0 4 6 8 11 11 15 2 4 5 7 9 12 17 Wyróżniona para liczb A k, B[l] spełniająca wymagania: k = min i: jε 1, n A i + B j = x, l = max j: iε 1, n A i + B j = x.

Transformacyjna konstrukcja algorytmu A[1] A[k] B[l] B[n] Groźba pominięcia pary A i + B j = x Pominięcie wyróżnionej pary gdy: przy warunku i < k j = l nastąpi j l 1 lub? przy warunku i = k l < j nastąpi i k + 1.

Transformacyjna konstrukcja algorytmu Niezmiennik: Nie pominięto wyróżnionej pary tzn. i k l j. Inicjowanie: Przed pierwszym wykonaniem pętli dla i = 1 j = n, wyróżniona para nie została pominięta. Niezmienniczość: Nie pominięto wyróżnionej pary przed (i + n j) tym wykonaniem pętli, to: Jeśli A i + B j = x, tzn. i = k, j = l i nastąpi wyjście z pętli z wartością true albo Jeśli A i + B j x, to zmiana wartości zmiennych i, j nie spowoduje pominięcia wyróżnionej pary. Kończenie: Dla i = k, j = l następuje wyjście z pętli z wartością true.

Transformacyjna konstrukcja algorytmu BOOLEAN EQUAL-SUM-TR(A, B, n) i 1 j n while(i n and j>0) do if (A i + B j = x) then return true else if (A i + B j < x) then i i + 1 else j j 1 return false X=18 A: 16 16 16 16 17 B: 1 3 3 3 3 O(n)