Złożoność algorytmów. Wstęp do Informatyki

Podobne dokumenty
WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Podstawy Informatyki. Sprawność algorytmów

! "# $ % "! &#"'% "! &( #'% "! )

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

TEORETYCZNE PODSTAWY INFORMATYKI

Podstawy Programowania. Złożoność obliczeniowa

Informatyka 1. Złożoność obliczeniowa

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

INFORMATYKA SORTOWANIE DANYCH.

Zasady analizy algorytmów

Zaawansowane algorytmy i struktury danych

Efektywność algorytmów

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Podstawy Programowania

Podstawy Programowania. Złożoność obliczeniowa

TEORETYCZNE PODSTAWY INFORMATYKI

Złożoność Obliczeniowa Algorytmów

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

Matematyczne Podstawy Informatyki

1. Analiza algorytmów przypomnienie

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Teoretyczne podstawy informatyki

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

Sortowanie - wybrane algorytmy

Algorytmy i struktury danych Matematyka III sem.

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Wykład 2. Poprawność algorytmów

Programowanie w VB Proste algorytmy sortowania

Podstawy Programowania

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

Wstęp do programowania

Strategia "dziel i zwyciężaj"

Teoretyczne podstawy informatyki

Struktury Danych i Złożoność Obliczeniowa

Wstęp do programowania

Analiza algorytmów zadania podstawowe

Wprowadzenie do złożoności obliczeniowej

Algorytmy i Struktury Danych.

Podyplomowe Studium Programowania i Systemów Baz Danych

PROBLEMY NIEROZSTRZYGALNE

Efektywna metoda sortowania sortowanie przez scalanie

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Podstawy Informatyki. Metody dostępu do danych

Algorytmy i Struktury Danych

Sortowanie przez scalanie

Wstęp do programowania

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy:

Złożoność obliczeniowa zadania, zestaw 2

Porównanie Heap Sort, Counting Sort, Shell Sort, Bubble Sort. Porównanie sortowao: HS, CS, Shs, BS

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Algorytmy i Struktury Danych.

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

KONSPEKT ZAJĘĆ KOŁA INFORMATYCZNEGO LUB MATEMATYCZNEGO W KLASIE III GIMNAZJUM LUB I LICEUM ( 2 GODZ.)

Podyplomowe Studium Informatyki

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

5. Podstawowe algorytmy i ich cechy.

Sortowanie bąbelkowe

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Jeszcze o algorytmach

1.1. Uzupełnij poniższą tabelę: i wynik(i)

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Liczby pierwsze - wstęp

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Algorytmy i struktury danych

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Teoria obliczeń i złożoność obliczeniowa

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.

Zadania obliczeniowe, algorytmy i złożoność obliczeniowa

Informatyka A. Algorytmy

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Technologie informacyjne Wykład VII-IX

Algorytmy i Struktury Danych. (c) Marcin Sydow. Sortowanie Selection Sort Insertion Sort Merge Sort. Sortowanie 1. Listy dowiązaniowe.

Algorytmy i ich poprawność

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

Zadanie 1. Algorytmika ćwiczenia

KRYTERIA OCENIANIA ODPOWIEDZI Próbna Matura z OPERONEM. Matematyka Poziom podstawowy

WSTĘP DO INFORMATYKI. Złożoność obliczeniowa, efektywność i algorytmy sortowania

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Algorytmy w teorii liczb

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Poprawność algorytmów

Algorytmy sortujące i wyszukujące

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 9 Rekurencja

Zaawansowane algorytmy. Wojciech Horzelski

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Zaliczenie. Egzamin. lub. Wykład. Zaliczenie. Ćwiczenie. 3 zadania. Projekty. Ocena. Na ocenę

Transkrypt:

Złożoność algorytmów Złożoność pamięciowa - liczba i rozmiar struktur danych wykorzystywanych w algorytmie Złożoność czasowa - liczba operacji elementarnych wykonywanych w trakcie przebiegu algorytmu

Złożoność algorytmów - Dokładniej ZŁOŻONOŚĆ CZASOWA ALGORYTMU - zależność pomiędzy liczbą operacji elementarnych wykonywanych w trakcie przebiegu algorytmu a rozmiarem danych wejściowych (podawana jako funkcja rozmiaru tych danych) np. sortowanie bąbelkowe: F(N) =?, gdzie N jest długością listy algorytm rozwiązywania problemu wież Hanoi: F(N) =?, gdzie N jest liczbą krążków wyznaczanie minimalnego drzewa rozpinającego: F(N,M) =?, gdzie N jest liczbą wierzchołków a M - liczbą krawędzi w grafie (sieci połączeń)

Co to znaczy w praktyce? W praktyce złożoność czasowa decyduje o przydatności algorytmów Ponieważ: jest mitem stwierdzenie, że komputery są tak szybkie, że czas nie stanowi problemu (rozkład na czynniki pierwsze dużych liczb - 300 cyfr - wymaga milionów lat) potrzebne jest rozwiązywanie coraz większych problemów: - komputerowe systemy wspomagania decyzji - komputerowe symulacje i prognozy muszą funkcjonować systemy komputerowe czasu rzeczywistego - automatyczne sterowanie w złożonych układach

Zmniejszanie czasu wykonania Normalizacja wartości w tablicy jednowymiarowej (wektorze) względem maksimum: Dane: V(1), V(2),..., V(N) Algorytm 1 1. wyznacz w zmiennej MAX największą z wartości ; 2. dla I od 1 do N wykonaj : 2.1. V(I) V(I) 100 / MAX Algorytm 2 1. wyznacz w zmiennej MAX największą z wartości ; 2. ILORAZ 100 / MAX ; 3. dla I od 1 do N wykonaj : 3.1. V(I) V(I) ILORAZ

Zmniejszanie czasu wykonania Wyszukiwanie liniowe elementu z listy o długości N: Algorytm 1 1. weź pierwszy element listy ; 2. wykonuj: 2.1. sprawdź czy bieżący element jest tym szukanym ; 2.2. sprawdź czy osiągnąłeś koniec listy ; 2.3. weź następny element z listy aż znajdziesz lub przejrzysz całą listę

Zmniejszanie czasu wykonania Wyszukiwanie liniowe elementu z listy o długości N: Algorytm 2 1. dopisz szukany element na końcu listy ; 2. weź pierwszy element listy ; 3. wykonuj: 3.1. sprawdź czy bieżący element jest tym szukanym ; 3.2. weź następny element z listy aż znajdziesz ; 4. sprawdź czy jesteś na końcu listy

Poprawianie złożoności algorytmu Porównujemy dwa algorytmy wykonujące to samo zadanie za pomocą jednej iteracji ograniczonej (liczba iteracji N wynika jednoznacznie z rozmiaru danych wejściowych) czasy wykonania algorytmów w funkcji rozmiaru danych wynoszą: F 1 (N) = K 1 + L 1 N F 2 (N) = K 2 + L 2 N do ich porównania możemy wykorzystać iloraz: s ( N ) F1 = F ( N ) ( N ) wtedy s(n) = 1 oznacza jednakową szybkość działania (ale tylko wtedy jest to możliwe, gdy K 1 = K 2 i L 1 = L 2 ) s(n) < 1 oznacza, że 1 algorytm jest szybszy (ale dla pewnych N może zachodzić s(n) > 1) 2

Poprawianie złożoności algorytmu Gdyby założyć, że interesują nas tylko zadania o rosnących rozmiarach (N ), to o relacji pomiędzy algorytmami powinna decydować wartość czas wykonania F 2 F 1 lim N s ( N ) = K 1 K 2 L L 1 2 F współczynnik porównania 1 F 2 K 1 L 1 1 K 2 L 2 N 0 rozmiar danych N L 1 L 2 N 0 rozmiar danych N

Notacja O Dwa algorytmy o czasach wykonania F 1 (N) i F 2 (N) mają złożoność tego samego rzędu, jeśli, lim F1 ( N ) F ( N N 2 ) = C gdzie 0 < C < jeśli C = 0, to algorytm o czasie wykonania F 1 (N) ma niższy rząd złożoności (ma lepszą złożoność) jeśli C =, to algorytm o czasie wykonania F 1 (N) ma wyższy rząd złożoności (ma gorszą złożoność)

Notacja O Algorytm o czasie wykonania F(N) ma złożoność liniową, jeśli lim N F( N ) = C (0 < C < ); N Złożoność rzędu N oznaczana jest symbolem F(N) = O(N) Algorytm o czasie wykonania F(N) ma złożoność kwadratową, jeśli F( N ) lim = C N 2 N (0 < C < ); Złożoność rzędu N 2 oznaczana jest symbolem F(N) = O(N 2 ) Dopiero znalezienie algorytmu o niższym rzędzie złożoności jest istotnym ulepszeniem rozwiązania danego zadania algorytmicznego!

Właściwości notacji O( ) zapis F(N) = O(g(N)) oznacza spełnienie warunku (0 < C < ); i można go odczytywać algorytm ma złożoność rzędu g(n) lub czas wykonania algorytmu jest O(g(N)), równość w zapisie F(N) = O(g(N)) powinna być rozumiana w ten sposób, że funkcja F(N) jest jedną z funkcji, które spełniają powyższy warunek lub precyzyjniej, że należy do zbioru wszystkich funkcji spełniających powyższy warunek

Właściwości notacji O( ) cd F(N) = O(F(N)), O(O(g(N))) = O(g(N)), c O(g(N)) = O(g(N)) (dla 0 < c < ), O(g(N)) + O(h(N)) = O(g(N) + h(n)), O(g(N)) O(h(N)) = O(g(N) h(n)) = g(n) O(h(N)) = h(n) O(g(N)), g( N ) jeśli zachodzi, lim = 0 N h( N ) to O(g(N)) + O(h(N)) = O(g(N) + h(n)) = O(h(N)), w wielu książkach to, co tutaj oznaczane jest symbolem O(g(N)) oznaczane jest Θ(g(N)) (theta)

Ulepszanie rzędu wielkości Jeśli algorytm wykonuje różną liczbę iteracji w zależności od konkretnych danych wejściowych możemy badać czas jego wykonania w najgorszym przypadku. czas wykonania Alg. 1 dla wyszukiwania liniowego F 1 (N) 2 N czas wykonania Alg. 2 dla wyszukiwania liniowego F 2 (N) N oba mają pesymistyczny czas wykonania O(N) - mogą zdarzyć się takie dane wejściowe, dla których trzeba będzie przejrzeć cała listę o długości N

Ulepszanie rzędu wielkości start Czy można zaproponować algorytm o lepszej złożoności? Weź całą listę wejściową Wyszukiwanie binarne elementu z listy uporządkowanej: Y 1, Y 2,..., Y N (dla każdego i < j zachodzi Y i Y ) j TAK NIE Czy szukany element jest mniejszy od elementu środkowego? Czy środkowy element bieżącej listy jest tym szukanym? NIE TAK Wypisz znalazłem Algorytm 3 Weź pierwszą połowę listy Weź drugą połowę listy stop NIE Czy lista bieżąca jest pusta? TAK Wypisz nie ma

Ulepszanie rzędu wielkości Ile razy jest powtarzana w najgorszym przypadku iteracja w algorytmie? Odpowiedź: 1 + log 2 N W najgorszym przypadku złożoność algorytmu wyszukiwania binarnego wynosi O(log 2 N) log 2 N N 0 Ponieważ N, czyli algorytm wyszukiwania binarnego ma złożoność o rząd niższą od prostego wyszukiwania, ale ma zastosowanie tylko dla list uporządkowanych

O ile lepiej? Skala ulepszenia: N 1+ log2 N 10 4 100 7 1 000 10 10 000 14 1 000 000 20 1 000 000 000 30 1 000 000 000 000 40 1 000 000 000 000 000 50 1 000 000 000 000 000 000 60

Jak szacować? Całkowity koszt czasowy w najgorszym przypadku: K 1 + max( K 3, K 4 ) + K 2 log 2 N Nie ma znaczenia stała liczba operacji podstawowych wykonywanych w każdym kroku iteracji wystarczy do zliczania wybrać taką, która jest wykonywana w każdym kroku raz. Koszt K 2 start (1) (2) Koszt K 3 Koszt K 1 Koszt K 4 (3) stop

Jak szacować? cd Całkowity koszt czasowy w najgorszym przypadku: K 1 + max( K 3, K 4 ) + K 2 log 2 N Nie ma znaczenia stała liczba operacji podstawowych wykonywanych w każdym kroku iteracji wystarczy do zliczania wybrać taką, która jest wykonywana w każdym kroku raz. O złożoności algorytmu decyduje liczba wykonywanych iteracji

Przykłady... sortowanie bąbelkowe w pierwotnej wersji (zagnieżdżone iteracje) 1. wykonaj co następuje N - 1 razy: 1.1.... ; 1.2. wykonaj co następuje N - 1 razy: 1.2.1.... ; Całkowity koszt czasowy w najgorszym przypadku wynosi z dokładnością do stałych: (N - 1) (N - 1) = N 2-2N +1 ; N 2 jest składnikiem dominującym, czyli złożoność jest O(N 2 ) sortowanie bąbelkowe ulepszone Całkowity koszt czasowy w najgorszym przypadku wynosi: (N - 1) + (N - 2) + (N - 3) +... + 2 + 1 = 0,5 N 2-0,5 N, czyli mniej, ale nadal złożoność pozostaje O(N 2 )

Przykłady... sumowanie zarobków pracowników - złożoność O(N) sumowanie zarobków pracowników zarabiających więcej od swych bezpośrednich przełożonych - złożoność O(N 2 ) znajdowanie największej przekątnej w wielokącie wypukłym metodą naiwną - złożoność O(N 2 ) znajdowanie największej przekątnej w wielokącie wypukłym metodą obrotu prostych równoległych - złożoność O(N)

Przykłady... rekurencyjny algorytm dla wież Hanoi: procedura przenieś N ; 1. jeśli N = 1, to wypisz ruch i koniec; 2. w przeciwnym razie (tj. jeśli N > 1) wykonaj co następuje: 2.1. wywołaj przenieś N - 1 ; 2.2. wypisz ruch ; 2.3. wywołaj przenieś N -1 ; Oznaczmy nieznany koszt czasowy przez T(N) i ułóżmy równania, które musi spełniać - tzw. równania rekurencyjne: T(1) = 1 T(N) = 2 T(N-1) +1 Spełnia je koszt T(N) = 2 N - 1, czyli złożoność jest O(2 N )

7 Przykłady... 7 15 12 11 8 10 12 15 sortowanie drzewiaste (bez samoorganizacji drzewa): ma pesymistyczną złożoność O(N 2 ), bo wprawdzie lewostronne obejście drzewa ma złożoność liniową O(N), ale konstrukcja binarnego drzewa poszukiwań ma złożoność kwadratową (w najgorszym przypadku) 8 11 10 sortowanie drzewiaste (z samoorganizacją drzewa): ma złożoność O(N log N), co daje wyraźną poprawę sprawności algorytmu Skala ulepszenia: N N 2 N log N 10 100 33 100 10 000 664 1 000 1 000 000 9 965 1 000 000 1 000 000 000 000 19 931 568 1 000 000 000 1 000 000 000 000 000 000 29 897 352 853

Przykłady... sortowanie przez scalanie (rekurencyjne): procedura sortuj-listę L; 1.jeśli L zawiera tylko jeden element, to jest posortowana; 2. w przeciwnym razie wykonaj co następuje: 2.1.... ; 2.2. wywołaj sortuj-listę połowa L ; 2.3. wywołaj sortuj-listę połowa L ; 2.4. scal posortowane połowy listy L w jedną posortowaną listę; Oznaczmy nieznany koszt czasowy przez T(N) i ułóżmy równania rekurencyjne, które musi spełniać: T(1) = 0 T(N) = 2 T(0,5 N) + N Spełnia je koszt T(N) = N log N, czyli złożoność jest O(N log N) Sortowanie przez scalanie jest jednym z najlepszych algorytmów sortowania (choć wymaga obszaru pamięci rosnącego jak O(N) )

Średnia złożoność Analiza najgorszego przypadku lub analiza średniego przypadku W analizie średniego przypadku istotną rolę odgrywają założenia o rozkładzie prawdopodobieństwa w zbiorze dopuszczalnych danych wejściowych. Algorytm średni przyp. najgorszy przyp. sumowanie zarobków O(N) O(N) sumowanie zarobków z szukaniem O(N 2 ) O(N 2 ) bezp. Kierowników sortowanie bąbelkowe O(N 2 ) O(N 2 ) sortowanie drzewiaste z O(N log N) O(N log N) samoorganizacją drzewa sortowanie przez scalanie O(N log N) O(N log N) Quicksort O(N log N) O(N 2 ) Średni koszt czasowy algorytmu Quicksort - 1,4 N log 2 N

Czy można skonstruować jeszcze lepszy algorytm? Każdy poprawny algorytm znajdujący rozwiązanie danego problemu ustanawia dla niego górne ograniczenie złożoności. Możliwości dalszej poprawy rzędu złożoności algorytmu będącego rozwiązaniem problemu wyznacza dolne ograniczenie! Górne ograniczenia dla złożoności problemu P Najsprawniejsze rozwiązanie problemu ~ Dolne ograniczenia dla złożoności problemu P Algorytm dla problemu P o złożoności O(N 3 ) Algorytm dla problemu P o złożoności O(N 2 ) Złożoność czasowa właściwa problemowi P? Dowód, że rozwiązanie problemu P kosztuje co najmniej O(N log N) Dowód, że rozwiązanie problemu P kosztuje co najmniej O(N)

Problemy zamknięte i luki algorytmiczne problem dolne ogr. górne ogr. przeszukiwanie listy nieuporządkowanej O(N) O(N) przeszukiwanie listy uporządkowanej O(log N) O(log N) sortowanie O(N log N) O(N log N) minimalne drzewo rozpinające O(N) O(f(N) N) + + f(n) - bardzo wolno rosnąca funkcja, np. dla N=16 ma wartość 3 dla N=64000 ma wartość 4 dla N= znacznie więcej niż liczba cząstek we wszechświecie ma wartość 5

Przykład analizy złożoności algorytmu Problem odgradzania śpiących tygrysów: algorytm naiwny ma złożoność O(N 3 ) algorytm o znacznie lepszej złożoności: 1.znajdź punkt najniżej położony - P 1 ; 2.posortuj pozostałe punkty rosnąco według kątów tworzonych przez odcinki z linią poziomą przechodzącą przez P 1 - powstanie lista P 2,...,P N ; 3.dołącz do powłoki punkty P 1 i P 2 ; 4.dla J od 3 do N wykonuj ; 4.1.dołącz do powłoki punkt P J ; 4.2.cofając się wstecz po odcinkach aktualnej powłoki, usuwaj z niej te punkty P K, dla których prosta przechodząca przez P K i P K-1 przecina odcinek, aż do napotkania pierwszego punktu nie dającego się usunąć ;

Przykład krok 2. kolejne iteracje w kroku 4. 7 9 11 7 11 5 6 4 2 3 8 10 12 13 15 14 5 6 4 2 3 8 9 10 12 13 15 14 1 1

Podsumowanie czasu wykonania Krok 1. O(N) Krok 2. O(N log N) Krok 3. O(1) 5 6 4 2 3 7 9 8 10 12 11 13 15 14 Krok 4. O(N) Razem O(N log N) 5 6 7 1 9 10 11 13 14 4 8 2 3 12 15 1