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,

Podobne dokumenty
TEORETYCZNE PODSTAWY INFORMATYKI

Zaawansowane algorytmy i struktury danych

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Podstawy Informatyki. Sprawność algorytmów

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

Algorytmy w teorii liczb

Matematyczne Podstawy Informatyki

Metody numeryczne. materiały do wykładu dla studentów. 1. Teoria błędów, notacja O

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

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

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

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.

Złożoność Obliczeniowa Algorytmów

Liczby pierwsze - wstęp

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

Zasady analizy 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.

TEORETYCZNE PODSTAWY INFORMATYKI

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

Jeszcze o algorytmach

Wprowadzenie do złożoności obliczeniowej

Programowanie dynamiczne

Strategia "dziel i zwyciężaj"

Sortowanie - wybrane algorytmy

Luty 2001 Algorytmy (4) 2000/2001

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

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

Prawdopodobieństwo i statystyka

Teoretyczne podstawy informatyki

Wstęp do programowania

Informatyka 1. Złożoność obliczeniowa

INFORMATYKA SORTOWANIE DANYCH.

Podstawy Programowania. Złożoność obliczeniowa

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

Logarytmy. Funkcje logarytmiczna i wykładnicza. Równania i nierówności wykładnicze i logarytmiczne.

Rozdział 1 PROGRAMOWANIE LINIOWE

Algebra abstrakcyjna

Statystyka i opracowanie danych Podstawy wnioskowania statystycznego. Prawo wielkich liczb. Centralne twierdzenie graniczne. Estymacja i estymatory

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

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmy i struktury danych

W. Guzicki Próbna matura, grudzień 2014 r. poziom rozszerzony 1

Algorytm simplex i dualność

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

3. Modele tendencji czasowej w prognozowaniu

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

ZADANIE 1. Ważenie (14 pkt)

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

ALGORYTMY I STRUKTURY DANYCH

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

TEORETYCZNE PODSTAWY INFORMATYKI

Rozdział 1. Wektory losowe. 1.1 Wektor losowy i jego rozkład

Podstawy Programowania

Sortowanie przez scalanie

Podstawy Programowania. Złożoność obliczeniowa

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

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

Przykładowe zadania z teorii liczb

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

Centralne twierdzenie graniczne

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

Testowanie hipotez statystycznych.

Efektywna metoda sortowania sortowanie przez scalanie

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

Efektywność algorytmów

Złożoność informacyjna Kołmogorowa. Paweł Parys

Wskaźniki. Programowanie Proceduralne 1

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 )

Algorytmy i Struktury Danych, 9. ćwiczenia

Podstawy Programowania

Zaawansowane algorytmy i struktury danych

Transformata Fouriera. Sylwia Kołoda Magdalena Pacek Krzysztof Kolago

Jarosław Wróblewski Matematyka dla Myślących, 2008/09

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

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4

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

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

Algorytmy sortujące 1

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

Teoretyczne podstawy informatyki

Algorytmy i struktury danych. Wykład 4

Algorytmy przeszukiwania wzorca

Modelowanie wybranych pojęć matematycznych. semestr letni, 2016/2017 Wykład 10 Własności funkcji cd.

Technologie informacyjne Wykład VII-IX

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Algorytmy i struktury danych, C3

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

Spacery losowe generowanie realizacji procesu losowego

2. DZIAŁANIA NA WIELOMIANACH

Wykład z równań różnicowych

Zakładamy, że są niezależnymi zmiennymi podlegającymi (dowolnemu) rozkładowi o skończonej wartości oczekiwanej i wariancji.

Algorytmy i Struktury Danych, 2. ćwiczenia

Prawa wielkich liczb, centralne twierdzenia graniczne

Metody numeryczne. materiały do wykładu dla studentów

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

Przetwarzanie równoległe Zadanie domowe III

Analiza algorytmów zadania podstawowe

Funkcje charakteryzujące proces. Dr inż. Robert Jakubowski

Transkrypt:

Oznaczenia:

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, to interesuje nas złożoność obliczeniowa w najgorszym przypadku.

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, to interesuje nas złożoność obliczeniowa w najgorszym przypadku.

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, to interesuje nas złożoność obliczeniowa w najgorszym przypadku. Gwarancja, że algorytm nigdy nie będzie działał dłużej

Warto pamiętać! Może się zdarzyć, że algorytm o pesymistycznej złożoności czasowej rzędu nlgn będzie dla większości danych wejściowych działał wolniej niż algorytm o pesymistycznym czasie działania rzędu n2. Istnieją algorytmy o pesymistycznej złożoności czasowej rzędu wykładniczego, które często działają szybciej niż algorytm o złożoności wielomianowej, a nawet liniowej (np. tzw. metoda simplex programowania liniowego).

Miara wrażliwości pesymistycznej algorytmu bada, na ile wielkość Tmax(n) odzwierciedla rzeczywisty czas działania algorytmu.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub oczekiwana) złożoność.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub oczekiwana) złożoność.

Zachowanie algorytmu dla losowych danych wejściowych określa średnia (lub oczekiwana) złożoność. Przypomnienie!

Podsumowanie: Miara wrażliwości pesymistycznej i miara wrażliwości oczekiwanej informują, jak bardzo zachowanie algorytmu dla rzeczywistych danych wejściowych może odbiegać od zachowania opisanego za pomocą pesymistycznej i oczekiwanej złożoności czasowej. Im większe są te wartości, tym algorytm jest bardziej wrażliwy na dane wejściowe.

Przykład: Rozważmy zbiór danych ZDWn jako n-wyrazowych ciągów uporządkowanych liczb naturalnych. Rozważmy dalej typowy algorytm w rodzaju dziel i zwyciężaj sprawdzenia, czy liczba naturalna x jest elementem ciągu zdw ZDWn.

Przykład: Rozważmy zbiór danych ZDWn jako n-wyrazowych ciągów uporządkowanych liczb naturalnych. Rozważmy dalej typowy algorytm w rodzaju dziel i zwyciężaj sprawdzenia, czy liczba naturalna x jest elementem ciągu zdw ZDWn. Rozwiązanie: Przyjmijmy, że ilość n elementów ciągu {a1,a2, an} jest potęgą dwójki, czyli n=2k, gdzie k jest pewną liczba naturalną. Sprawdzamy, czy x==an/2. Jeśli tak, to algorytm kończy działanie, jeśli nie, to po sprawdzeniu, że x<an/2 przechodzimy do przeszukania lewej połowy ciągu o ilości elementów równej n/2; jeśli spełniona jest nierówność przeciwna, to przeszukujemy prawą połowę ciągu. Maksymalną pesymistyczną liczbę porównań otrzymamy, gdy kolejne zagłębienia rekurencyjne doprowadzą do zbioru dwuelementowego, dla którego dwa porównania dadzą ostateczną odpowiedź dla zadania rozwiązywanego tym algorytmem.

Zatem dla Otrzymujemy: Tmax(n)=Tmax(n/2)+2, gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie.

Zatem dla Otrzymujemy: Tmax(n)=Tmax(n/2)+2, gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie. Dostajemy po rozwinięciu postać funkcji pesymistycznej złożoności czasowej: Tmax(n)=Tmax(n/2)+2=Tmax(2k-1)+2=Tmax(2k-2)+2+2= = =Tmax(2k-(k-1))+(k-1)*2=Tmax(2)+(k-1)*2=2+(k-1)*2=2*k.

Zatem dla Otrzymujemy: Tmax(n)=Tmax(n/2)+2, gdzie 2 stanowią dwa dodatkowe porównania na każdym etapie. Dostajemy po rozwinięciu postać funkcji pesymistycznej złożoności czasowej: Tmax(n)=Tmax(n/2)+2=Tmax(2k-1)+2=Tmax(2k-2)+2+2= = =Tmax(2k-(k-1))+(k-1)*2=Tmax(2)+(k-1)*2=2+(k-1)*2=2*k. Ponieważ k=log2n, zatem Tmax(n)=2*(log2n)

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że Jest to zatem kres górny zbioru liczb, które powstają jako różnice ilości operacji dominujących. Zatem od liczby największej z możliwych należy odjąć najmniejszą z możliwych, żeby otrzymać taki kres górny. Ponieważ najmniejszą ilością porównań dla dowolnego n jest jedno porównanie, a największa ilość wyraża się obliczoną właśnie Tmax(n)=2*(log2n), to = =2*(log2n)-1

Policzmy teraz pesymistyczną wrażliwość tego algorytmu. Przypomnijmy, że Jest to zatem kres górny zbioru liczb, które powstają jako różnice ilości operacji dominujących. Zatem od liczby największej z możliwych należy odjąć najmniejszą z możliwych, żeby otrzymać taki kres górny. Ponieważ najmniejszą ilością porównań dla dowolnego n jest jedno porównanie, a największa ilość wyrażą się obliczoną właśnie Tmax(n)=2*(log2n), to = =2*(log2n)-1 Pesymistyczna wrażliwość złożoności czasowej jest zatem duża i możemy się spodziewać dużej zmienności złożoności obliczeniowej.

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo wybranych n liczb. Przypomnijmy:

Policzmy teraz typową wartość złożoności obliczeniowej, czyli dla losowo wybranych n liczb. Przypomnijmy: Określmy kolejno elementy tej definicji: n={zdw ZDWn} zbiór zdarzeń elementarnych, Xn zmienna losowa, której wartością jest l(zdw)- liczba operacji dominujących na n, pnk rozkład zmiennej losowej Xn, czyli prawdopodobieństwo, że dla danych wejściowych rozmiaru n algorytm wykona k operacji dominujących, tzn. pnk=p{zdw n: l(zdw)=k}, przy k całkowitym, k [1, 2*(log2n) ].

Ponieważ nasze prawdopodobieństwo pnk nie zależy od k, więc pnk=1/(2*log2n) dla każdego całkowitego k [1, 2*(log2n)]. Stąd k 2*log2 n (k * p nk k 1 ) k 2*log2 n (k * (1 /( 2 * log k 1 2 n))) (1 / 2 * log 2 n) * 2n (1 /( 2 * log 2 n)) * 1 2*log * (2 * log 2 n) 2 1 2*log2 n * (1 2 * log 2 n) * log 2 n 12 log 2 n k 2*log2 n k k 1

Ponieważ nasze prawdopodobieństwo pnk nie zależy od k, więc pnk=1/(2*log2n) dla każdego całkowitego k [1, 2*(log2n)]. Stąd k 2*log2 n (k * p nk k 1 ) k 2*log2 n (k * (1 /( 2 * log k 1 2 n))) (1 / 2 * log 2 n) * k 2*log2 n 2n (1 /( 2 * log 2 n)) * 1 2*log * (2 * log 2 n) 2 1 2*log2 n * (1 2 * log 2 n) * log 2 n 12 log 2 n Zauważmy, że Tśr(n) jest o ½ większe od połowy Tmax(n). k k 1

Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu.

Obliczmy na koniec miarę wrażliwości oczekiwanej algorytmu. ( n) (k T k 0 śr 2 (n)) pnk W naszym przypadku sumujemy po całkowitych k [1, 2*(log2n)]. Stąd otrzymujemy wyniki:

( n) 2*log2 n 2 ( k T ( n )) pnk śr k 1... 1 12 (4(log 2 n) 2 1) 2*log2 n 2 ( k ( 1 / 2 log n )) 2 k 1 Szczegółowe rachunki na tablicy 1 2*log2 n

( n) 2*log2 n 2 ( k T ( n )) pnk śr k 1... 1 12 (4(log 2 n) 2 1) 2*log2 n 2 ( k ( 1 / 2 log n )) 2 k 1 Szczegółowe rachunki na tablicy Otrzymane wyniki są może mało czytelne, ale można je przybliżać, wykorzystując oszacowania asymptotyczne. Takie oszacowania zostaną podane później 1 2*log2 n

Służą do wyznaczenia liczby operacji dominujących