Algorytmy i Struktury Danych.

Podobne dokumenty
Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Podstawy Informatyki. Sprawność algorytmów

Zasady analizy algorytmów

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

Wprowadzenie do złożoności obliczeniowej

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Algorytmy i Struktury Danych.

Wykład 2. Poprawność algorytmów

Złożoność Obliczeniowa Algorytmów

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI

Zaawansowane algorytmy i struktury danych

Matematyczne Podstawy Informatyki

INFORMATYKA SORTOWANIE DANYCH.

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

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

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

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

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,

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Teoretyczne podstawy informatyki

Algorytmika w bioinformatyce

Liczby pierwsze - wstęp

Sortowanie przez scalanie

Efektywność algorytmów

Sortowanie przez wstawianie

Teoretyczne podstawy informatyki

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Algorytmy i Struktury Danych

Algorytmika w bioinformatyce

Analiza algorytmów zadania podstawowe

Wykład na Politechnice Krakowskiej w dniu 18 stycznia 2012 r. ZADAŃ I ALGORYTMÓW W OPTYMALIZACJI DYSKRETNEJ

Podyplomowe Studium Informatyki

Algorytmy i struktury danych Matematyka III sem.

Algorytmy i Struktury Danych

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.

Strategia "dziel i zwyciężaj"

Algorytm selekcji Hoare a. Łukasz Miemus

Analiza algorytmów zadania podstawowe

Zaawansowane algorytmy i struktury danych

Programowanie Proceduralne

Technologie informacyjne Wykład VII-IX

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Wstęp do programowania

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

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

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

Podyplomowe Studium Programowania i Systemów Baz Danych

Algorytmy i struktury danych

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

i = n = n 1 + n 2 1 i 2 n 1. n(n + 1)(2n + 1) n (n + 1) =

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

Algorytmy i Struktury Danych, 2. ćwiczenia

O rekurencji i nie tylko

Wstęp do Informatyki

Podstawy programowania. Podstawy C# Przykłady algorytmów

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

Algorytm i złożoność obliczeniowa algorytmu

Wstęp do programowania

Grzegorz Mazur. Zak lad Metod Obliczeniowych Chemii UJ. 14 marca 2007

Wykład 3. Metoda dziel i zwyciężaj

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

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

Programowanie w VB Proste algorytmy sortowania

Efektywna metoda sortowania sortowanie przez scalanie

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

Algorytmy w teorii liczb

Programowanie Równoległe i Rozproszone. Algorytm Kung a. Algorytm Kung a. Programowanie Równoległe i Rozproszone Wykład 8. Przygotował: Lucjan Stapp

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

Zaawansowane algorytmy. Wojciech Horzelski

Algorytmy asymetryczne

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

Struktura danych. Sposób uporządkowania informacji w komputerze.

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

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

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

Złożoność obliczeniowa i pamięciowa. Spis treści. Złożoność obliczeniowa -- założenia

Algorytmy i Struktury Danych.

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

Podstawy Programowania. Złożoność obliczeniowa

Krzysztof Gniłka. Twierdzenie o rekurencji uniwersalnej

Informatyka 1. Złożoność obliczeniowa

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Aproksymacja funkcji a regresja symboliczna

Algorytmy i Struktury Danych. (c) Marcin Sydow. Introduction. QuickSort. Sortowanie 2. Limit. CountSort. RadixSort. Summary

Ciągi liczbowe. Zbigniew Koza. Wydział Fizyki i Astronomii

Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Al Chwarizmi i trzy algorytmy Euklidesa

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 )

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

Układy równań liniowych

Przykładowe sprawozdanie. Jan Pustelnik

Struktury danych i złożoność obliczeniowa. Prof. dr hab. inż. Jan Magott

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych.

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

Matematyka dyskretna. Andrzej Łachwa, UJ, a/15

Transkrypt:

Algorytmy i Struktury Danych. Złożoność obliczeniowa algorytmu dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 1 / 96

Analiza algorytmów Wprowadzenie Naukowe metody analizy algorytmów Model matematyczny Klasyfikacja algorytmów Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 2 / 96

Analiza doświadczalna a model matematyczny Analiza doświadczalna algorytmu jest sposobem na przewidzenie jego wydajności, ale nie pomaga w zrozumieniu jego działania. W zrozumieniu działania algorytmu pomocny jest model matematyczny czasu pracy algorytmu. Model matematyczny daje nam podstawy do zrozumienia złożoności obliczeniowej algorytmu. Złożoność obliczeniowa algorytmu to koszt jego realizacji, czyli ilość zasobów komputera niezbędnych do jego wykonania. W zależności od rozważanego zasobu złożoność dzielimy na złożoność czasowa oraz złożoność pamięciowa. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 3 / 96

Matematyczny model czasu pracy algorytmu Koncepcja modelu matematycznego została opracowana i spopularyzowana przez Donalda Knutha w późnych latach 60 ubiegłego stulecia. Sztuka programowania (The Art of Computer Programming)- przełomowa monografia autorstwa Donalda Knutha dotyczaca analizy algorytmów; pierwszy tom wydano w 1968r. Rysunek: Donald Ervin Knuth (10 stycznia 1938 -). Laureat nagrody Turinga 1974. Źródło zdjęcia: http://amturing.acm.org/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 4 / 96

Matematyczny model czasu pracy algorytmu Całkowity czas pracy algorytmu (programu) to suma po wszystkich operacjach (instrukcjach) występujacych w algorytmie wartości: koszt operacji częstotliwość występowania operacji. Aby policzyć całkowity czas pracy algorytmu, należy: przeanalizować program w celu określenia zestawu operacji. pamiętać, że koszt operacji zależy, m.in., od komputera, systemu operacyjnego i kompilatora pamiętać, że częstotliwość wystapienia operacji zależy zarówno od algorytmu jak i danych wejściowych. Dzięki Donaldowi Knuthowi wiemy, że można uzyskać dokładne modele matematyczne wykonywania danego algorytmu (programu) oraz operacji. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 5 / 96

Koszt wykonania podstawowych operacji Na poczatku rozwoju komputerów każdy komputer był dostarczany z instrukcja (podręcznikiem) zawierajac a dokładny czas wykonania każdej operacji - teraz już tak nie jest. Obecnie, aby poznać koszt wykonania danej operacji można, np., wykonać bilon eksperymentów i oszacować tę wielkość, np. że: dodawanie dwóch liczb całkowitych zajmuje 2 nanosekundy, a mnożenie dwóch liczb rzeczywistych zajmuje 4 nanosekundy. Praktycznie jednak zakłada się, że operacje (np.,dodawanie, odejmowanie, mnożenie, dzielenie, przypisanie, porównanie, deklaracja zmiennej, dostęp do elementu tablicy) wykonywane na standardowych (wbudowanych) typach danych zajmuja pewien stały (bardzo nieduży) czas wykonania 1. 1 Należy pamiętać, że niektóre operacje, np. deklaracja tablicy o rozmiarze N w Javie, zajmuje czas proporcjonalny do N z uwagi na to, że każdy jej element domyślnie inicjalizowany jest zerem. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 6 / 96

Częstość występowania operacji - przykład Pytanie: Ile jest instrukcji w zależności od rozmiaru danych wejściowych n? int count = 0; for (int i = 0; i < n; i++) if (a[i] == 0) count++; Operacja liczba wystapień deklaracja zmiennych 2 przypisanie 2 porównanie == n porównanie < n+1 dostęp do tablicy n inkrementacja i n inkrementacja count n Częstość wysta- pienia zależna od wielkości danych wejściowych Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 7 / 96

Częstość występowania operacji - problem 2SUM Pytanie: Ile jest instrukcji w zależności od rozmiaru danych wejściowych n? 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 liczba wystapień deklaracja zmiennych n+2 przypisanie n+2 1 porównanie == 2 (n 1) n 1 porównanie < 2 (n + 1) (n + 2) dostęp do tablicy n (n 1) inkrementacja od 1 2 n (n 1) do n (n 1) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 8 / 96

Częstość występowania operacji - przykład Pytanie Dlaczego mamy 1 2 (n 1) n operacji ==? Odp. Zauważmy, że: Wartości i Wartości j Liczba operacji i = 0 1,2,3...,n-1 n-1 i = 1 2,3...,n-1 n-2 i = 2 3,...,n-1 n-3......... i = n-2 n-1 1 i = n-1-0 Sumujac liczbę operacji: n 1 + n 2 + n 3 +... + 1 + 0 Otrzymujemy: 1 2 (n 1) n Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 9 / 96

Częstość występowania operacji - przykład Pytanie Dlaczego mamy 1 2 (n + 1) (n + 2) operacji <? Odp. Zauważmy, że: Wartości i Wartości j Liczba operacji porównania dla j i 1 dla i i = 0 1,2,3...,n n+1 i = 1 2,3...,n n i = 2 3,...,n n-1......... i = n-2 n-1,n 3 i = n-1 n 2 i = n - 1 Sumujac liczbę operacji: n + 1 + n + n 1 +... + 1 + 0 Otrzymujemy: 1 2 (n + 1) (n + 2) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 10 / 96

Częstość występowania operacji - przykład Pytanie Dlaczego mamy (n 1) n operacji dostępu do tablicy? Odp. Zauważmy, że: Wartości i Wartości j Liczba dostępu do tablicy i i = 0 1,2,3...,n-1 2 (n 1) i = 1 2,3...,n-1 2 (n 2) i = 2 3,...,n 2 (n 3)......... i = n-2 n-1 2 i = n-1 - Sumujac liczbę operacji: 2 (n 1 + n 2 + n 3 +... + 1) Otrzymujemy: (n 1) n Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 11 / 96

Uproszczenie liczenia częstości występowania operacji Już Alan Turing w 1947 roku wiedział, że liczenie wszystkich operacji majacych wpływ na czas pracy algorytmu może być żmudne i niekoniecznie potrzebne. "It is convenient to have a measure of the amount of work involved in a computing process, even though it be a very crude one. We may count up the number of times that various elementary operations are applied in the whole process and then given them various weights. We might, for instance, count the number of additions, subtractions, multiplications, divisions, recording of numbers, and extractions of figures from tables. In the case of computing with matrices most of the work consists of multiplications and writing down numbers, and we shall therefore only attempt to count the number of multiplications and recordings." Alan Turing (1947); ROUNDING-OFF ERRORS IN MATRIX PROCESSES. National Physical Laboratory, Teddington, Middlesex. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 12 / 96

Uproszczenie liczenia częstości występowania operacji Pierwsze uproszczenie: wybór operacji dominujacej (elementarnej). Operacja elementarna może być na przykład: przypisanie, porównanie, działanie arytmetyczne lub dostęp do tablicy. Zazwyczaj jako operację dominujac a wybiera się tę, która kosztuje najwięcej i ma największa częstotliwość występowania. 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 liczba dominujaca wystapień dostęp do tablicy n (n 1) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 13 / 96

Uproszczenie liczenia częstości występowania operacji Drugie uproszczenie - notacja : szacujemy czas działania jako funkcję, która przyjmuje dane wejściowe o rozmiarze n ignorujemy składowe o mniejszej ważności w formułach reprezentujacych częstotliwość występowania danej operacji. gdy n jest duże, składowe te sa nieistotne, gdy n jest małe, nie bierzemy ich pod uwagę Przykłady P1 1 6 n3 + 20n + 16 1 6 n3 P2 1 6 n3 + 100n + 46 1 6 n3 P3 1 6 n3 + 1 2 n2 + n + 16 1 6 n3 Formalna definicja notacji f (n) g(n) definiujemy jako f (n) lim n g(n) = 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 14 / 96

Uproszczenie liczenia częstości występowania operacji - notacja Operacja liczba notacja wystapień deklaracja zmiennych n+2 n przypisanie n+2 n 1 porównanie == 2 (n 1) n 1 2 n2 1 porównanie < 2 (n + 1) (n + 2) 1 2 n2 dostęp do tablicy n (n 1) n 2 inkrementacja od 1 2 n (n 1) od 1 2 n2 do n (n 1) do n 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 15 / 96

Problem 2SUM Pytanie: Jakie jest asymptotyczne tempo wzrostu funkcji zliczajacej operację dominujac a dostęp do tablicy, która przyjmuje dane wejściowe o rozmiarze n? 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++; Odpowiedź: n 2. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 16 / 96

Problem 2SUM Pytanie: Jakie jest asymptotyczne tempo wzrostu funkcji zliczajacej operację dominujac a dostęp do tablicy, która przyjmuje dane wejściowe o rozmiarze n? int count = 0; for (int i = 0; i < n; i++) for (int j = i+1; j < n; j++) for (int k = j+1; k < n; k++) if (a[i] + a[j] + a[k] == 0) count++; Dokładna liczba operacji dominujacej dostęp do tablicy jest postaci: ( ) n (n 1) (n 2) n = 6 3 Odpowiedź: 1 6 n3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 17 / 96

Oszacowania dla sum dyskretnych Pytanie: Jak oszacować sumę dyskretna? Odpowiedź: Pouczyć się matematyki dyskretnej :)! Przykładowe oszacowania często spotykanych sum: 1 + 2 +... + n............................................ 1 2 n2 1 k + 2 k +... + n k.................................... 1 k+1 nk+1 1 + 1 2 + 1 3 +... + 1 n....................................... ln(n) 2-sum pętla............................................... 1 2 n2 3-sum pętla............................................... 1 6 n3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 18 / 96

Analiza algorytmów Wprowadzenie Naukowe metody analizy algorytmów Model matematyczny Klasyfikacja algorytmów Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 19 / 96

Złożoność algorytmu Definicja Złożoność algorytmu to ilość zasobów komputera niezbędnych do jego wykonania. W zależności od rozważanego zasobu złożoność dzielimy na złożoność czasowa oraz złożoność pamięciowa. Złożoność czasowa - zależność pomiędzy rozmiarem danych wejściowych a liczba operacji dominujacych z uwzględnieniem notacji wykonywanych w trakcie przebiegu algorytmu. Złożoność pamięciowa to zależność pomiędzy rozmiarem danych wejściowych a ilościa wykorzystanej pamięci. Jako tę ilość najczęściej przyjmuje się użyta pamięć maszyny abstrakcyjnej (na przykład liczbę komórek pamięci maszyny RAM) w funkcji rozmiaru wejścia. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 20 / 96

Rodzaje złożoności W praktyce rozważa się dwa podejścia: rozpatrywanie przypadków najgorszych (złożoność pesymistyczna) oraz zastosowanie określonego sposobu uśrednienia wszystkich możliwych przypadków (złożoność oczekiwana). Złożoność pesymistyczna (ang. worst-case): T (n) = maksymalna ilość zasobu (pamięć, czas) potrzebna do wykonania algorytmu dla dowolnego wejścia o rozmiarze n. Złożoność oczekiwana (ang. average-case): T (n) = oczekiwana ilość zasobu (pamięć, czas) potrzebna do wykonania algorytmu dla dowolnego wejścia o rozmiarze n. Złożoność oczekiwana zależy istotnie od założenia o rozważanej przestrzeni probabilistycznej danych wejściowych. Przestrzeń probabilistyczna danych wejściowych może być bardzo skomplikowana, co powoduje, że wyznaczenie złożoności oczekiwanej wymaga bardzo trudnych analiz matematycznych. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 21 / 96

Notacja Duże O Niech f(n) oraz g(n) beda funkcjami ze bioru liczb naturalnych w zbiór liczb rzeczywistych (tj. f : N R, g : N R), które sa czasami przebiegu dwóch algorytmów działajacych na danych wejściowych o rozmiarze n (lub które reprezentuja ilość pamięci wykorzystanej przez dwa algorytmy działajace na danych wejściowych o rozmiarze n. Definicja Powiemy, że f rośnie nie szybciej niż g i oznaczamy: f(n) = O(g(n)) jeżeli istnieja stałe c > 0 oraz n 0 N takie, że f (n) c g(n) dla wszystkich n n 0 Notacji duże-o używamy w celu wyznaczenia górnych granic asymptotycznych, ponieważ ogranicza ona wzrost czasu wykonania dla dużych danych wejściowych. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 22 / 96

Notacja Omega Definicja Powiemy, że f jest niemniejsza niż g i oznaczamy f (n) = Ω(g(n)), jeżeli istnieja stałe c > 0 oraz n 0 N takie, że f (n) c g(n) dla wszystkich n n 0. Uwaga! f (n) = Ω(g(n)) oznacza, że g(n) = O(f (n)) Notacji Omega używamy w celu wyznaczenia dolnych granic asymptotycznych, ponieważ ogranicza ona wzrost czasu wykonania od dołu dla odpowiednio dużych danych wejściowych. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 23 / 96

Notacja Theta Definicja Powiemy, że f jest podobna do g i oznaczamy f (n) = Θ(g(n)), jeżeli istnieja stałe c 0, c 1 > 0 i n 0 N, takie, że c 0 g(n) f (n) c 1 g(n) dla wszystkich n n 0 Uwaga! f (n) = Θ(g(n)) oznacza, że f (n) = O(g(n)) oraz f (n) = Ω(g(n)) Notacji Theta używamy w celu wyznaczenia asymptotycznego wzrost czasu wykonania dla dużych danych wejściowych i klasyfikacji algorytmu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 24 / 96

Notacja asymptotyczna - Przykład 1 Załóżmy, że mamy wybrać jeden z dwóch algorytmów rozwiazuj acych pewien zadany problem obliczeniowy. Pierwszy algorytm wykonuje f 1 (n) = n 2 kroków. Drugi algorytm wykonuje f 2 (n) = 2n + 20 kroków. 100 80 n*n 2*n+20 60 f(n) 40 20 0 0 2 4 6 8 10 n Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 25 / 96

Notacja asymptotyczna - Przykład 1 Załóżmy, że mamy wybrać jeden z dwóch algorytmów rozwiazuj acych pewien zadany problem obliczeniowy. Pierwszy algorytm wykonuje f 1 (n) = n 2 kroków. Drugi algorytm wykonuje f 2 (n) = 2n + 20 kroków. 100 80 n*n 2*n+20 60 f(n) 40 20 Który z nich jest lepszy? 0 0 2 4 6 8 10 n Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 25 / 96

Notacja asymptotyczna - Przykład 1, cd. 100 80 n*n 2*n+20 60 f(n) 40 20 0 0 2 4 6 8 10 n Odpowiedź zależy od wartości n! Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 26 / 96

Notacja asymptotyczna - Przykład 1, cd. 100 80 n*n 2*n+20 60 f(n) 40 20 0 0 2 4 6 8 10 n Odpowiedź zależy od wartości n! Dla n 5 wartości n 2 sa mniejsze od 2n + 20. Dla n > 5 wartości n 2 sa większe od 2n + 20. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 26 / 96

Notacja asymptotyczna - Przykład 1, cd. 100 80 n*n 2*n+20 60 f(n) 40 20 0 0 2 4 6 8 10 n Odpowiedź zależy od wartości n! Dla n 5 wartości n 2 sa mniejsze od 2n + 20. Dla n > 5 wartości n 2 sa większe od 2n + 20. Wniosek! Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 26 / 96

Notacja asymptotyczna - Przykład 1, cd. 100 80 n*n 2*n+20 60 f(n) 40 20 0 0 2 4 6 8 10 n Odpowiedź zależy od wartości n! Dla n 5 wartości n 2 sa mniejsze od 2n + 20. Dla n > 5 wartości n 2 sa większe od 2n + 20. Wniosek! Funkcja f 2 (n) = 2n + 20 zachowuje się znacznie lepiej, gdy n rośnie. Dlatego też algorytm drugi jest zwycięzca. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 26 / 96

Notacja asymptotyczna - Przykład 1, cd. 100 80 n*n 2*n+20 60 f(n) 40 20 0 0 2 4 6 8 10 n Odpowiedź zależy od wartości n! Dla n 5 wartości n 2 sa mniejsze od 2n + 20. Dla n > 5 wartości n 2 sa większe od 2n + 20. Wniosek! Funkcja f 2 (n) = 2n + 20 zachowuje się znacznie lepiej, gdy n rośnie. Dlatego też algorytm drugi jest zwycięzca. Powyższa własność można opisać przez notację O wielkie: f 2 (n) = O(f 1 (n)). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 26 / 96

Notacja asymptotyczna - Przykład 1, cd. Dlaczego f 2 (n) = O(f 1 (n))? Ponieważ dla wszystkich n > 0 zachodzi: f 2 (n) 2n + 20 = f 1 (n) n 2 22 25 20 Maksimum = 22 (2*n+20)/(n*n) 15 f(n) 10 5 0 2 4 6 8 10 12 14 16 18 20 n tzn. f 2 (n) 22 f 1 (n) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 27 / 96

Notacja asymptotyczna - Przykład 1, cd. Dlaczego f 1 (n) O(f 2 (n))? Ponieważ stosunek może być dowolnie duży! f 1 (n) f 2 (n) = n 2 2n + 20 7 6 (n*n)/(2*n+20) 5 f(n) 4 3 2 1 0 2 4 6 8 10 12 14 16 18 20 n Nie istnieje zatem żadna stała c spełniajaca warunki definicji. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 28 / 96

Notacja asymptotyczna - Przykład 1, cd. Przyjmijmy teraz, że mamy także trzeci algorytm rozwiazuj acy zadany problem, przykładowo, w f 3 (n) = n + 1 krokach. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 29 / 96

Notacja asymptotyczna - Przykład 1, cd. Przyjmijmy teraz, że mamy także trzeci algorytm rozwiazuj acy zadany problem, przykładowo, w f 3 (n) = n + 1 krokach. 100 80 n*n 2*n+20 n+1 60 f(n) 40 20 0 0 2 4 6 8 10 n Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 29 / 96

Notacja asymptotyczna - Przykład 1, cd. Przyjmijmy teraz, że mamy także trzeci algorytm rozwiazuj acy zadany problem, przykładowo, w f 3 (n) = n + 1 krokach. 100 80 n*n 2*n+20 n+1 60 f(n) 40 20 0 0 2 4 6 8 10 n Czy algorytm trzeci jest lepszy od algorytmu drugiego? TAK, ale tylko z dokładnościa do stałego współczynnika. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 29 / 96

Notacja asymptotyczna - Przykład 1, cd. Zachodzi: f 2 (n) = O(f 3 (n)). Dlaczego: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 30 / 96

Notacja asymptotyczna - Przykład 1, cd. Zachodzi: f 2 (n) = O(f 3 (n)). Dlaczego: ponieważ dla wszystkich n 0 zachodzi: f 2 (n) 2n + 20 = f 3 (n) n + 1 20 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 30 / 96

Notacja asymptotyczna - Przykład 1, cd. Zachodzi: f 2 (n) = O(f 3 (n)). Dlaczego: ponieważ dla wszystkich n 0 zachodzi: f 2 (n) 2n + 20 = f 3 (n) n + 1 20 f(n) 20 Maksimum = 20 (2*n+20)/(n+1) 18 16 14 12 10 8 6 4 2 0 20 40 60 80 100 n Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 30 / 96

Notacja asymptotyczna - Przykład 1, cd. Zachodzi: f 2 (n) = O(f 3 (n)). Dlaczego: ponieważ dla wszystkich n 0 zachodzi: f 2 (n) 2n + 20 = f 3 (n) n + 1 20 f(n) 20 Maksimum = 20 (2*n+20)/(n+1) 18 16 14 12 10 8 6 4 2 0 20 40 60 80 100 n tzn. f 2 (n) 20 f 3 (n) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 30 / 96

Notacja asymptotyczna - Przykład 1, cd. Zachodzi: f 3 (n) = O(f 2 (n)). Dlaczego: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 31 / 96

Notacja asymptotyczna - Przykład 1, cd. Zachodzi: f 3 (n) = O(f 2 (n)). Dlaczego: ponieważ dla wszystkich n 0 zachodzi: f 3 (n) f 2 (n) = n + 1 2n + 20 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 31 / 96

Notacja asymptotyczna - Przykład 1, cd. Zachodzi: f 3 (n) = O(f 2 (n)). Dlaczego: ponieważ dla wszystkich n 0 zachodzi: f 3 (n) f 2 (n) = n + 1 2n + 20 1 f(n) 0.5 (n+1)/(2*n+20) 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 50 100 150 200 n tzn. f 3 (n) 1 f 2 (n) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 31 / 96

Notacja asymptotyczna - Przykład 1, cd. Wnioski z przykładu! A. f 2 (n) = O(f 1 (n)), ale f 1 (n) O(f 2 (n)) B. f 3 (n) = O(f 1 (n)), ale f 1 (n) O(f 3 (n)) C. f 2 (n) = O(f 3 (n)) oraz f 3 (n) = O(f 2 (n)) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 32 / 96

Notacja asymptotyczna - Przykład 1, cd. Wnioski z przykładu! A. f 2 (n) = O(f 1 (n)), ale f 1 (n) O(f 2 (n)) B. f 3 (n) = O(f 1 (n)), ale f 1 (n) O(f 3 (n)) C. f 2 (n) = O(f 3 (n)) oraz f 3 (n) = O(f 2 (n)) Z definicji Ω mamy: A. f 1 (n) = Ω(f 2 (n)) B. f 1 (n) = Ω(f 3 (n)) C. f 3 (n) = Ω(f 2 (n)) oraz f 2 (n) = Ω(f 3 (n)) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 32 / 96

Notacja asymptotyczna - Przykład 1, cd. Wnioski z przykładu! A. f 2 (n) = O(f 1 (n)), ale f 1 (n) O(f 2 (n)) B. f 3 (n) = O(f 1 (n)), ale f 1 (n) O(f 3 (n)) C. f 2 (n) = O(f 3 (n)) oraz f 3 (n) = O(f 2 (n)) Z definicji Ω mamy: A. f 1 (n) = Ω(f 2 (n)) B. f 1 (n) = Ω(f 3 (n)) C. f 3 (n) = Ω(f 2 (n)) oraz f 2 (n) = Ω(f 3 (n)) Z definicji Θ mamy: A. f 2 (n) = Θ(f 3 (n)) oraz f 3 (n) = Θ(f 2 (n)) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 32 / 96

Notacja asymptotyczna - Zadania Dane sa następujace funkcje f (n) oraz g(n). Zadecyduj, które z sytuacji zachodzi: f = O(g), f = Ω(g), czy też f = Θ(g) (a) f (n) = n 100, g(n) = n 200 (b) f (n) = 100n + log(n), g(n) = n + (log(n)) 2 (c) f (n) = n 2 n, g(n) = 3 n Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 33 / 96

Notacja asymptotyczna - Odpowiedzi f(n) 1000 800 600 400 200 0-200 0 200 400 600 800 1000 n (n-100) (n-200) f(n) 110 100 90 80 70 60 50 40 30 20 10 0 200 300 400 500 600 700 800 900 1000 n (n-100)/(n-200) f(n) 10 0-10 -20-30 -40-50 -60-70 -80-90 -100 100 200 300 400 500 600 700 800 900 1000 n (n-200)/(n-100) (a) Ponieważ f (n) g(n) = n 100 n 200 101 dla wszystkich n 201, to f (n) = O(g(n)). 1 dla wszystkich n 101, to g(n) = O(f (n)). Z definicji Ω mamy, że f (n) = Ω(g(n)) oraz g(n) = Ω(f (n)). Z definicji Θ mamy, że f (n) = Θ(g(n)) oraz g(n) = Θ(f (n)) Ponieważ stosunek g(n) f (n) = n 200 n 100 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 34 / 96

Notacja asymptotyczna - Odpowiedzi f(n) 100000 10000 1000 100 10 100*n+log(n) n+(log(n))*(log(n)) f(n) 100 95 90 85 80 75 70 (100*n+log(n))/(n+(log(n))*(log(n))) f(n) 0.016 0.015 0.014 0.013 0.012 0.011 (n+(log(n))*(log(n)))/(100*n+log(n)) 1 1 10 100 65 50 100 150 200 250 300 350 400 0.01 50 100 150 200 250 300 350 400 n n n (b) Ponieważ stosunek f (n) g(n) = 100n+log(n) może być dowolnie duży, to n+(log(n)) 2 f (n) O(g(n)). Ponieważ stosunek g(n) f (n) = n+(log(n))2 100n+log(n) 1 dla wszystkich n > 0, to g(n) = O(f (n)). Z definicji Ω mamy, że f (n) = Ω(g(n)). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 35 / 96

Notacja asymptotyczna - Odpowiedzi f(n) 60000 50000 40000 30000 20000 10000 0 0 2 4 6 8 10 n n*2**n 3**n f(n) 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 5 10 15 20 25 30 n (n*2**n)/(3**n) f(n) 7000 6000 5000 4000 3000 2000 1000 0 5 10 15 20 25 30 n (3**n)/(n*2**n) (c) Ponieważ stosunek f (n) g(n) = n 2n 3 1 dla wszystkich n > 0, to n f (n) = O(g(n)). Ponieważ stosunek g(n) f (n) = 3n n 2 może być dowolnie duży, to n g(n) O(f (n)). Z definicji Ω mamy, że g(n) = Ω(f (n)). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 36 / 96

Notacja asymptotyczna Gdy g(n) = log(n), to mówimy, że f (n) jest logarytmiczna. Gdy g(n) = n, to mówimy, że f (n) jest liniowa. Gdy g(n) = n log(n), to mówimy, że f (n) jest liniowo-logarytmiczna. Gdy g(n) = n 2, to mówimy, że złożoność f (n) jest kwadratowa. Jeśli g(n) jest wielomianem, to mówimy o złożoności wielomianowej dla f (n). Jeśli g(n) jest wykładnicza, to mówimy o złożoności wykładniczej dla f (n). Jeśli g(n) jest silnie wykładnicza, to mówimy o złożoności silnie wykładniczej dla f (n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 37 / 96

Notacja asymptotyczna - podsumowanie Notacja Zapewnia Przykład Stosowany do Duże Theta asymptotyczne oszacowanie dokładne Θ(N 2 ) klasyfikacji algorytmu Duże O Θ(N 2 ) i O(N 2 ) Wyznaczenia mniejsze granicy górnej Duże Omega Θ(N 2 ) i większe Ω(N 2 ) Wyznaczenia granicy dolnej Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 38 / 96

Przykłady algorytmów Wyszukiwanie binarne (algorytm bisekcji) Wyszukiwanie liniowe Wyszukiwanie liniowe z wartownikiem Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 39 / 96

Wyszukiwanie binarne Problem: Dany jest posortowany zbiór danych (np. w tablicy) Arr oraz pewien element key. Należy odpowiedzieć na pytanie czy klucz key znajduje się w tablicy Arr. Algorytm: Sprawdź środkowy element tablicy. Jeśli jest równy key, to koniec. Jeśli środkowy element jest większy niż key, to szukaj elementu key w lewej części tablicy. Jeśli środkowy element jest mniejszy niż key, to szukaj elementu key w prawej części tablicy. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 40 / 96

Wyszukiwanie binarne Przykład: Znaleźć liczbę 9 w ciagu: 3, 5, 7, 8, 9, 12, 15. 3 5 7 8 9 12 15 3 5 7 8 9 12 15 3 5 7 8 9 12 15 3 5 7 8 9 12 15 3 5 7 8 9 12 15 3 5 7 8 9 12 15 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 41 / 96

Wyszukiwanie binarne Algorytm bisekcji (A,n,key): 1: i = 0; j = n 1; 2: while (i j) do 3: mid = i + (j i)/2; 4: if key < A[mid] then 5: j = mid 1; 6: else 7: if key > A[mid] then 8: i = mid + 1; 9: else 10: return mid; 11: end if 12: end if 13: end while 14: return 1; Hipoteza: Algorytm wyszukiwania binarnego w celu znalezienia elementu key w posortowanej tablicy o rozmiarze n wykonuje co najwyżej 1 + lg(n) porównań. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 42 / 96

Wyszukiwanie binarne - Hipoteza podwojenia I N T(N) w sek. T (2N)/T (N) log 2 (T (2N)/T (N)) 2048 1e-06-4096 1e-06 1 0... 1e-06 1 0 4194304 1e-06 1 0 8388608 2e-06 2 1 16777216 2e-06 1 0... 2e-06 1 0 1073741824 2e-06 1 0 Zauważamy, że stosunek T (2N)/T (N) jest albo 1 albo 2, a wartość log 2 jest albo 0 albo 1. Obserwacja sugeruje, że czas pracy naszego programu jest log 2 (n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 43 / 96

Wyszukiwanie binarne - analiza matematyczna 0.000002 0.000002 Zależność czasu pracy algorytmu od rozmiaru danych wejściowych Dane experymentalne aproksymacja Czas pracy T(N) w sekundach 0.000002 0.000001 0.000001 0.000001 0.000001 0.000001 0 2e+08 4e+08 6e+08 8e+08 1e+09 1.2e+09 Rozmiar danych wejściowych N fit a*log(x)/log(2) "dane.txt" via a; Final set of parameters ======================= a = 6.33958e-08 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 44 / 96

Wyszukiwanie binarne - analiza matematyczna Równanie opisujace zachowanie algorytmu: T (n) T (n/2) + 1 dla n > 1 oraz T (1) = 1. Dlaczego? Algorytm wymaga jednego sprawdzenia dla elementu środkowego, a następnie przeszukuje binarnie albo lewa połowę albo prawa połowę tablicy, z których każda ma n/2 elementów. Uzasadnienie: Załóżmy, że n = 2 m. Wówczas otrzymujemy: T (n) T (n/2) + 1 T (n/4) + 1 + 1 T (n/8) + 1 + 1 + 1... T (1) + m T (2 m ) m + 1 Z uwagi na założenie n = 2 m otrzymujemy: T (n) log 2 (n) + 1 Złożoność algorytmu: Θ(log 2 (n)). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 45 / 96

Złożoność logarytmiczna Mówimy, że algorytm ma złożoność logarytmiczna, gdy czas wykonania algorytmu rośnie logarytmiczne wraz ze wzrostem wielkości danych. Złożoność logarytmiczna maja na przykład algorytmy, w których problem postawiony dla danych rozmiaru n da się sprowadzić do problemu z rozmiarem danych o połowę mniejszym. Złożoność logarytmiczna: Θ(log 2 (n)). Algorytmy o złożoności logarytmicznej należa do klasy problemów łatwych - klasy P, czyli problemów, które potrafimy rozwiazań w czasie co najwyżej wielomianowym. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 46 / 96

Wyszukiwanie liniowe Problem: Dany jest (nieposortowany) zbiór danych (np. w tablicy) Arr oraz pewien element key. Należy odpowiedzieć na pytanie czy element key znajduje się w tablicy Arr. Algorytm: Sprawdź kolejne elementy tablicy. Jeżeli dany element tablicy jest równy key to szukany element został znaleziony i zakończ szukanie. Jeżeli osiagnięty został koniec tablicy i elementu key nie znaleziono to znaczy, że zadanego elementu key nie ma w tablicy. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 47 / 96

Wyszukiwanie liniowe Przykład: Znaleźć key = 9 w ciagu: A = {3, 5, 7, 8, 9, 12, 15}. 3 5 7 8 9 12 15 key = A[0]? Nie 3 5 7 8 9 12 15 key = A[1]? Nie 3 5 7 8 9 12 15 key = A[2]? Nie 3 5 7 8 9 12 15 key = A[3]? Nie 3 5 7 8 9 12 15 key = A[4]? TAK Znaleziono! Koniec. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 48 / 96

Wyszukiwanie liniowe LinearSearch (A,n,key): 1: i = 0; 2: while (i n 1) do 3: if key == A[i] then 4: return i; 5: end if 6: i = i + 1; 7: end while 8: return 1; Pytanie: Jakie jest asymptotyczne tempo wzrostu funkcji zliczajacej operację dominujac a porównanie typu == oraz, która przyjmuje dane wejściowe o rozmiarze n? Operacja dominujaca operacja porównania == i liczba wystapień 2n Odpowiedź: 2ṅ. Asymptotyczne oszacownie dokładne: Θ(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 49 / 96

Wyszukiwanie liniowe z wartownikiem Problem: Dany jest (nieposortowany) zbiór danych (np. w tablicy) Arr oraz pewien element key. Należy odpowiedzieć na pytanie czy element key znajduje się w tablicy Arr. Algorytm z wartownikiem: Dopisz wartownika (element Key) na koniec tablicy. Sprawdź kolejne elementy tablicy. Jeżeli dany element tablicy jest równy key to szukany element został znaleziony i zakończ szukanie. Jeżeli osiagnięty został wartownik to znaczy, że zadanego elementu key nie ma w tablicy. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 50 / 96

Wyszukiwanie liniowe z wartownikiem Przykład: Znaleźć key = 9 w ciagu: A = {3, 5, 7, 8, 9, 12, 15} 3 5 7 8 9 12 15 9 Rozszerzamy tablice o wartownika 3 5 7 8 9 12 15 9 key = 9 = A[0]? Nie 3 5 7 8 9 12 15 9 key = 9 = A[1]? Nie 3 5 7 8 9 12 15 9 key = 9 = A[2]? Nie 3 5 7 8 9 12 15 9 key = 9 = A[3]? Nie 3 5 7 8 9 12 15 9 key = 9 = A[4]? TAK Znaleziono! Koniec. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 51 / 96

Wyszukiwanie liniowe z wartownikiem Przykład: Znaleźć key = 11 w ciagu: A = {3, 5, 7, 8, 9, 12, 15} 3 5 7 8 9 12 15 11 Rozszerzamy tablice o wartownika 3 5 7 8 9 12 15 11 key = 11 = A[0]? Nie 3 5 7 8 9 12 15 11 key = 11 = A[1]? Nie 3 5 7 8 9 12 15 11 key = 11 = A[2]? Nie 3 5 7 8 9 12 15 11 key = 11 = A[3]? Nie 3 5 7 8 9 12 15 11 key = 11 = A[4]? Nie 3 5 7 8 9 12 15 11 key = 11 = A[5]? Nie 3 5 7 8 9 12 15 11 key = 11 = A[6]? Nie 3 5 7 8 9 12 15 11 key = 11 = A[7]= wartownik? TAK Elementu nie ma w tablicy! Koniec. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 52 / 96

Wyszukiwanie liniowe z wartownikiem LinearSearch (A,n,key): 1: i = 0; 2: while (key! = A[i]) do 3: i = i + 1; 4: end while 5: if i == n then 6: return 1; 7: else 8: return i; 9: end if Pytanie: Jakie jest asymptotyczne tempo wzrostu funkcji zliczajacej operację dominujac a porównanie typu! = oraz ==, która przyjmuje dane wejściowe o rozmiarze n? Operacja liczba dominujaca wystapień operacja porównania n + 1 == i! = Odpowiedź: n. Asymptotyczne oszacownie dokładne: Θ(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 53 / 96

Złożoność liniowa Mówimy, że algorytm ma złożoność liniowa, gdy czas wykonania algorytmu rośnie liniowo wraz ze wzrostem wielkości danych. Czas działania liniowy występuje dla algorytmów, w których jest wykonywana pewna stała liczba działań dla każdego z n elementów danych wejściowych. Złożoność liniowa: Θ(n). Algorytmy o złożoności liniowej należa do klasy problemów łatwych - klasy P, czyli problemów, które potrafimy rozwiazań w czasie co najwyżej wielomianowym. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 54 / 96

Złożoność liniowo-logarytmiczna Mówimy, że algorytm ma złożoność liniowo-logarytmiczna, gdy czas wykonania algorytmu rośnie quasi-liniowo wraz ze wzrostem wielkości danych. Czas działania liniowo-logarytmiczny występuje dla algorytmów, w których problem postawiony dla danych rozmiaru n da się sprowadzić w liniowej liczbie operacji do rozwiazania dwóch problemów o rozmiarach n/2. Złożoność liniowo-logarytmiczna: Θ(n log 2 (n)). Algorytmy o złożoności liniowo-logarytmicznej należa do klasy problemów łatwych - klasy P, czyli problemów, które potrafimy rozwiazań w czasie co najwyżej wielomianowym. Przykład: Algorytmy, które można rozwiazać przy pomocy metody dziel i zwyciężaj, np. sortowanie przez scalanie, sorotwanie przez kopcowanie. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 55 / 96

Złożoność kwadratowa Mówimy, że algorytm ma złożoność kwadratowa, gdy czas wykonania algorytmu rośnie proporcjonalnie dodo kwadratu rozmiaru danych wejściowych. Czas działania kwadratowy występuje dla algorytmów,w których dla każdej pary elementów danych wykonywana jest stała liczba operacji podstawowych. Złożoność kwadratowa: Θ(n 2 ). Algorytmy o złożoności kwadratowej należa do klasy problemów łatwych - klasy P, czyli problemów, które potrafimy rozwiazań w czasie co najwyżej wielomianowym. Przykład: Rozważany na wykładzie problem 2SUM i jego rozwiazanie metoda siłowa (algorytm brute-force). Złożoność czasowa: Θ(n 2 ). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 56 / 96

Złożoność wielomianowa Mówimy, że algorytm ma złożoność wielomianowa, gdy czas wykonania algorytmu rośnie proporcjonalnie do pewnego wielomianu rozmiaru danych wejściowych. Czas działania wielomianowy występuje dla algorytmów, w których dla każdej krotki elementów danych wykonywana jest stała liczba operacji podstawowych. Złożoność wielomianowa: Θ(n r + n r 1 +... + r + 1). Algorytmy o złożoności wielomianowej należa do klasy problemów łatwych - klasy P, czyli problemów, które potrafimy rozwiazań w czasie co najwyżej wielomianowym. Przykład: Rozważany na wykładzie problem 3SUM i jego rozwiazanie metoda siłowa (algorytm brute-force). Złożoność czasowa: Θ(n 3 ). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 57 / 96

Wieże Hanoi Zagadka: Dane sa trzy pale: A, B i C. Na jeden z nich, np. na A nałożono krażki o różnych średnicach, tak że krażek mniejszy nie leży pod wiekszym. Pale B i C sa puste. Należy przenieść wszystkie krażki z pala A na C. Można używac B jako pomocnicze miejsce przechowywania. Nie można kłaść krażków wiekszych na mniejsze. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 58 / 96

Wieże Hanoi 1 Krażek 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 59 / 96

Wieże Hanoi 1 Krażek 1 Dysk przeniesiony z palika 1 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 60 / 96

Wieże Hanoi 1 Krażek OK 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 61 / 96

Wieże Hanoi 2 Krażki 1 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 62 / 96

Wieże Hanoi 2 Krażki 2 1 Dysk przeniesiony z palika 1 na palik 2. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 63 / 96

Wieże Hanoi 2 Krażki 1 2 Dysk przeniesiony z palika 1 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 64 / 96

Wieże Hanoi 2 Krażki 1 2 Dysk przeniesiony z palika 2 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 65 / 96

Wieże Hanoi 2 Krażki OK 1 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 66 / 96

Wieże Hanoi 3 Krażki 1 2 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 67 / 96

Wieże Hanoi 3 Krażki 2 3 1 Dysk przeniesiony z palika 1 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 68 / 96

Wieże Hanoi 3 Krażki 3 2 1 Dysk przeniesiony z palika 1 na palik 2. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 69 / 96

Wieże Hanoi 3 Krażki 1 3 2 Dysk przeniesiony z palika 3 na palik 2. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 70 / 96

Wieże Hanoi 3 Krażki 1 2 3 Dysk przeniesiony z palika 1 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 71 / 96

Wieże Hanoi 3 Krażki 1 2 3 Dysk przeniesiony z palika 2 na palik 1. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 72 / 96

Wieże Hanoi 3 Krażki 2 1 3 Dysk przeniesiony z palika 2 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 73 / 96

Wieże Hanoi 3 Krażki 1 2 3 Dysk przeniesiony z palika 1 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 74 / 96

Wieże Hanoi 3 Krażki OK 1 2 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 75 / 96

Wieże Hanoi 4 Krażki 1 2 3 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 76 / 96

Wieże Hanoi 4 Krażki 2 3 4 1 Dysk przeniesiony z palika 1 na palik 2. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 77 / 96

Wieże Hanoi 4 Krażki 3 4 1 2 Dysk przeniesiony z palika 1 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 78 / 96

Wieże Hanoi 4 Krażki 3 4 1 2 Dysk przeniesiony z palika 2 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 79 / 96

Wieże Hanoi 4 Krażki 1 4 3 2 Dysk przeniesiony z palika 1 na palik 2. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 80 / 96

Wieże Hanoi 4 Krażki 1 4 3 2 Dysk przeniesiony z palika 3 na palik 1. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 81 / 96

Wieże Hanoi 4 Krażki 1 4 2 3 Dysk przeniesiony z palika 3 na palik 2. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 82 / 96

Wieże Hanoi 4 Krażki 1 2 4 3 Dysk przeniesiony z palika 1 na palik 2. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 83 / 96

Wieże Hanoi 4 Krażki 1 2 3 4 Dysk przeniesiony z palika 1 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 84 / 96

Wieże Hanoi 4 Krażki 2 3 1 4 Dysk przeniesiony z palika 2 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 85 / 96

Wieże Hanoi 4 Krażki 1 2 3 4 Dysk przeniesiony z palika 2 na palik 1. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 86 / 96

Wieże Hanoi 4 Krażki 1 2 3 4 Dysk przeniesiony z palika 3 na palik 1. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 87 / 96

Wieże Hanoi 4 Krażki 1 2 3 4 Dysk przeniesiony z palika 2 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 88 / 96

Wieże Hanoi 4 Krażki 3 2 1 4 Dysk przeniesiony z palika 1 na palik 2. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 89 / 96

Wieże Hanoi 4 Krażki 2 3 1 4 Dysk przeniesiony z palika 1 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 90 / 96

Wieże Hanoi 4 Krażki 1 2 3 4 Dysk przeniesiony z palika 2 na palik 3. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 91 / 96

Wieże Hanoi 4 Krażki OK 1 2 3 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 92 / 96

Wieże Hanoi 5 Krażków? 1 2 3 4 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 93 / 96

Wieże Hanoi Zagadka Wież Hanoi stała się znana w XIX wieku dzięki matematykowi Edouardowi Lucas, który zaproponował tę zagadkę dla 8 krażków. Do sprzedawanego zestawu była dołaczona - wymyślona przez Lucas - Tybetańska legenda, według której mnisi w światyni Brahmy rozwiazuj a tę łamigłówkę dla 64 złotych krażków. Legenda mówi, że gdy mnisi zakończa zadanie, to nastapi koniec świata. Zakładajac, że mnisi wykonuja 1 ruch na sekundę, ułożenie wieży zajmie 2 64 1 = 18446744073709551615 (blisko 18 i pół tryliona) sekund, czyli około 584542 miliardów lat. Dla porównania: Wszechświat ma około 13,7 mld lat. Złożoność czasowa: Θ(2 n 1 ). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 94 / 96

Złożoność wykładnicza Mówimy, że algorytm ma złożoność wykładnicza, gdy czas jego wykonania rośnie wykładniczo względem rozmiaru danych. Czas działania wykładniczy występuje w algorytmie, w którym jest wykonywana stała liczba działań dla każdego podzbioru danych wejściowych. Złożoność wykładnicza: Θ(2 n ). Algorytmy o złożoności wykładniczej należa do klasy problemów trudnych - klasy NP, czyli problemów, dla których nie znamy rozwiazań w czasie wielomianowym lub mniejszym, czyli zadania o złożoności co najmniej wykładniczej. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 95 / 96

Przykładowe algorytmy i ich złożoności Mówimy, że algorytm ma złożoność silnie wykładnicza, gdy czas jego wykonania rośnie z szybkościa silni względem rozmiaru danych. Czas działania silnie wykładniczy ma algorytm, w którym jest wykonywana stała liczba działań dla każdej permutacji danych wejściowych. Algorytmy o złożoności silnie wykładniczej należa do klasy problemów trudnych - klasy NP, czyli problemów, dla których nie znamy rozwiazań w czasie wielomianowym lub mniejszym, czyli zadania o złożoności co najmniej wykładniczej. Przykład: Rozważany na wykładzie problem komiwojażera (TSP) i jego rozwiazanie metoda siłowa (algorytm brute-force). Złożoność czasowa: Θ(n!). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 2 96 / 96