Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Algorytmy i Struktury Danych Typy algorytmów WYKŁAD 3 PROWADZĄCY: DR PAWEŁ DROZDA.

Podobne prezentacje


Prezentacja na temat: "Algorytmy i Struktury Danych Typy algorytmów WYKŁAD 3 PROWADZĄCY: DR PAWEŁ DROZDA."— Zapis prezentacji:

1 Algorytmy i Struktury Danych Typy algorytmów WYKŁAD 3 PROWADZĄCY: DR PAWEŁ DROZDA

2 Plan wykładu Brute force Rekurencje Metoda zachłanna Programowanie dynamiczne dr Paweł Drozda

3 Brute force Sukcesywne sprawdzanie wszystkich kombinacji, aż do rozwiązania problemu Zazwyczaj nieoptymalna, prosta do implementacji Ogromna złożoność obliczeniowa Przykłady: Łamanie hasła Znajdowanie pary punktów najmniej odległych Wyszukiwanie wzorca w tekście dr Paweł Drozda

4 Wyszukiwanie wzorca w tekście – brute force Problem Poszukiwanie wzorca długości M znaków w tekście o długości N znaków Rozwiązanie Indeksy i, j oznaczają miejsce poruszania się po wzorcu i po tekście Jeśli znajdziemy początek taki sam porównujemy kolejne znaki, aż do znalezienia znaku niezgodnego – przesunięcie początku przeszukania w tekście o 1, bądź do momentu przejścia całego wzorca – zwrócony zostanie indeks początku wzorca w tekście Po przejściu całego tekstu bez znalezienia wzorca – zwracany komunikat o niepowodzeniu przeszukania dr Paweł Drozda

5 Wyszukiwanie wzorca - implementacja Szukaj (string wzorzec, string tekst){ int i=0, j=0; while (i

6 Rekurencje Przykład wprowadzający Dziecko rozrzuciło klocki – musi je pozbierać do pudełka zadanie polega na włożeniu po jednym klocku do pudełka do momentu aż wszystkie klocki znajdą się w pudełku Cechy algorytmu rekurencyjnego zakończenie algorytmu jasno określone większy problem rozbity na problemy elementarne dr Paweł Drozda

7 Rekurencje – ilustracja dr Paweł Drozda Problem Dla tablicy n liczb określić czy istnieje liczba x Rozwiązanie Weź pierwszy niezbadany element tablicy n-elementowej Jeśli jest to x wypisz sukces i zakończ W przeciwnym przypadku zbadaj pozostałą część tablicy Gdy po przejściu całej tablicy nie został znaleziony x wypisz porażka

8 Rekurencje – przykładowa implementacja dr Paweł Drozda #include constn=10; inttab[n]={1,2,3,2,-7,44,5,1,0,-3}; void szukaj(int tab[n],int left,int right,int x) // left, right = lewa i prawa granica obszaru poszukiwań // tab = tablica // x = wartość do odnalezienia { if (left>right) cout << "Element " << x << " nie został odnaleziony\n"; else if (tab[left]==x) cout << "Znalazłem szukany element "<< x << endl; else szukaj(tab,left+1,right,x); } int main() { szukaj(tab,0,n-1,7); szukaj(tab,0,n-1,5); } // wyniki programu: // Element 7 nie został odnaleziony // Znalazłem szukany element

9 Analiza algorytmu dr Paweł Drozda Zakończenie programu Element odnaleziony Przekroczenie zakresu tablicy Duży problem rozbity na problemy elementarne Z tablicy o wymiarze n schodzimy do tablicy o wymiarze n-1 Instrukcja porównania

10 Rekurencje - schemat wykonywania dr Paweł Drozda Przykład silnia unsigned long int silnia(int x) { if (x==0) return 1; else return x*silnia(x-1); } X=0? 1 1*0! 2*1! 3*2! X=0? nie tak

11 Rekurencje – pułapki (1) dr Paweł Drozda Wykonywanie tych samych obliczeń wiele razy Problem ciągu Fibonacciego f(0)= 1, f(1)=1 f(n) = f(n-1) + f(n-2) f(4) f(1)f(2) f(3) f(0)f(1) f(0)

12 Rekurencje – pułapki (2) dr Paweł Drozda Wywoływanie rekurencji w nieskończoność int StadDoWiecznosci(int n) { if (n==1) return 1; else if ((n %2) == 0) // n parzyste return StadDoWiecznosci(n-2)*n;else return StadDoWiecznosci(n-1)*n; } Dla parzystych n – odwołania w nieskończoność

13 Rozwiązywanie rekurencji Merge Sort Rozwiązanie Założenie n jest całkowite T(n) jest stałe dla małych n

14 Metoda podstawiania założenie: czyli:

15 Metoda podstawiania warunek brzegowy:

16 Metoda podstawiania Zamiana zmiennych

17 Metoda iteracyjna i-ty składnik ciągu: iterowanie kończymy gdy:

18 Metoda iteracyjna szereg geometryczny

19 Drzewo rekurencji

20

21 Metoda rekurencji uniwersalnej a podproblemów rowiązywanych w czasie n/b koszt dzielenia/łączenia

22 Metoda rekurencji uniwersalnej

23 dla dostatecznie dużych n: więc:

24 Metoda zachłanna Główne zastosowanie – problemy optymalizacji Wybór w danej chwili najkorzystniejszy Nadzieja otrzymania globalnie optymalnego rozwiązania Przykłady zastosowania: Znajdowanie minimum (maksimum) w tablicy N liczb Ciągły problem plecakowy Kody Huffmana – kompresja danych wykorzystując tablicę częstości występowania znaków dr Paweł Drozda

25 Znajdowanie minimum - implementacja int min(int tab[]){ int i,minimum=tab[0]; for (i=1; i

26 Problem plecakowy Sformułowanie problemu Złodziej rabujący sklep znalazł n przedmiotów. Każdy z przedmiotów ma pewną wartość i pewną wagę. Problem polega na zmieszczeniu jak najwartościowszego łupu do plecaka mogącego pomieścić pewną liczbę kilogramów Problem dyskretny Każdy przedmiot jest kradziony w całości – część przedmiotu jest bezwartościowa np. księgarnia, sklep monopolowy, skarbiec ze sztabami złota Problem ciągły przedmiot można podzielić – część przedmiotu też ma wartość np. sklep mięsny, odzież na wagę, skarbiec ze złotym piaskiem dr Paweł Drozda

27 Problem plecakowy – przykład (1) Dyskretny waga 5kg wartość 60 zł waga 10kg wartość 100 zł waga 15kg wartość 120 zł waga 10kg wartość 100 zł waga 5kg wartość 60 zł waga 10kg wartość 100 zł waga 15kg wartość 120 zł wartość kg: p1 = 12zł p2=10 zł p3=8 zł dr Paweł Drozda Metoda zachłanna Rozwiązanie optymalne

28 Problem plecakowy – przykład (2) Ciągły dr Paweł Drozda waga 5kg wartość 60 zł waga 10kg wartość 100 zł waga 15kg wartość 120 zł waga 10kg wartość 80 zł waga 10kg wartość 100 zł waga 5kg wartość 60 zł wartość kg: p1 = 12zł p2=10 zł p3=8 zł Metoda zachłanna = rozwiązanie optymalne

29 Programowanie dynamiczne dr Paweł Drozda Główne zastosowanie – problem optymalizacji Podobne do metody dziel i zwyciężaj Stosowane gdy podproblemy nie są niezależne Każdy podproblem rozwiązywany tylko raz – wynik rozwiązania zapamiętywany

30 Etapy programowania dynamicznego dr Paweł Drozda Scharakteryzowanie struktury optymalnego rozwiązania Rekurencyjne zdefiniowanie kosztu optymalnego rozwiązania Obliczenie optymalnego kosztu metodą wstępującą Znalezienie optymalnego rozwiązania

31 Przykład – linie montażowe dr Paweł Drozda a 1,1 t 2,1 a 1,n a 2,n a 1,3 a 1,2 a 2,3 a 2,2 a 2,1 t1,1t1,1 t1,2t1,2 t2,2t2,2 e2e2 e1e1 x2x2 x1x1 Dwie linie montażowe – każda z linii ma n stanowisk Na i-tym stanowisku linii 1 jest wykonywana ta sama czynność co na i-tym stanowisku linii 2 Czasy wykonania czynności są różne Czasy e i x są to odpowiednio czas umieszczenia elementu i zdjęcia elementu z linii Czasy t oznaczają czas potrzebny na przeniesienie elementu z jednej linii na drugą

32 Linie montażowe dr Paweł Drozda Sformułowanie problemu Wskazanie stanowisk montażowych na obu liniach tak, aby czas montażu był jak najkrótszy Algorytm brute force Dla każdej możliwej ścieżki obliczany jest czas montażu, a następnie wybór najkrótszego czasu Nie do przyjęcia – złożoność obliczeniowa jest nie mniejsza od 2 n co dla dużych n jest nie do policzenia w zadawalającym czasie

33 Linie montażowe – przykład dr Paweł Drozda Rozwiązanie optymalne: linia 1: stanowiska 1,3,6linia 2: stanowiska 2,4,5 JAK DO TEGO DOJŚĆ???

34 Rozwiązanie – programowanie dynamiczne(1) dr Paweł Drozda Etap 1 – struktura optymalnego rozwiązania Najszybszy sposób montażu do stanowiska i-tego pierwszej linii: dla i=1 – istnieje tylko jeden sposób dla i>1 – dwa sposoby: przejście ze stanowiska i-1 pierwszej linii – koszt przejścia pomijany Przejście ze stanowiska i-1 drugiej linii – koszt równy t 2,n-1 Dla stanowisk i-1 koszt przejścia jest optymalny – Własność optymalnej podstruktury Analogicznie dla stanowiska i-tego drugiej linii Rozwiązanie problemu dla stanowiska i na każdej z linii znalezienie rozwiązania podproblemów stanowisk i-1 dla każdej z linii

35 Rozwiązanie – programowanie dynamiczne(2) dr Paweł Drozda Etap 2 – rozwiązanie rekurencyjne f= min(f 1 [n]+ x 1, f 2 [n] + x 2 ) – najkrótszy czas montażu Wartości dla stanowisk 1: f 1 [1]=e 1 + a 1,1 f 2 [1]=e 2 + a 2,1 Sformułowanie równania dla dowolnego i: f 1 [i]=min(f 1 [i-1]+ a 1,i, f 2 [i-1]+ t 2,i-1 + a 1,i ) f 2 [i]=min(f 2 [i-1]+ a 2,i, f 1 [i-1]+ t 1,i-1 + a 2,i )

36 Rozwiązanie – programowanie dynamiczne(3) dr Paweł Drozda Obliczenia funkcja f oznacza optymalne rozwiązanie tabele s1, s2 dla i-tego stanowiska zawierają numer linii z której pochodzi i-1 stanowisko w optymalnym rozwiązaniu f 1 [1]=e 1 + a 1,1 f 2 [1]=e 2 + a 2,1 for i=1 to n if (f 1 [i-1]+ a 1,i < f 2 [i-1]+ t 2,i-1 + a 1,i ) f 1 [i]=f 1 [i-1]+ a 1,i, s1[i]=1 else f 1 [i]=f 2 [i-1]+ t 2,i-1 + a 1,i, s2[i]=2 analogicznie dla drugiej linii if (f 1 [n]+ x 1 < f 2 [n] + x 2 ) f= f 1 [n]+ x 1, s=1 else f = f 2 [n] + x 2, s=2

37 Rozwiązanie – programowanie dynamiczne(4) dr Paweł Drozda Etap 4 – optymalne rozwiązanie Odczytanie odpowiednich numerów linii ze zmiennej s oraz z tablic s1, s2 w kolejności od n-tego do pierwszego stanowiska montażu

38 Problem montażu – rozwiązanie liczbowe dr Paweł Drozda f 1 [1]=9 f 1 [2]=min(9+9, )=18, s1[2]=1 f 1 [3]=20, s1[3]=2 f 2 [1]=12 f 2 [2]=min(12+5, 9+2+5)=16, s2[2]=1 f 2 [3]=22, s2[3]=2 f 1 [4]=24, s1[4]=1 f 1 [5]=32, s1[5]=1 f 1 [6]=35, s1[6]=2 f 2 [4]=25, s2[4]=1 f 2 [5]=30, s2[5]=2 f 2 [6]=37, s2[6]=2 f=38, s=1 numery linii dla poszczególnych wierzchołków od końca: 6-1, 5-2, 4-2, 3-1, 2-2,


Pobierz ppt "Algorytmy i Struktury Danych Typy algorytmów WYKŁAD 3 PROWADZĄCY: DR PAWEŁ DROZDA."

Podobne prezentacje


Reklamy Google