algorytmy i struktury danych

30
Algorytmy i struktury Algorytmy i struktury danych danych Studia stacjonarne: ECTS: 5 Wykłady: 30 Ćwiczenia: 30 Studia niestacjonarne: ECTS: 5 Wykłady: 20 Ćwiczenia:20

Upload: bruce-mendoza

Post on 03-Jan-2016

63 views

Category:

Documents


0 download

DESCRIPTION

Algorytmy i struktury danych. Studia stacjonarne: ECTS: 5 Wykłady: 30 Ćwiczenia: 30 Studia niestacjonarne: ECTS : 5 Wykłady: 20 Ćwiczenia:20. Literatura cz.1. Cormen Thomas; Leiserson Charles; Rivest Ronald; Stein Clifford, „Wprowadzenie do Algorytmów”, Wydawnictwo WNT, 2007 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Algorytmy i struktury danych

Algorytmy i struktury Algorytmy i struktury danychdanychStudia stacjonarne:ECTS: 5Wykłady: 30 Ćwiczenia: 30

Studia niestacjonarne:ECTS: 5Wykłady: 20 Ćwiczenia:20

Page 2: Algorytmy i struktury danych

Literatura cz.1Literatura cz.1Cormen Thomas; Leiserson Charles; Rivest

Ronald; Stein Clifford, „Wprowadzenie do Algorytmów”, Wydawnictwo WNT, 2007Wydawnictwo Naukowe PWN, Warszawa 2012,

Wirth Niklaus, „Algorytmy+Struktury Danych=Programy”, Wydawnictwo WNT, 2004.

Sedgewick Robert, „Algorytmy w C++”, Wydawnictwo RM, Warszawa 1999,

Drozdek Adam, „C++. Algorytmy i Struktury Danych”, Wydawnictwo Helion, Gliwice 2004,

Page 3: Algorytmy i struktury danych

Literatura cz.2Literatura cz.2 Wróblewski Piotr, „Algorytmy, Struktury Danych i

Techniki Programowania”, Wydawnictwo Helion, Gliwice 2010.

Alfred V. Aho, Hopcroft John E. Ullman Jeffrey D., “Projektowanie I analiza algorytmów”, Wydawnictwo Helion, Gliwice 2003,

Alfred V. Aho, Hopcroft John E. Ullman Jeffrey D., “Algorytmy i struktury danych”, Wydawnictwo Helion, Gliwice 2003,

Banachowski Lech, Diks Krzysztof, Rytter Wojciech, „Algorytmy i Struktury danych”, Wydawnictwa Naukowo-Techniczne, Warszawa 1996.

Priceton University, Course on algorithms, http://code.google.com/intl/pl-PL/edu/submissions/SedgewickWayne/index.html, (w języku angielskim)

Page 4: Algorytmy i struktury danych

Podstawowe pojęciaPodstawowe pojęciaAlgorytm to sposób rozwiązania

pewnego zagadnienia, który można zrealizować za pomocą dowolnego języka programowania i na dowolnym komputerze

Struktury danych to obiekty, które powstają w wyniku zastosowania algorytmu do organizacji danych biorących udział w obliczeniach

Page 5: Algorytmy i struktury danych

RekurencjaRekurencjaRekurencja - wywołanie

kilkakrotne pewnej procedury, która odwołuje się do samej siebie

Page 6: Algorytmy i struktury danych

Przykład funkcji Przykład funkcji rekurencyjnejrekurencyjnej

double power(double x, unsigned int n){if (n = = 0)

return 1.0//else

return x*power(x,n-1)}

0gdy

0ngdy 11 nxx

x nn

Page 7: Algorytmy i struktury danych

Rodzaje rekurencjiRodzaje rekurencji

Page 8: Algorytmy i struktury danych

Rekurencja ogonowa:

void ogon(int i){

if(i>0){

cout<<i<<’ ’;

ogon(i-1);

}

}

Rekurencja pośrednia:

Funkcja1() funcja2() …funkcjan()funkcja1()

Rekurencja zagnieżdżona:

4ngdy ))2(2(

4ngdy

0ngdy 0

)(

nhh

nnh

Page 9: Algorytmy i struktury danych

Złożoność obliczeniowa Złożoność obliczeniowa Złożoność obliczeniowa

algorytmów to szacowanie efektywności porównywanych algorytmów, wykonujących to samo zadanie lecz innymi metodami.

Istotne są dwa czynniki:◦Czas wykonania,◦Zajętość pamięci.

Page 10: Algorytmy i struktury danych

Czasy rozwiązywania Czasy rozwiązywania problemów o wielkich problemów o wielkich rozmiarachrozmiarachLiczba

operacji na sek.

Zadanie o rozmiarze 1 miliona Zadanie o rozmiarze 1 miliarda

n nlgn n2 n nlgn n2

106 sekundy sekundy tygodnie godziny godziny nigdy

109 natychmiast natychmiast godziny sekundy sekundy dziesiątki lat

1012 natychmiast natychmiast sekundy natychmiast natychmiast tygodnie

Źródło: R. Sedgewick, Algorytmy w C++, wyd. I., Wydawnictwo RM, Warszawa 1999, s. 38

Page 11: Algorytmy i struktury danych

Przykład 1Przykład 1Funkcja silnia

0!=1,n!=n*(n-1)!, n≥1, nN

Kod:Int silnia (int n){ If (n==0) return 1; Return n*silnia(n-1);}

Page 12: Algorytmy i struktury danych

Przykład 2Przykład 2

int count =0;for (int i=0; i<n; i++) if (a[i]==0) count++;

Operacja Krotnośćdeklaracja zmiennej 2Instrukcja przypisania 2Porównanie “<” n+1Porównanie “==” nDostęp do tablicy ninkrementacja ≤2n (pomiędzy n – brak zer – a

2n – wszystkie są zera

Page 13: Algorytmy i struktury danych

Przykład 3Przykład 3

int count =0;for (int i=0; i<n; i++)for (int j=i+1; j<n; j++)

if (a[i]+a[j]==0) count++;Operacja krotność

deklaracja zmiennej n+2

Instrukcja przypisania n+2

Porównanie “<” ½(n+1)(n+2)

Porównanie “==” ½n(n-1) (korzystamy ze wzoru na sumę szeregu liczb naturalnych od 1 do n)

Dostęp do tablicy n(n-1)

inkrementacja ≤n2

2)1()1(...210 2

1n

nnn

Page 14: Algorytmy i struktury danych

Przykład 3 – notacja tyldaPrzykład 3 – notacja tyldaOperacja notacja tylda koszt Całkowity koszt

deklaracja zmiennej

~n t1 ~t1 n

Instrukcja przypisania

~n t2 ~t2 n

Porównanie “<” ~1/2 n2 t3 ~t3 n2

Porównanie “==” ~1/2 n2

Dostęp do tablicy ~ n2 t4 ~t4 n2

inkrementacja ≤ n2 t5 ≤t5 n2

ostatecznie ~c n2

Page 15: Algorytmy i struktury danych

Notacja „tylda” – szacowanie Notacja „tylda” – szacowanie składnikówskładnikówoszacuj czas działania (albo

pamięci) jako funkcję, która przyjmuje dane wejściowe o rozmiarze n,

zignoruj wyrazy o mniejszej ważności:◦gdy n jest duże, wyrazy są

nieistotne,◦gdy n jest małe, nie bierzemy ich

pod uwagę

Page 16: Algorytmy i struktury danych

Notacja ΘNotacja ΘDla danej funkcji g(n) oznaczamy przez Θ

(g(n)) zbiór funkcjiΘ(g(n))={f(n): istnieją dodatnie stałe c1, c2 i

n0 takie, że 0≤c1g(n) ≤f(n) ≤c2g(n) dla wszystkich n ≥n0} c2g(n)

c1g(n)

f(n)

nn0

Page 17: Algorytmy i struktury danych

Notacja ONotacja ODla danej funkcji g(n) oznaczamy przez O

(g(n)) zbiór funkcji O(g(n))={f(n): istnieją dodatnie stałe c i n0

takie, że 0≤ f(n) ≤cg(n) dla wszystkich n

≥n0} cg(n)

f(n)

nn0

Page 18: Algorytmy i struktury danych

Notacja ΩNotacja ΩDla danej funkcji g(n) oznaczamy przez Ω

(g(n)) zbiór funkcji Ω (g(n))={f(n): istnieją dodatnie stałe c i n0

takie, że 0≤cg(n) ≤f(n) dla wszystkich n

≥n0}

cg(n)

f(n)

nn0

Page 19: Algorytmy i struktury danych

TwierdzenieDla każdych dwóch funkcji f(n) i g(n) zachodzi

zależność f(n)= Θ(g(n)) wtedy i tylko wtedy gdy f(n)=O(g(n)) i f(n)= Ω(g(n)).

Notacja oDla danej funkcji g(n) oznaczamy przez o (g(n)) zbiór

funkcjio(g(n))={f(n): dla każdej dodatniej stałej c istnieje

stała n0 >0 taka, że 0≤f(n)<cg(n) dla wszystkich n ≥n0}

Notacja ωDla danej funkcji g(n) oznaczamy przez ω (g(n)) zbiór

funkcjiω (g(n))={f(n): dla każdej dodatniej stałej c>0

istnieje stała n0 >0 taka, że 0≤cg(n) <f(n) dla wszystkich n ≥n0}

Page 20: Algorytmy i struktury danych

Równania rekurencyjneRównania rekurencyjneopisuje funkcję złożoności w

zależności od jej wartości dla danych wejściowych o mniejszych rozmiarach

Trzy metody rozwiązywanie rekurencji:◦metoda podstawiania ◦metoda iteracyjna◦metoda rekurencji uniwersalnej

Page 21: Algorytmy i struktury danych

Metoda podstawianiaMetoda podstawianiaMetoda ta najpierw wymaga

odgadnięcia postaci rozwiązania a następnie wykazania przez indukcję, że jest ono poprawne. Konieczne tez jest znalezienie odpowiednich stałych.

Metoda ta może być używana do określenia górnego albo dolnego oszacowania na wartości rozwiązania rekurencji

Page 22: Algorytmy i struktury danych

Przykład Przykład Obliczyć ograniczenie górne

funkcji zadanej zależności rekurencyjną

nn

TnT

2

2)(

Page 23: Algorytmy i struktury danych

Przykład 2Przykład 2Zamiana zmiennych

nnTnT lg2)(

Page 24: Algorytmy i struktury danych

Metoda iteracyjnaMetoda iteracyjnaPolega na rozwijaniu (iterowaniu)

rekurencji i wyrażeniu jej jako sumy składników zależnych tylko od n oraz warunków brzegowych. Następnie można użyć technik sumowania do oszacowania rozwiązania.

Page 25: Algorytmy i struktury danych

PrzykładPrzykład

nTnT n 43)(

Page 26: Algorytmy i struktury danych

Twierdzenie o rekurencji Twierdzenie o rekurencji uniwersalnejuniwersalnej

Page 27: Algorytmy i struktury danych

PrzykładyPrzykładyT(n)=9T(n/3)+nT(n)=T(2n/3)+1T(n)=3T(n/4)+nlgn

Page 28: Algorytmy i struktury danych

Sortowanie przez wstawianie Sortowanie przez wstawianie – Insertion sort– Insertion sortInsertionsort (data[n]){

for (j=1;j<n;i++){

key=data[j];

//Wstaw data[j] w posortowany ciąg data[1..j-1]

i=j-1;

while i>0 i data[i]>key {

data[i+1]=data[i];

i--;

}

data[i+1]=key;

}

}

Page 29: Algorytmy i struktury danych

Sortowanie przez wstawianie Sortowanie przez wstawianie Analiza złożonościAnaliza złożoności

Operacja Koszt krotność

for (j=1;j<n;i++){ c1 n

key=data[j]; c2 n-1

//Wstaw data[j] w posortowany ciąg data[1..j-1]

0 n-1

i=j-1; c4 n-1

while i>0 i data[i]>key c5

data[i+1]=data[i]; c6

i--; c7

data[i+1]=key; c8 n-1

n

jjt

2

)1(

n

jjt

2

n

jjt

2

)1(

Page 30: Algorytmy i struktury danych

BibliografiaBibliografia Cormen Thomas; Leiserson Charles; Rivest

Ronald; Stein Clifford, „Wprowadzenie do Algorytmów”, Wydawnictwo Naukowe PWN, Warszawa 2012

Sedgewick Robert, „Algorytmy w C++”, Wydawnictwo RM, Warszawa 1999,

Drozdek Adam, „C++. Algorytmy i Struktury Danych”, Wydawnictwo Helion, Gliwice 2004,

Wróblewski Piotr, „Algorytmy, Struktury Danych i Techniki Programowania”, Wydawnictwo Helion, Gliwice 2010,

Priceton University, Course on algorithms, http://code.google.com/intl/pl-PL/edu/submissions/SedgewickWayne/index.html,