algorytmy i struktury danych typy algorytm w
Download
Skip this Video
Download Presentation
Algorytmy i Struktury Danych Typy algorytmów

Loading in 2 Seconds...

play fullscreen
1 / 38

Algorytmy i Struktury Danych Typy algorytmów - PowerPoint PPT Presentation


  • 103 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Algorytmy i Struktury Danych Typy algorytmów' - nevaeh


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
algorytmy i struktury danych typy algorytm w

Algorytmy i Struktury DanychTypy algorytmów

Wykład 3

Prowadzący: dr Paweł Drozda

plan wyk adu
Plan wykładu

Bruteforce

Rekurencje

Metoda zachłanna

Programowanie dynamiczne

dr Paweł Drozda

brute force
Bruteforce
  • 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

wyszukiwanie wzorca w tek cie brute force
Wyszukiwanie wzorca w tekście – bruteforce
  • 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

wyszukiwanie wzorca implementacja
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;

}

dr Paweł Drozda

rekurencje
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

rekurencje ilustracja
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

dr Paweł Drozda

rekurencje przyk adowa implementacja
Rekurencje – przykładowa implementacja

#include <iostream.h>

#include <stdlib.h>

const n=10;

inttab[n]={1,2,3,2,-7,44,5,1,0,-3};

void szukaj(inttab[n],intleft,intright,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);

}

  • intmain()
  • {
  • szukaj(tab,0,n-1,7);
  • szukaj(tab,0,n-1,5);
  • }
  • // wyniki programu:
  • // Element 7 nie został odnaleziony
  • // Znalazłem szukany element

dr Paweł Drozda

analiza algorytmu
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

dr Paweł Drozda

rekurencje schemat wykonywania
Rekurencje - schemat wykonywania
  • Przykład silnia

unsigned long intsilnia(int x)

{

if (x==0)

return 1;

else

return x*silnia(x-1);

}

3*2!

X=0?

nie

X=0?

2*1!

nie

1*0!

X=0?

nie

X=0?

1

tak

dr Paweł Drozda

rekurencje pu apki 1
Rekurencje – pułapki (1)
  • 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(3)

f(2)

f(2)

f(1)

f(1)

f(0)

f(1)

f(0)

dr Paweł Drozda

rekurencje pu apki 2
Rekurencje – pułapki (2)
  • Wywoływanie rekurencji w nieskończoność

intStadDoWiecznosci(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ść

dr Paweł Drozda

rozwi zywanie rekurencji
Rozwiązywanie rekurencji
  • Merge Sort
  • Rozwiązanie
  • Założenie
    • n jest całkowite
    • T(n) jest stałe dla małych n
metoda podstawiania1
Metoda podstawiania
  • warunek brzegowy:
metoda podstawiania2
Metoda podstawiania
  • Zamiana zmiennych
metoda iteracyjna
Metoda iteracyjna

i-ty składnik ciągu:

iterowanie kończymy gdy:

metoda iteracyjna1
Metoda iteracyjna

szereg geometryczny

metoda rekurencji uniwersalnej
Metoda rekurencji uniwersalnej

koszt dzielenia/łączenia

a podproblemów

rowiązywanych w czasie n/b

metoda rekurencji uniwersalnej2
Metoda rekurencji uniwersalnej

dla dostatecznie dużych n:

więc:

metoda zach anna
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

znajdowanie minimum implementacja
Znajdowanie minimum - implementacja

int min(inttab[]){

inti,minimum=tab[0];

for (i=1; i<length(tab);i++)

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

return minimum;

}

dr Paweł Drozda

problem plecakowy
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

problem plecakowy przyk ad 1
Problem plecakowy – przykład (1)

Dyskretny

  • waga 15kg wartość
  • 120 zł

waga 5kg wartość 60 zł

  • waga 15kg wartość
  • 120 zł

waga 10kg wartość

100 zł

waga 10kg wartość

100 zł

waga 10kg wartość

100 zł

waga 5kg wartość 60 zł

Metoda

zachłanna

Rozwiązanie

optymalne

wartość kg:

p1 = 12zł p2=10 zł p3=8 zł

dr Paweł Drozda

problem plecakowy przyk ad 2
Problem plecakowy – przykład (2)

Ciągły

  • waga 10kg wartość
  • 80 zł

waga 5kg wartość 60 zł

  • waga 15kg wartość
  • 120 zł

waga 10kg wartość

100 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

dr Paweł Drozda

programowanie dynamiczne
Programowanie dynamiczne

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

dr Paweł Drozda

etapy programowania dynamicznego
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

dr Paweł Drozda

przyk ad linie monta owe
Przykład – linie montażowe

a1,1

a1,2

a1,3

a1,n

e1

t1,1

t1,2

x1

e2

t2,1

t2,2

x2

a2,1

a2,2

a2,3

a2,n

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ą

dr Paweł Drozda

linie monta owe
Linie montażowe
  • Sformułowanie problemu

Wskazanie stanowisk montażowych na obu liniach tak, aby czas montażu był jak najkrótszy

  • Algorytm bruteforce

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

dr Paweł Drozda

linie monta owe przyk ad
Linie montażowe – przykład

7

9

3

4

8

4

2

2

3

1

3

4

3

4

2

1

2

2

1

2

8

5

6

4

5

7

Rozwiązanie optymalne:

linia 1: stanowiska 1,3,6 linia 2: stanowiska 2,4,5

JAK DO TEGO DOJŚĆ???

dr Paweł Drozda

rozwi zanie programowanie dynamiczne 1
Rozwiązanie – programowanie dynamiczne(1)
  • 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 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

dr Paweł Drozda

rozwi zanie programowanie dynamiczne 2
Rozwiązanie – programowanie dynamiczne(2)
  • Etap 2 – rozwiązanie rekurencyjne

f= 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)

dr Paweł Drozda

rozwi zanie programowanie dynamiczne 3
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ązaniu

f1[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 linii

if (f1[n]+ x1 < f2[n] + x2)

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

else

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

dr Paweł Drozda

rozwi zanie programowanie dynamiczne 4
Rozwiązanie – programowanie dynamiczne(4)
  • 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

dr Paweł Drozda

problem monta u rozwi zanie liczbowe
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=1

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

7

9

3

4

8

4

2

2

3

1

3

4

3

4

2

1

2

2

1

2

8

5

6

4

5

7

dr Paweł Drozda

ad