algorytmy i struktury danych
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 PresentationTRANSCRIPT
Algorytmy i struktury Algorytmy i struktury danychdanychStudia stacjonarne:ECTS: 5Wykłady: 30 Ćwiczenia: 30
Studia niestacjonarne:ECTS: 5Wykłady: 20 Ćwiczenia:20
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,
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)
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
RekurencjaRekurencjaRekurencja - wywołanie
kilkakrotne pewnej procedury, która odwołuje się do samej siebie
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
Rodzaje rekurencjiRodzaje rekurencji
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
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.
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
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);}
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
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
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
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ę
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
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
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
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}
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
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
Przykład Przykład Obliczyć ograniczenie górne
funkcji zadanej zależności rekurencyjną
nn
TnT
2
2)(
Przykład 2Przykład 2Zamiana zmiennych
nnTnT lg2)(
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.
PrzykładPrzykład
nTnT n 43)(
Twierdzenie o rekurencji Twierdzenie o rekurencji uniwersalnejuniwersalnej
PrzykładyPrzykładyT(n)=9T(n/3)+nT(n)=T(2n/3)+1T(n)=3T(n/4)+nlgn
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;
}
}
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(
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,