Zaawansowane techniki algorytmiczne

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

PRAM.
STRUKTURY DANYCH.
Algorytmy sortowania i porządkowania
Algorytmy – c.d. złożoność algorytmów struktury danych
Algorytmy – c.d. struktury danych złożoność algorytmów
Standardowa biblioteka języka C++
ALGORYTMY GRAFOWE.
Dynamiczne struktury danych Listy, Kolejki, Stosy
METODY ANALIZY PROGRAMÓW
Grażyna Mirkowska PJWSTK 15 listopad 2000
Wykład 10 Metody Analizy Programów Specyfikacja Struktur Danych
Algorytmy – zapis struktur programowania
Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem
Minimalne drzewa rozpinające
Standard Template Library
PROGRAMOWANIE STRUKTURALNE
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Elementarne struktury danych Piotr Prokopowicz
Sztuczna Inteligencja 2.1 Metody szukania na ślepo
pseudokody algorytmów
ZŁOŻONOŚĆ OBLICZENIOWA
ALGORYTMY GEOMETRYCZNE.
Algorytmy grafowe Reprezentacja w pamięci
Rzędy wielkości funkcji
Analiza kosztu zamortyzowanego
Algorytmy i struktury danych
Algorytmika w drugim arkuszu maturalnym. Standardy wymagań I. WIADOMOŚCI I ROZUMIENIE I. WIADOMOŚCI I ROZUMIENIE II.KORZYSTANIE Z INFORMACJI II.KORZYSTANIE.
FP-Growth Adam Pieśkiewicz Kamil Niezręcki Krzysztof Grześkowiak
Algorytmy i struktury danych
Algorytmy i struktury danych
Zbiór do posortowania mieści się w pamięci
Podstawy programowania II
Algorytmy i Struktury Danych Sortowanie
Operacje na strukturach listowych
DRZEWA BINARNE Emilia Krukowska.
Przegląd podstawowych algorytmów
Algorytmy i struktury danych
Algorytmy i struktury danych
Równania rekurencyjne
Reprezentacja grafów i operacje na grafach na przykładzie algorytmu Dijkstry i algorytmu na odnajdywanie Silnych Spójnych Składowych Temat Opracowali:
sortowanie na bazie – wykorzystanie sortowania ze zliczaniem
Listy, stosy i kolejki..
Złożone typy danych Listy Tworzenie elastycznych baz danych
Rodzaje, przechodzenie grafu
ALGORYTM. SCHEMATY BLOKOWE. KONSTRUKCJE PROGRAMU, PODPROGRAMY, FUNKCJE
Dynamiczne struktury danych
Algorytmy i Struktury Danych
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 04 k-ty co do wielkości. Stosy Grażyna Mirkowska PJWSTK, ITN semestr letni 2002.
Algorytmy i Struktury Danych Struktury Danych
Algorytmy i Struktury Danych Grafy
Algorytmy grafowe Minimalne drzewa rozpinające
Algorytmy równoległe Algorytm równoległy pozwala na wykonywanie w danej chwili więcej niż jednej operacji. EREW - wyłączny odczyt i wyłączny zapis; CREW.
Złożoność obliczeniowa algorytmów
Przeszukiwanie wszerz
Sortowanie: kopce Parent(i)
Literatura podstawowa
NP-zupełność Problemy: rozwiązywalne w czasie wielomianowym - O(nk)
INFORMATYKA DANE
Zbiory dynamiczne.
ALGORYTMY I STRUKTURY DANYCH
Algorytmy i Struktury Danych Algorithms and Data Structures dr inż. Lech Jamroż Wydział Fizyki, Matematyki I Informatyki.
Listy.
Programowanie Obiektowe – Wykład 5
Kolejka priorytetowa.
Algorytmy i Struktury Danych Wprowadzenie
ALGORYTMY I STRUKTURY DANYCH
Bufory.
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

Zaawansowane techniki algorytmiczne Analiza algorytmów. Struktury danych. Algorytmy grafowe. Operacje na macierzach. Kombinatoryka. Materiały pomocnicze znajdują się pod adresem: http://www.pz.zgora.pl/iie/pomoce/index.html

Literatura podstawowa Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. Wprowadzenie do algorytmów. WNT, Warszawa, 1998. Edward M. Reingold, Jurg Nievergelt, Narsingh Deo. Algorytmy kombinatoryczne. PWN, Warszawa, 1985. Giovanni De Micheli. Synteza i optymalizacja układów cyfrowych. WNT, Warszawa, 1998. Robert Sedgewick. Algorytmy w C++. RM, Warszawa, 1999. Lech Banachowski, Antomi Kreczmar, Wojciech Rytter. Analiza algorytmów i struktur danych. WNT, Warszawa, 1989.

Plan zajęć Struktury danych. Ewaluacja czasu działania algorytmu. Stosy, kolejki, listy, drzewa. Sortowanie. Sortowanie przez wstawienie, sortowanie przez kopcowanie, sortowanie szybkie. Analiza algorytmów sortowania. Algorytmy grafowe. Reprezentację grafów w pamięci. Przeszukiwanie. Sortowanie topologiczne. Minimalne drzewa rozpinające. Najkrótsze ścieżki. Zaawansowane metody algorytmiczne. Programowanie dynamiczne. Algorytmy zachłanne. Algorytmy równoległe. Rodzaje algorytmów równoległych, analiza. NP-zupełność. Wielomianowy czas. NP-zupełność i redukowalność. Problemy NP-zupełne.

Czas działania algorytmów Algorytm sortowania Insertion-Sort(A) 1. for j:=2 to length[A] 2. do key:=A[j] /* Wstaw A[j] w posortowany ciąg A[1..j-1].*/ 3. i:= j-1 4. while i>0 i A[i] > key 5. do A[i+1] := A[i] 6. i:= i-1 7. A[i+1] := key Przykład działania algorytmu 5 2 4 6 1 3 2 5 4 6 1 3 2 4 5 6 1 3 1 2 4 5 6 3 1 2 3 4 5 6

Czas działania algorytmów Czas działania algorytmu Insertion-Sort: Niech n=length[A]. Oceniamy najgorszy przypadek. Pętla zewnętrzna: n-1 razy. Pętla wewnętrzna: od 1 do n-1 razy, średnia - n/2. Czas: T(n)  ( n-1 ) ( a + nb/2) = n2b/2 + n(a-b/2) - a Liczy się tylko rząd wielkości funkcji: pesymistyczny czas działania Insretion-Sort - (n2)

Czas działania algorytmów Notacja : (g(n)) = {f(n): istnieją stałe c1, c2 i n0 takie, że 0  c1g(n)  f(n)  c2g(n) dla wszystkich n  n0}. Asymptotyczne ogranicza funkcję od góry oraz od dołu. Notacja O: O(g(n)) = {f(n): istnieją stałe c i n0 takie, że 0  f(n)  cg(n) dla wszystkich n  n0}. Asymptotyczne ogranicza funkcję od góry. cg(n) c2g(n) f(n) f(n) c1g(n) f(n)=O(g(n)) f(n)=(g(n)) n n n0 n0

Struktury danych: stosy Stos: last in, first out (LIFO) Push(S, x) 1. top[S] := top[S]+1 2. S[top[S]] := x Pop(S) 1. if Stack-Empty(S) 2. then error „niedomiar” 3. else top[S] := top[S]+1 4. return S[top[S]+1] 1 2 3 4 5 6 7 S 5 6 2 9 top[S] = 4 S[4] = 9

Struktury danych: kolejki Kolejka: first in, first out (FIFO) Enqueue(Q, x) 1. Q[tail[Q]] := x 2. if tail[Q] = length[Q] 3. then tail[Q] := 1 4. else tail[Q] := tail[Q] + 1 Dequeue(Q) 1. x := Q[head[Q]] 2. if head[Q] = length[Q] 2. then head[Q] := 1 3. else head[Q] := head[Q] + 1 4. return x 1 2 3 4 5 6 7 Q 7 1 8 5 head[Q] = 2 tail[Q] = 6

Struktury danych: listy key prev next head[L] / 5 6 4 1 / List-Insert(L, x) 1. next[x] := head[L] 2. if head[L]  NIL 3. then prev[head[L]]:=x 4. head[L] := x 5. prev[x] := NIL List-Search(L, k) 1. x := head[L] 2. while x  NIL i key[x]  k 3. do x := next[x] 4. return x List-Delete(L, x) 1. if prev[x]  NIL 2. then next[prev[x]] := next[x] 3. else head[L] := next[x] 4. if next[x]  NIL 5. then prev[next [x]] := prev[x]

Przydzielanie i zwalnianie pamięci head[L] free head[L] free

Przydzielanie i zwalnianie pamięci Allocate-Object() 1. if free = NIL 2. then error „brak pamięci” 3. else x := free 4. free := next[x] 5. return x Free-Object() 1. next[x] := free 2. free := x

Struktury danych: drzewa Drzewa binarne root[T]

Struktury danych: drzewa Drzewa ukorzenione o dowolnym stopniu rozgałęzień root[T]