Struktury danych
i złożoność obliczeniowa
Prof. dr hab. inż. Jan Magott
Formy zajęć:
• Wykład 1 godz.,
• Ćwiczenia 2 godz.,
• Projekt 1 godz. . Strona kursu:
http://www.zio.iiar.pwr.wroc.pl/sdizo.html
Struktury danych wchodzące w zakres kursu:
• Tablice,
• Listy,
• Kolejki,
• Stosy,
• Kopce,
• Grafy,
• Drzewa binarne,
• Tablice haszujące.
Plan 1. wykładu:
1. Podstawowe zasady analizy algorytmów:
poprawność, skończoność,
2. Złożoność obliczeniowa (klasy złożoności czasowej i pamięciowej),
3. Koszt zamortyzowany,
4. Polskie Ramy Kwalifikacyjne przedmiotu,
Literatura.
Podstawowe zasady analizy algorytmów:
poprawność, skończoność
Algorytm to procedura do rozwiązywania problemu.
Algorytm może być wyrażony w:
• Języku naturalnym,
• Języku formalnym,
• Języku zawierającym konstrukcje języka naturalnego i formalnego,
• Schematem blokowym,
• Diagramem aktywności (czynności) języka UML,
• Pseudokodzie,
• Języku programowania.
Podstawowe zasady analizy algorytmów:
poprawność, skończoność
Algorytm rozwiązywania danego problemu oblicze-
niowego jest poprawny, jeśli dla każdej instancji
(egzemplarza) tego problemu zatrzymuje się i daje
dobry wynik.
Podstawowe zasady analizy algorytmów:
poprawność, skończoność
Podstawowe zasady analizy algorytmów:
poprawność, skończoność
Podstawowe zasady analizy algorytmów:
poprawność, skończoność
Poprawność algorytmów
Niezmiennik (ang. invariant) pętli jest warunkiem, który:
Inicjowanie: Jest prawdziwy przed pierwszą iteracją pętli, Niezmienniczość: Jeśli jest prawdziwy przed pewną
iteracją pętli, to jest prawdziwy przed następną iteracją, Kończenie: Po zakończeniu pętli, z niezmiennika można udowodnić poprawność algorytmu.
Własność stopu: dla poprawnych danych wejściowych
algorytm zatrzymuje się w skończonym czasie.
Podstawowe zasady analizy algorytmów:
poprawność, skończoność
Podstawowe zasady analizy algorytmów:
poprawność, skończoność
Algorytm sortowania bąbelkowego niemalejąco w kodzie C
void bubblesort(int table[], int size) {
int i, j, temp;
for (i = 0; i<size; i++) {
for (j=0; j<size-1-i; j++) {
if (table[j] > table[j+1]) {
temp = table[j+1];
table[j+1] = table[j];
table[j] = temp;
} }
} }
Podstawowe zasady analizy algorytmów:
poprawność, skończoność
Podstawowe zasady analizy algorytmów:
poprawność, skończoność
1 12 3 9 8 2 … 11 9 15 17 23 29
nieposortowane posortowane
Złożoność obliczeniowa czasowa
Problemy rozstrzygalne i nierozstrzygalne
Problem rozstrzygalny (rozwiązywalny) to problem, dla którego istnieje algorytm znajdujący rozwiązanie w
skończonej liczbie kroków.
Problem nierozstrzygalny (nierozwiązywalny) to problem, dla którego udowodniono, że nie istnieje algorytm
znajdujący rozwiązanie w skończonej liczbie kroków.
Złożoność obliczeniową badamy dla problemów
rozstrzygalnych.
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Przykłady problemów o więcej niż jednym rozmiarze danych:
Problem mnożenia macierzy nie kwadratowych – 3 rozmiary,
Problemy grafowe – rozmiarami mogą być: liczba
wierzchołków, liczba łuków.
Złożoność obliczeniowa czasowa
Wg teorii złożoności obliczeniowej efektywnym jest algorytm o złożoności czasowej ograniczonej od góry przez wielomian od rozmiarów problemu.
Algorytmy o wykładniczej złożoności obliczeniowej
uważane są za nieefektywne.
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Dwie galaktyki z efektami
soczewkowania grawitacyjnego
[Zdjęcie wykonane teleskopem Hubble’a]
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Algorytm sortowania bąbelkowego w kodzie C
void bubblesort(int table[], int size) {
int i, j, temp;
for (i = 0; i<size; i++) {
for (j=0; j<size-1-i; j++) {
if (table[j] > table[j+1]) {
temp = table[j+1];
table[j+1] = table[j];
table[j] = temp;
} }
} }
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Problem:
Czy istnieje algorytm wielomianowy dla
problemu podziału zbioru?
Złożoność obliczeniowa czasowa i pamię-
ciowa
Złożoność obliczeniowa czasowa
Problem:
Czy istnieje algorytm wielomianowy dla problemu podziału zbioru?
Udowodniono:
Problem podziału zbioru jest tzw. Problemem NP-
zupełnym, tzn. z jego rozwiązania można wyznaczyć rozwiązanie każdego problemu klasy NP.
Dla problemów NP-zupełnych wydaje się prawie
pewne, że algorytmu wielomianowego nie uda się
zbudować.
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Czy rozwiązanie jednego z dwu problemów:
Decyzyjnego problemu szeregowania zadań niezależnych na dwu maszynach
i
Problemu podziału zbioru
można wyznaczyć na postawie rozwiązania drugiego?
Powyższe pytanie dotyczy redukcji (transformacji) jednego problemu do drugiego.
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa
Czy rozwiązanie jednego z dwu problemów:
Decyzyjnego problemu szeregowania zadań niezależnych na dwu maszynach
i
Problemu podziału zbioru
można wyznaczyć na postawie rozwiązania drugiego?
Powyższe pytanie dotyczy redukcji (transformacji) jednego problemu do drugiego.
Jakie ograniczenie narzucilibyśmy na złożoność obliczeniową transformacji?
Złożoność obliczeniowa czasowa
Problem charakteryzowany jest poprzez
Dane (dane wejściowe) i Zadanie do wykonania (np. Prob. opt.) lub
Dane (dane wejściowe) i Pytanie (Prob. dec.).
Złożoność obliczeniowa czasowa
Złożoność obliczeniowa czasowa i pamię- ciowa
Złożoność obliczeniowa algorytmu a złożoność problemu
Algorytm rozwiązujący problem może mieć czasową lub pamięciową złożo- ność obliczeniową logarytmiczną, liniową, wielomianową, wykładniczą lub wiele innych.
Złożoność obliczeniowa problemu określa wymagania czasowe lub pamięciowe na algorytm rozwiązujący ten problem.
Jeśli problem jest NP-zupełny, to prawie na pewno nie zostanie znaleziony wielomianowy algorytm rozwiązujący.
Lepiej nie mówić: Dla problemu NP-zupełnego najprawdopodobniej nie
zostanie znaleziony wielomianowy algorytm rozwiązujący.
Złożoność obliczeniowa czasowa i pamię- ciowa
P – klasa problemów, dla których rozwiązania wymagany jest czas ograniczony od góry przez wielomian od
rozmiarów problemu,
PSPACE – klasa problemów, dla których rozwiązania
wymagana jest pamięć ograniczona przez wielomian od rozmiarów problemu,
EXPTIME – klasa problemów, dla których rozwiązania
wymagany jest czas ograniczony przez funkcję wykładniczą od rozmiarów problemu,
EXPSPACE – klasa problemów, dla których rozwiązania wymagana jest pamięć ograniczona przez funkcję
wykładniczą od rozmiarów problemu,
Złożoność obliczeniowa czasowa i pamię-
ciowa
Złożoność obliczeniowa czasowa i pamię-
ciowa
Złożoność obliczeniowa czasowa i pamię- ciowa
P ⊊ EXPTIME, PSPACE ⊊ EXPSPACE
[Źródło Wikipedia]
Koszt zamortyzowany
Koszt zamortyzowany
• Assumption
Execution times of operations, actions or statements are given by a real number.
Linear program Pr where A, B, C, D are operations, actions or statements
- execution time of A
• Execution time of the program Pr
[J. Magott, Information Systems Analysis]
Start A B C D End
R
) A
(
(Pr) ( ) A ( ) B ( ) C ( ) D
(Pr)( )A ( )B ( )C ( )D
Koszt zamortyzowany
A program with decision
– execution time of decision D
P – probability of an event that after the decision D, the B action is executed If then execution time of the program depends on the decision.
Start A End
B
C D
P
1-P
( ) D
( )B
( )CKoszt zamortyzowany
Execution time estimation methods
1. The worst case method
- execution time estimation of the worst case
Application: real-time systems.
w(Pr) ( )A ( )D max{ ( ), ( )} B C
Start A End
B
C D
P
1-P
w(Pr)Koszt zamortyzowany
2. The most probable path method
If P>1-P then
If P<1-P then
Start A End
B
C D
P
1-P
g(Pr) ( ) A ( ) D ( ) B
g(Pr) ( ) A ( ) D ( ) C
Koszt zamortyzowany
Start A End
B
C D
P
1-P
a
A D B C
(Pr) ( ) ( ) ( ) ( ) 2
m(Pr)
( )A
( )D P
( )B (1 P)
( )CKoszt zamortyzowany
Czasowa złożoność obliczeniowa średniego przypadku
Struktury sterowania:
• Kompozycja sekwencyjna,
• Alternatywa,
• Instrukcje pętli: for, while, do while,
• Instrukcja przełączania switch.
m(Pr)
( )A
( )D P
( )B (1 P)
( )CStart A End
B
C D
P
1-P
Koszt zamortyzowany
Czasowa złożoność obliczeniowa średniego przypadku
Metody wyznaczania:
• Analityczna – na podstawie prawdopodobieństw
rozgałęzień i rozkładów czasów wykonania instrukcji,
• Symulacyjna – metoda Monte Carlo na podstawie analogicznych danych.
m(Pr)
( )A
( )D P
( )B (1 P)
( )CStart A End
B
C D
P
1-P
Koszt zamortyzowany
(Notacja asymptotyczna)
Koszt zamortyzowany
(Notacja asymptotyczna)
Koszt zamortyzowany
(Notacja asymptotyczna)
Koszt zamortyzowany
(Notacja asymptotyczna)
Koszt zamortyzowany
(Notacja asymptotyczna)
Koszt zamortyzowany
Operacja 1 Operacja 2
…
…
…
Operacja n
Koszt zamortyzowany
Cel:
Znalezienie jak najmniejszego pesymistycznego kosztu wykonania algorytmu.
Sposób osiągnięcia:
Wyznaczenie kosztu zamortyzowanego algorytmu –
co nie wymaga wyznaczania wielkości probabilistycznych.
Koszt zamortyzowany
Metody analizy kosztu zamortyzowanego:
• Kosztu sumarycznego,
• Księgowania,
• Potencjału.
Koszt zamortyzowany
(Metoda kosztu sumarycznego)
Koszt zamortyzowany
(Metoda kosztu sumarycznego)
Koszt zamortyzowany
(Metoda kosztu sumarycznego)
Koszt zamortyzowany
(Metoda kosztu sumarycznego)
22 15 19 20 7 11
3 7
11 3
MULTIPOP(S,4) MULTIPOP(S,8)
Pusty stos S
Koszt zamortyzowany
(Metoda kosztu sumarycznego)
Koszt zamortyzowany
(Metoda księgowania)
Koszt zamortyzowany
(Metoda księgowania)
Koszt zamortyzowany
(Metoda księgowania)
Koszt zamortyzowany
(Metoda księgowania)
Trzy następujące slajdy pochodzą
z Polskich Ram Kwalifikacyjnych kursu
Struktury danych i złożoność obliczeniowa
Forma zajęć - wykład Wy1
Podstawowe zasady analizy algorytmów: poprawność, złożoność obliczeniowa (klasy złożoności czasowej i pamięciowej), koszt zamortyzowany.
Polskie Ramy Kwalifikacyjne przedmiotu. Literatura.
2
Wy2 Podstawowe techniki: metoda dziel i zwyciężaj, metoda
zachłanna, transformacyjna konstrukcja algorytmu. 1 Wy3 Podstawowe struktury: stosy, kolejki, listy, kopce. 1 Wy4 Kodowanie dziesiętne, dwójkowe i jedynkowe danych
wejściowych problemu. „Rozsądna” reguła kodowania. 1
Wy5
Problemy „ łatwe” i „trudne”. Problemy optymalizacyjne i decyzyjne.
Funkcja czasowej złożoności obliczeniowej algorytmu.
Deterministyczna jednotaśmowa maszyna Turinga.
Przykładowy program dla deterministycznej maszyny Turinga.
2
Wy6
Program dla k-taśmowej deterministycznej maszyny Turinga.
Dodawanie liczb dwójkowych na deterministycznych
maszynach Turinga. Model obliczeń RAM. Algorytmy wielomia- nowy i ponadwielomianowy.
2
Wy7
Niedeterministyczna maszyna Turinga. Twierdzenie o relacji między Niedeterministyczną a Deterministyczną Maszyną Turinga. Klasy P i NP problemów decyzyjnych. Transformacja wielomianowa. Problem NP-zupełny. Dowodzenie NP-zupeł- ności problemów decyzyjnych.
2
Polskie Ramy Kwalifikacyjne przedmiotu. Literatura.
Wy2 Podstawowe techniki: metoda dziel i zwyciężaj, metoda
zachłanna, transformacyjna konstrukcja algorytmu. 1 Wy3 Podstawowe struktury: stosy, kolejki, listy, kopce. 1 Wy4 Kodowanie dziesiętne, dwójkowe i jedynkowe danych
wejściowych problemu. „Rozsądna” reguła kodowania. 1
Wy5
Problemy „ łatwe” i „trudne”. Problemy optymalizacyjne i decyzyjne.
Funkcja czasowej złożoności obliczeniowej algorytmu.
Deterministyczna jednotaśmowa maszyna Turinga.
Przykładowy program dla deterministycznej maszyny Turinga.
2
Wy6
Program dla k-taśmowej deterministycznej maszyny Turinga.
Dodawanie liczb dwójkowych na deterministycznych
maszynach Turinga. Model obliczeń RAM. Algorytmy wielomia- nowy i ponadwielomianowy.
2
Wy7
Niedeterministyczna maszyna Turinga. Twierdzenie o relacji między Niedeterministyczną a Deterministyczną Maszyną Turinga. Klasy P i NP problemów decyzyjnych. Transformacja wielomianowa. Problem NP-zupełny. Dowodzenie NP-zupeł- ności problemów decyzyjnych.
2
Wy8 Dowody NP-zupełności wybranych problemów 2
Wy9 Kolokwium 2
Suma godzin 15
Forma zajęć - ćwiczenia
Liczba godzin Ćw1 Zajęcia wprowadzające. Omówienie programu, podaniewymagań. 1
Ćw2 Podstawowe zasady analizy algorytmów 2
Ćw3 Podstawowe struktury danych: kolejki, listy, stosy, kopce 3 Ćw4 Struktury drzewiaste: BST, AVL, B-R, B-drzewo 5 Ćw5 Algorytmy sortowania np. Insertion-, Quick-, Merge-,
Heap-, Radix- 3
Ćw6 Tablice haszujące 2
Ćw7 Algorytmy selekcji: Hoare’a, magicznych piątek 1 Ćw8
Algorytmy grafowe: reprezentacja grafów, metody przeszukiwania, minimalne drzewa rozpinające, problemy ścieżkowe
6 Ćw9 Wybrane problemy złożoności obliczeniowej: model
maszyny Turinga (DTM, NDTM), redukcja wielomianowa 5
Ćw10 Kolokwium 2
Suma godzin 30
Forma zajęć – projekt
Liczba godzin Pr1 Sprawy organizacyjne, omówienie zadań projektowych,wymagań oraz warunków zaliczenia. 2
Pr2 Badanie efektywności operacji na danych w podstawo-
wych strukturach danych. 5
Pr3
Badanie efektywności wybranych algorytmów grafowych np. w zależności od rozmiaru, struktury czy sposobu reprezentacji grafu.
8
Suma godzin 15