Algorytmy i struktury danych typy algorytm w
This presentation is the property of its rightful owner.
Sponsored Links
1 / 38

Algorytmy i Struktury Danych Typy algorytmów PowerPoint PPT Presentation


  • 72 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

Algorytmy i Struktury Danych Typy algorytmów

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>

constn=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 podstawiania

czyli:

założenie:

Metoda podstawiania


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


Drzewo rekurencji

Drzewo rekurencji


Drzewo rekurencji1

Drzewo rekurencji


Metoda rekurencji uniwersalnej

Metoda rekurencji uniwersalnej

koszt dzielenia/łączenia

a podproblemów

rowiązywanych w czasie n/b


Metoda rekurencji uniwersalnej1

Metoda rekurencji uniwersalnej


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,6linia 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


  • Login