algorytmy i struktury danych typy algorytmów

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

Upload: nevaeh

Post on 07-Feb-2016

94 views

Category:

Documents


0 download

DESCRIPTION

Algorytmy i Struktury Danych Typy algorytmów. Wykład 3 Prowadzący: dr Paweł Drozda. Plan wykładu. Brute force Rekurencje Metoda zachłanna Programowanie dynamiczne. Brute force. Sukcesywne sprawdzanie wszystkich kombinacji, aż do rozwiązania problemu - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Algorytmy i Struktury Danych Typy algorytmów

Algorytmy i Struktury Danych

Typy algorytmów

WYKŁAD 3PROWADZĄCY: DR PAWEŁ DROZDA

Page 2: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Plan wykładu

Brute forceRekurencjeMetoda zachłannaProgramowanie dynamiczne

Page 3: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

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

Page 4: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Wyszukiwanie wzorca w tekście – brute force

ProblemPoszukiwanie wzorca długości M znaków w tekście o

długości N znakówRozwią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

Page 5: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Wyszukiwanie wzorca - implementacja

Szukaj (string wzorzec, string tekst){int i=0, j=0;while (i<strlen(wzorzec) && j<strlen(tekst))

{if wzorzec[i] != tekst[j] {j-=i-1;i=0;}else{j++;i++;}

}if (i==strlen(w)) cout << j-i; else cout << -1;}

Page 6: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Rekurencje

Przykład wprowadzającyDziecko rozrzuciło klocki – musi je pozbierać do pudełkazadanie 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

Page 7: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Rekurencje – ilustracja

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

Page 8: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Rekurencje – przykładowa implementacja

#include <iostream.h>#include <stdlib.h>const n=10;int tab[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

Page 9: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Analiza algorytmu

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

Page 10: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Rekurencje - schemat wykonywania

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?

X=0?

X=0?

nie

nie

nie

tak

Page 11: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Rekurencje – pułapki (1)

Wykonywanie tych samych obliczeń wiele razy Problem ciągu Fibonacciego

f(0)= 1, f(1)=1f(n) = f(n-1) + f(n-2)

f(4)

f(1)f(2)

f(2)f(3)

f(0)f(1)

f(1) f(0)

Page 12: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Rekurencje – pułapki (2)

Wywoływanie rekurencji w nieskończonośćint StadDoWiecznosci(int n){if (n==1) return 1; else

if ((n %2) == 0) // n parzystereturn StadDoWiecznosci(n-2)*n;elsereturn StadDoWiecznosci(n-1)*n;

}

Dla parzystych n – odwołania w nieskończoność

Page 13: Algorytmy i Struktury Danych Typy algorytmów

Rozwiązywanie rekurencji

Merge Sort

Rozwiązanie

Założenie n jest całkowite T(n) jest stałe dla małych n

1

1

)()2/(2/(

)1()(

n

ndla

nnTnT

OnT

)lg()( nnnT

)()2/(2)( nnTnT

Page 14: Algorytmy i Struktury Danych Typy algorytmów

Metoda podstawiania

nnTnT )2/(2)(

)lg()( :zgadujemy nnOnT

)2/lg()2/()2/( nncnT założenie:

ncn

ncnncnncnncnnncn

nnncnT

lg

lg2lglg)2/lg(

)2/lg()2/(2)(

0,lg)( cncnnTczyli:

1 dla c

Page 15: Algorytmy i Struktury Danych Typy algorytmów

Metoda podstawiania

warunek brzegowy:

?,1lg)1( ccT

421*2)2( T 531*2)3( T2lg2)2( cT 3lg3)3( cT

2c

Page 16: Algorytmy i Struktury Danych Typy algorytmów

Metoda podstawiania

Zamiana zmiennych

)lglg(lg)(

)lg()2()(

)2/(2)(

)2()(

22)2(

2,lg

lg2)(

2/

nnOnT

mmOTmS

mmSmS

TmS

mTT

nnm

nnTnT

m

m

mm

m

Page 17: Algorytmy i Struktury Danych Typy algorytmów

Metoda iteracyjna

)64/(2716/94/3

)))64/(316/(34/(3

))16/(34/(3

)4/(3

)4/(3)(

nTnnn

nTnnn

nTnn

nTn

nnTnT

i-ty składnik ciągu:iin 4/3

iterowanie kończymy gdy: ni

nn i

4log

14/ lub 1

Page 18: Algorytmy i Struktury Danych Typy algorytmów

Metoda iteracyjna

ii nn 4/4/

)1(364/2716/94/3)( 4log nnnnnnT

szereg geometryczny

)(44/31

1)4/3()4/3()(

0

log

0

4

nOnnnnnTk

in

k

i

Page 19: Algorytmy i Struktury Danych Typy algorytmów

Drzewo rekurencji

2)2/(2)( nnTnT

)(nT 2n

)2/(nT )2/(nT

2n

2)2/(n 2)2/(n

)4/(nT )4/(nT)4/(nT )4/(nT

2n

2)2/(n 2)2/(n

2)4/(n 2)4/(n2)4/(n 2)4/(n

2n

2/)2/(2 22 nn

4/)4/(4 22 nn

)()2/1(4/2/ 2

0

2222 nOnnnni

i

Page 20: Algorytmy i Struktury Danych Typy algorytmów

Drzewo rekurencji

n

2/n 2/n

4/n 4/n4/n 4/n

nnTnT )2/(2)(

n

n

nnlg

)lg( nnO

Page 21: Algorytmy i Struktury Danych Typy algorytmów

Metoda rekurencji uniwersalnej

1,1),()/()( banfbnaTnT

a podproblemówrowiązywanych w czasie n/b

koszt dzielenia/łączenia

))(()( to,1 dla )()/( jesli i

0 dla )( jesli 3)

lg)( to,)( jesli 2)

)( to,0 dla )( jesli 1)

log

loglog

loglog

nfnTcncfbnaf

nnf

nnnTnnf

nnTnOnf

a

aa

aa

b

bb

bb

Page 22: Algorytmy i Struktury Danych Typy algorytmów

Metoda rekurencji uniwersalnej

)()( to1), (przypadek 1 dla)()(

)(

)(,3,9

)3/(9)(

22

29loglog 3

nnTnOnf

nnn

nnfba

nnTnT

ab

)(lg)( wiec),()(

1

1)(,2/3,1

1)3/2()(

log

01loglog 2/3

nnTnnf

nnn

nfba

nTnT

a

a

b

b

Page 23: Algorytmy i Struktury Danych Typy algorytmów

Metoda rekurencji uniwersalnej

3) (przypadek 2,0 dla )()(

)(

lg)(,4,3

lg)4/(3)(

3log

793,03loglog

4

4

nnf

nOnn

nnnfba

nnnTnT

ab

4/3gdylg)()4/lg()4/(3)/( cncnncfnnbnaf

dla dostatecznie dużych n:

więc: )lg()( nnnT

Page 24: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Metoda zachłanna

Główne zastosowanie – problemy optymalizacji

Wybór w danej chwili najkorzystniejszy„Nadzieja” otrzymania globalnie optymalnego

rozwiązaniaPrzykł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

Page 25: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Znajdowanie minimum - implementacja

int min(int tab[]){

int i,minimum=tab[0];for (i=1; i<length(tab);i++)

if (tab[i]<minimum) minimum=tab[i];

return minimum;}

Page 26: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Problem plecakowy

Sformułowanie problemuZł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 dyskretnyKaż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łyprzedmiot można podzielić – część przedmiotu też ma

wartość np. sklep mięsny, odzież na wagę, skarbiec ze złotym piaskiem

Page 27: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Problem plecakowy – przykład (1)

Dyskretny

waga 5kg wartość 60

waga 10kg wartość 100 zł

waga 15kg wartość 120 zł

waga 10kg wartość 100 zł

waga 5kg wartość 60

waga 10kg wartość 100 zł

waga 15kg wartość 120 zł

wartość kg:p1 = 12zł p2=10 zł

p3=8 zł

Metoda

zachłanna

Rozwiązanie optymalne

Page 28: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Problem plecakowy – przykład (2)

Ciągły

waga 5kg wartość 60

waga 10kg wartość 100 zł

waga 15kg wartość 120 zł

waga 10kg wartość

80 zł

waga 10kg wartość 100 zł

waga 5kg wartość 60

wartość kg:p1 = 12zł p2=10 zł

p3=8 zł

Metoda zachłanna = rozwiązanie optymalne

Page 29: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Programowanie dynamiczne

Główne zastosowanie – problem optymalizacjiPodobne do metody „dziel i zwyciężaj”Stosowane gdy podproblemy nie są

niezależneKażdy podproblem rozwiązywany tylko raz –

wynik rozwiązania zapamiętywany

Page 30: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Etapy programowania dynamicznego

Scharakteryzowanie struktury optymalnego rozwiązania

Rekurencyjne zdefiniowanie kosztu optymalnego rozwiązania

Obliczenie optymalnego kosztu metodą wstępującą

Znalezienie optymalnego rozwiązania

Page 31: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Przykład – linie montażowe

a1,

1

t2,1

a1,

n

a2,n

a1,

3

a1,

2

a2,3a2,2a2,1

t1,1 t1,2

t2,2e2

e1

x2

x1

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 2Czasy wykonania czynności są różneCzasy e i x są to odpowiednio czas umieszczenia elementu i zdjęcia elementu z liniiCzasy t oznaczają czas potrzebny na przeniesienie elementu z jednej linii na drugą

Page 32: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Linie montażowe

Sformułowanie problemuWskazanie stanowisk montażowych na obu liniach tak,

aby czas montażu był jak najkrótszyAlgorytm 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 2n co dla dużych n jest nie do policzenia w zadawalającym czasie

Page 33: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Linie montażowe – przykład

7

2

4

7

39

658

2 3

14

2

2

3

4

84

5

1

2

3

2

4

1

Rozwiązanie optymalne:linia 1: stanowiska 1,3,6 linia 2: stanowiska 2,4,5

JAK DO TEGO DOJŚĆ???

Page 34: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Rozwiązanie – programowanie dynamiczne(1)

Etap 1 – struktura optymalnego rozwiązaniaNajszybszy sposób montażu do stanowiska i-tego pierwszej linii:

dla i=1 – istnieje tylko jeden sposóbdla 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 t2,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

Page 35: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Rozwiązanie – programowanie dynamiczne(2)

Etap 2 – rozwiązanie rekurencyjnef= min(f1[n]+ x1 , f2[n] + x2) – najkrótszy czas montażu

Wartości dla stanowisk 1:f1[1]=e1 + a1,1

f2[1]=e2 + a2,1

Sformułowanie równania dla dowolnego i:f1[i]=min(f1[i-1]+ a1,i, f2[i-1]+ t2,i-1 + a1,i)

f2[i]=min(f2[i-1]+ a2,i, f1[i-1]+ t1,i-1 + a2,i)

Page 36: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Rozwiązanie – programowanie dynamiczne(3)

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ązaniuf1[1]=e1 + a1,1

f2[1]=e2 + a2,1

for i=1 to n

if (f1[i-1]+ a1,i < f2[i-1]+ t2,i-1 + a1,i)

f1[i]=f1[i-1]+ a1,i, s1[i]=1

else f1[i]=f2[i-1]+ t2,i-1 + a1,i, s2[i]=2

analogicznie dla drugiej liniiif (f1[n]+ x1 < f2[n] + x2)

f= f1[n]+ x1, s=1

elsef = f2[n] + x2, s=2

Page 37: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Rozwiązanie – programowanie dynamiczne(4)

Etap 4 – optymalne rozwiązanieOdczytanie odpowiednich numerów linii ze zmiennej s oraz

z tablic s1, s2 w kolejności od n-tego do pierwszego stanowiska montażu

Page 38: Algorytmy i Struktury Danych Typy algorytmów

dr Paweł Drozda

Problem montażu – rozwiązanie liczbowe

f1[1]=9 f1[2]=min(9+9, 12+2+9)=18, s1[2]=1 f1[3]=20, s1[3]=2

f2[1]=12 f2[2]=min(12+5, 9+2+5)=16, s2[2]=1 f2[3]=22, s2[3]=2

f1[4]=24, s1[4]=1 f1[5]=32, s1[5]=1 f1[6]=35, s1[6]=2

f2[4]=25, s2[4]=1 f2[5]=30, s2[5]=2 f2[6]=37, s2[6]=2

f=38, s=1numery linii dla poszczególnych wierzchołków od końca: 6-1, 5-2, 4-2, 3-

1, 2-2, 1-1

7

2

4

7

39

658

2 3

14

2

2

3

4

84

5

1

2

3

2

4

1