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

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

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.

Zaawansowane algorytmy i struktury danych

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.

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,

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

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

Podstawy Programowania. Złożoność obliczeniowa

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

Zasady analizy algorytmów

Informatyka 1. Złożoność obliczeniowa

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

INFORMATYKA SORTOWANIE DANYCH.

TEORETYCZNE PODSTAWY INFORMATYKI

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

Sortowanie - wybrane algorytmy

Struktury Danych i Złożoność Obliczeniowa

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

Wstęp do programowania

Podstawy Programowania

Podstawy Programowania. Złożoność obliczeniowa

Efektywność algorytmów

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

Jeszcze o algorytmach

Efektywna metoda sortowania sortowanie przez scalanie

PROBLEMY NIEROZSTRZYGALNE

Teoretyczne podstawy informatyki

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Strategia "dziel i zwyciężaj"

Wstęp do programowania

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

Programowanie w VB Proste algorytmy sortowania

Matematyczne Podstawy Informatyki

1. Analiza algorytmów przypomnienie

Sortowanie przez scalanie

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:

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

Podstawy Programowania

Sortowanie bąbelkowe

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

Algorytmy i struktury danych

Algorytmy i Struktury Danych.

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

Podstawy Informatyki. Metody dostępu do danych

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

Wyszukiwanie binarne

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

Złożoność Obliczeniowa Algorytmów

Teoretyczne podstawy informatyki

Wykład 2. Poprawność algorytmów

TEORETYCZNE PODSTAWY INFORMATYKI

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

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

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

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

Algorytmy i Struktury Danych, 2. ćwiczenia

TEORETYCZNE PODSTAWY INFORMATYKI

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

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

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

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

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

PRZEDMIOTOWY SYSTEM OCENIANIA PROSTO DO MATURY KLASA 1 ZAKRES PODSTAWOWY

Technologie Informacyjne

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

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

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 )

1. LICZBY DZIAŁ Z PODRĘCZNIKA L.P. NaCoBeZu kryteria sukcesu w języku ucznia

Katalog wymagań programowych na poszczególne stopnie szkolne

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

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

Algorytmy i struktury danych Matematyka III sem.

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

Algorytmy i ich poprawność

Katalog wymagań programowych na poszczególne stopnie szkolne

Przedmiotowy system oceniania Wymagania na poszczególne oceny,,liczy się matematyka

Wykład z Technologii Informacyjnych. Piotr Mika

Poprawność algorytmów

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

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

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

Wstęp do programowania

Wybrane metody przybliżonego. wyznaczania rozwiązań (pierwiastków) równań nieliniowych

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Rozdział 1 PROGRAMOWANIE LINIOWE

Algorytm selekcji Hoare a. Łukasz Miemus

Końcoworoczne kryteria oceniania dla klasy II z matematyki przygotowały mgr Magdalena Murawska i mgr Iwona Śliczner

Algorytm i złożoność obliczeniowa algorytmu

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

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

Zadanie 1. Algorytmika ćwiczenia

5. Podstawowe algorytmy i ich cechy.

Algorytmika i pseudoprogramowanie

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

Wymagania edukacyjne niezbędne do uzyskania poszczególnych śródrocznych ocen klasyfikacyjnych z matematyki klasa 2 (oddział gimnazjalny)

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

Transkrypt:

WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA Złożoność algorytmów Złożoność pamięciowa algorytmu wynika z liczby i rozmiaru struktur danych wykorzystywanych w algorytmie. Złożoność czasowa algorytmu wynika z liczby operacji elementarnych wykonywanych w trakcie przebiegu algorytmu. ZŁOŻOOŚĆ CZASOWA ALGORYTMU - zależność pomiędzy rozmiarem danych wejściowych a liczbą operacji elementarnych wykonywanych w trakcie przebiegu algorytmu (podawana jako funkcja rozmiaru danych, której wartości podają liczbę operacji) np. a) w alg. sortowania bąbelkowego dla listy o długości : F() = liczba porównań par sąsiednich elementów (?) b) w alg. rozwiązywania problemu wież Hanoi dla krążków: F() = liczba przeniesień pojedynczego krążka z kołka na kołek (?) c) w alg. wyznaczania najdłuższej przekątnej wielokąta wypukłego o wierzchołkach: F() = liczba porównań długości dwóch odcinków-przekątnych (?) d) w alg. wyznaczania najtańszej sieci kolejowej dla węzłów sieci i M możliwych do zbudowania odcinków: F(, M) = liczba porównań kosztów budowy dwóch odcinków (?). W praktyce złożoność czasowa decyduje o przydatności algorytmów Ponieważ trzeba rozwiązywać algorytmicznie coraz większe zadania: - w komputerowych systemach wspomagania decyzji, - przy komputerowych symulacjach i prognozach złożonych zjawisk. rozwijane są komputerowe systemy czasu rzeczywistego: - sterujące automatycznie złożonymi układami (transport, produkcja) Chcemy zmniejszać czas wykonania algorytmu! Przykład 1 ormalizacja wektora (tablicy jednowymiarowej) względem wartości maksymalnej; dane wejściowe zapisane w V(1), V(2),..., V() Algorytm 1 1. wyznacz w zmiennej MAX największą z wartości ; 2. dla I od 1 do wykonuj : 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 wykonuj : 3.1. V(I) V(I) ILORAZ Jeśli operacją elementarną jest wyznaczenie wartości iloczynu lub ilorazu dwóch zmiennych, to F 1 () = 2 i F 2 () = +1 Przykład 2 Wyszukiwanie liniowe elementu z listy o długości ; dane wejściowe to lista i element do wyszukania: 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 szukany element lub przejrzysz całą listę WSTĘP DO IFORMATYKI (6) J.Sikorski Strona 1 / 8

WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA 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 Jeśli operacją elementarną jest sprawdź, to F 1 () = 2 i F 2 () = +1 Poprawianie złożoności algorytmu jest czymś więcej niż tylko zmniejszaniem czasu jego wykonania! Jeżeli np. porównujemy dwa algorytmy wykonujące to samo zadanie za pomocą jednej pętli ograniczonej, w której liczba iteracji jest wprost proporcjonalna do rozmiaru danych wejściowych, to liczby operacji elementarnych (czasy wykonania) tych algorytmów w funkcji rozmiaru danych wynoszą odpowiednio: F 1 () = K 1 + L 1 F 2 () = K 2 + L 2 F1 do ich porównania możemy wykorzystać iloraz ( ) ( ) s = F2 ( ) i wtedy spełnienie warunków: s() = 1 oznaczałoby jednakową szybkość działania s() < 1 oznaczałoby, że 1. algorytm jest szybszy. Ale zauważmy, że s() = 1 zachodzi tylko wtedy, kiedy K 1 = K 2 i L 1 = L 2, co oznacza, że oba algorytmy są praktycznie identyczne. A co mamy powiedzieć, kiedy s() 1 dla 0, ale s() < 1 dla > 0. Który algorytm jest lepszy? Przyjęto, że porównując algorytmy badamy wartość ilorazu s() dla bardzo dużych wartości, czyli formalnie dla. L1 Zatem o wyniku porównania czasów działania dwóch algorytmów decyduje wartość: lim s( ) = ; jest to L2 tzw. analiza asymptotyczna. czas wykonania F 2 K 1 K 2 iloraz F 1 F 2 F 1 K 1 L 1 1 L 2 L 1 K 2 L 2 0 rozmiar danych 0 rozmiar danych Dwa algorytmy o czasach wykonania F 1 () i F 2 () mają złożoność tego samego rzędu, jeśli gdzie 0 < C < F1 ( ) lim = C, F ( 2 ) Spełnienie takiego warunku oznaczamy F 1 () = Θ( F 2 () ) Jeśli zachodzi F 1 () = Θ( F 2 () ), to także F 2 () = Θ( F 1 () ) Algorytm o czasie wykonania F 1 () ma nie wyższy rząd złożoności od algorytmu o czasie wykonania F 2 (), F1 ( ) jeśli lim = C < F ( ) 2 Spełnienie takiego warunku oznaczamy F 1 () = O( F 2 () ) WSTĘP DO IFORMATYKI (6) J.Sikorski Strona 2 / 8

WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA Jeśli zachodzi jednocześnie F 1 () = O( F 2 () ) i F 2 () = O( F 1 () ), to F 1 () = Θ( F 2 () ). Jeśli zachodzi F 1 () = Θ( F 2 () ), to także F 1 () = O( F 2 () ). jeśli C = 0, to algorytm o czasie wykonania F 1 () ma niższy rząd złożoności (ma lepszą złożoność) od algorytmu o czasie wyk. F 2 (); oznaczamy to symbolicznie F 1 () p F 2 () F( ) algorytm o czasie wykonania F() ma złożoność liniową, jeśli lim = C, dla 0 < C < ; złożoność rzędu oznaczana jest symbolem Θ() (ma on złożoność co najwyżej liniową, jeśli C < ; ozn. O() ). F( ) algorytm o czasie wykonania F() ma złożoność kwadratową, jeśli lim = C, dla 0 < C < ; 2 złożoność rzędu 2 oznaczana jest symbolem Θ( 2 ) (ma on złożoność co najwyżej kwadratową, jeśli C < ; ozn. O( 2 ) ; zauważmy jeszcze, że p 2 ). sytuację, w której zachodzi warunek : 0 F() C < oznaczamy F() = O(1). Dopiero zmniejszenie rzędu złożoności algorytmu jest istotnym ulepszeniem rozwiązania problemu algorytmicznego! Jeżeli algorytm wykonuje różną liczbę operacji elementarnych w zależności od konkretnych danych wejściowych (o tym samym rozmiarze) możemy badać czas wykonania w najgorszym przypadku (czyli skupiając się na takich przypadkach dopuszczalnych danych wejściowych, dla których ta liczba jest największa) - tzw. analiza najgorszego przypadku lub pesymistyczna. W przykładach normalizacji wektora i wyszukiwania liniowego czas wykonania Algorytmu 1. wynosi F 1 () = 2 : F 1 () = O() czas wykonania Algorytmu 2. wynosi F 2 () = +1 : F 2 () = O() oba mają pesymistyczny czas wykonania O() - mogą zdarzyć się takie dane wejściowe dla wyszukiwania liniowego, dla których trzeba będzie przejrzeć cała listę o długości (jest tak, kiedy szukanego elementu nie ma w ogóle na liście) Czy można zaproponować algorytm o lepszej złożoności dla wyszukiwania elementu na liście? Szukamy zatem algorytmu o (pesymistycznym) czasie wykonania F() p. Wyszukiwanie binarne (przez połowienie) elementu z listy uporządkowanej: Y 1, Y 2,..., Y (dla każdego i < j zachodzi Y i Y j ) start Weź całą listę wejściową TAK IE Czy szukany element jest mniejszy od elementu środkowego? Czy środkowy element bieżącej listy jest tym szukanym? IE TAK Wypisz znalazłem Weź pierwszą połowę listy Weź drugą połowę listy stop IE Czy lista bieżąca jest pusta? TAK Wypisz nie ma WSTĘP DO IFORMATYKI (6) J.Sikorski Strona 3 / 8

WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA Jeśli przyjmiemy, że operacją elementarną jest porównanie elementu szukanego z jednym z elementów listy (środkowym), to analiza złożoności polega na znalezieniu odpowiedzi na pytanie: ile razy jest powtarzana w najgorszym przypadku iteracja w algorytmie? Odpowiedź: 1 + log 2 (log 2 będziemy oznaczali lg ) Zatem pesymistyczna złożoność algorytmu wyszukiwania binarnego wynosi O(lg ) (mówimy, że algorytm ten ma złożoność logarytmiczną); lg p Skala ulepszenia: 1 + lg 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 O złożoności czasowej algorytmu decyduje liczba wykonywanych iteracji Koszt K 2 start (1) Koszt K 1 (2) Koszt K 4 Koszt K 3 (3) stop Całkowity koszt czasowy w najgorszym przypadku: F() = K 1 + max( K 3, K 4 ) + K 2 lg, a to oznacza F() = O(lg ) Właściwości notacji O( ) ( tzw. rachunek O( ) ) F( ) - jeśli F() jest funkcją złożoności algorytmu, to spełnienie warunku lim = C <, jest zapisywane g( ) F() = O(g()) ; odczytujemy algorytm ma złożoność rzędu nie wyższego niż g() lub krócej złożoność algorytmu jest O(g()) - równość w zapisie F() = O(g()) powinna być rozumiana w ten sposób, że funkcja F() jest jedną z funkcji, które spełniają powyższy warunek lub precyzyjniej, że funkcja F() należy do zbioru wszystkich funkcji spełniających powyższy warunek - F() = O(F()), - O(O(g())) = O(g()), WSTĘP DO IFORMATYKI (6) J.Sikorski Strona 4 / 8

WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA - C O(g()) = O(C g()) = O(g()) (dla dowolnego 0 < C < ), X 1 T X X + 1 X > C O ( g ( )) O ( g ( )) - O(g()) + O(h()) = O(g() + h()), O ( g ( )) O ( h ( )) O ( g ( )+ h ( )) g( ) - jeśli zachodzi lim = 0, czyli g() p h(), h( ) to O(g()) + O(h()) = O(g() + h()) = O(h()) - O(g()) O(h()) = O(g() h()) = g() O(h()) = h() O(g()), X 1 X 1 T X X + 1 X> O (. g ( )) O ( g ( )) T X X + 1 X > h( ) O ( h ( ). g ( )) O ( g ( )) - przy analizie złożoności w najgorszym przypadku (dla warunku zależnego od danych wejściowych) zachodzi: Czy warunek W jest spełniony? T O ( g ( )), jeśli h ( ) g ( ) O ( h( ) ), jeśli g( ) = O ( h( ) ) O ( g ( )) O ( h ( )) WSTĘP DO IFORMATYKI (6) J.Sikorski Strona 5 / 8

WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA Złożoność czasowa przykładowych algorytmów sortowanie bąbelkowe w pierwotnej wersji (zagnieżdżone iteracje): 1. wykonuj co następuje - 1 razy: 1.1.... ; 1.2. wykonuj co następuje - 1 razy: 1.2.1.... ; Całkowity koszt czasowy w najgorszym przypadku wynosi z dokładnością do stałych: ( 1) ( 1) = 2 2 +1 ; 1 p 2 p 2, czyli złożoność jest O( 2 ) sortowanie bąbelkowe ulepszone (coraz krótsze przebiegi): Całkowity koszt czasowy w najgorszym przypadku wynosi: ( - 1) + ( - 2) + ( - 3) +... + 2 + 1 = 0,5 2 0,5, czyli także złożoność jest O( 2 ) sumowanie zarobków pracowników - złożoność O() znajdowanie największej przekątnej w wielokącie wypukłym metodą naiwną - złożoność O( 2 ) znajdowanie największej przekątnej w wielokącie wypukłym metodą jednokrotnego obiegu z parą prostych równoległych - złożoność O() rekurencyjny algorytm dla problemu wież Hanoi procedura przenieś ; 1. jeśli = 1, to wypisz ruch i koniec; 2. w przeciwnym razie (tj. jeśli > 1) wykonaj co następuje: 2.1. wywołaj przenieś 1 ; 2.2. wypisz ruch ; 2.3. wywołaj przenieś 1 ; Oznaczmy nieznany koszt czasowy przez T() i ułóżmy równania, które T() musi spełniać (tzw. równania rekurencyjne): T(1) = 1 T() = 2 T( 1) +1 Spełnia je koszt T() = 2 1, czyli złożoność jest O(2 ) sortowanie drzewiaste bez samoorganizacji drzewa: ma pesymistyczną (w najgorszym przypadku) złożoność O( 2 ), bo wprawdzie lewostronne obejście drzewa ma złożoność liniową O(), ale konstrukcja binarnego drzewa poszukiwań ma pesymistyczną złożoność kwadratową 7 7 15 12 11 8 10 12 15 11 8 sortowanie drzewiaste z samoorganizacją drzewa: ma złożoność O( lg ), co daje wyraźną poprawę sprawności algorytmu sortowania w porównaniu z algorytmem bąbelkowym 2 lg 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 sortowanie przez scalanie (rekurencyjne): procedura sortuj-listę L; 10 WSTĘP DO IFORMATYKI (6) J.Sikorski Strona 6 / 8

WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA 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() i ułóżmy równania rekurencyjne, które T() musi spełniać: T(1) = 0 T() = 2 T(0,5 ) + Spełnia je koszt T() = lg, czyli złożoność jest O( lg ) Sortowanie przez scalanie jest jednym z najlepszych algorytmów sortowania (choć ma nie najlepszą złożoność pamięciową O() ) Ś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() O() sortowanie bąbelkowe O( 2 ) O( 2 ) sortowanie drzewiaste z samoorganizacją drzewa O( lg ) O( lg ) sortowanie przez scalanie O( lg ) O( lg ) Quicksort O( lg ) O( 2 ) Średni koszt czasowy algorytmu Quicksort wynosi tylko 1,4 lg Dolne i górne ograniczenia złożoności problemów algorytmicznych Czy można skonstruować jeszcze lepszy algorytm? złożoność poprawnego algorytmu znajdującego rozwiązanie danego problemu ustanawia górne ograniczenie złożoności dla tego problemu. dolne ograniczenie złożoności problemu (otrzymane w wyniku analizy samego problemu) określa zakres dalszej poprawy rzędu złożoności algorytmów rozwiązujących ten problem poprawa Górne ograniczenia dla złożoności problemu P Algorytm dla problemu P o złożoności O( 3 ) poprawa ajsprawniejsze rozwiązanie problemu ~ Algorytm dla problemu P o złożoności O( 2 ) Złożoność czasowa właściwa problemowi P (?) Dolne ograniczenia dla złożoności problemu P Problemy zamknięte i luki algorytmiczne Dowód, że każdy algorytm będący rozwiązaniem problemu P ma złożoność co najmniej Θ( lg ) Dowód, że każdy algorytm będący rozwiązaniem problemu P ma złożoność co najmniej Θ() uściślenie uściślenie problem dolne ogr. górne ogr. WSTĘP DO IFORMATYKI (6) J.Sikorski Strona 7 / 8

WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA przeszukiwanie listy nieuporządkowanej Θ() O() przeszukiwanie listy uporządkowanej Θ(lg ) O(lg ) sortowanie Θ( lg ) O( lg ) wyznaczanie najtańszej sieci kolejowej Θ() O(f() ) 1) 1} f() - bardzo wolno rosnąca funkcja, np. dla = 64 000 ma wartość 4 - problem zamknięty - problem z luką algorytm. Przykład analizy złożoności algorytmu Problem wyznaczania powłoki wypukłej dla zbioru punktów na płaszczyźnie: algorytm naiwny ma złożoność O( 3 ); trzeba dla każdego z punktów dobierać pozostałe 1 do pary, która wyznacza prostą i dla każdej z tych prostych sprawdzić czy 2 punkty leżą wszystkie po tej samej stronie prostej. algorytm o niższej 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 P 1 PJ z linią poziomą przechodzącą przez P 1 - powstanie lista P 2,...,P ; 3. dołącz do powłoki punkty P 1 i P 2 ; 4. dla J od 3 do 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 P 1 PJ, aż do napotkania pierwszego punktu nie dającego się usunąć ; krok 2. kolejne iteracje w kroku 4. 5 6 7 9 10 11 13 14 5 6 7 9 10 11 13 14 4 2 3 8 12 15 4 2 3 8 12 15 1 Podsumowanie złożoności algorytmu krok po kroku: Krok 1. O() (wybór pierwszego) Krok 2. O( lg ) (sortowanie) Krok 3. O(1) (dołączenie 1 odcinka) Krok 4. O() (dołączanie z usuwaniem) Razem O(+ lg +1+) = O( lg ) 1 WSTĘP DO IFORMATYKI (6) J.Sikorski Strona 8 / 8