Zasady analizy algorytmów

Podobne dokumenty
Podstawy Informatyki. Sprawność algorytmów

INFORMATYKA SORTOWANIE DANYCH.

TEORETYCZNE PODSTAWY INFORMATYKI

Efektywność algorytmów

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Teoretyczne podstawy informatyki

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

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

TEORETYCZNE PODSTAWY INFORMATYKI

Wprowadzenie do złożoności obliczeniowej

Algorytmy i Struktury Danych.

Zaawansowane algorytmy i struktury danych

Wykład 2. Poprawność algorytmów

Algorytm i złożoność obliczeniowa algorytmu

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

Matematyczne Podstawy Informatyki

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

Algorytm selekcji Hoare a. Łukasz Miemus

Złożoność Obliczeniowa Algorytmów

Zaawansowane algorytmy i struktury danych

Algorytmy i Struktury Danych

Technologie Informacyjne

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

Sortowanie - wybrane algorytmy

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

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Podstawy Programowania. Złożoność obliczeniowa

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,

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

Algorytmy i struktury danych Matematyka III sem.

Wstęp do programowania

Sortowanie przez scalanie

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

Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące.

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

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

Struktury Danych i Złożoność Obliczeniowa

Liczby pierwsze - wstęp

Informatyka 1. Złożoność obliczeniowa

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 i programowania część testowa (25 pyt. / 60 min.)

Lista 0. Kamil Matuszewski 1 marca 2016

Sortowanie w czasie liniowym

Podstawy Programowania

Zaawansowane algorytmy. Wojciech Horzelski

Projektowanie i Analiza 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)!

Sortowanie przez wstawianie

Algorytmy i Struktury Danych.

Podstawy Programowania. Złożoność obliczeniowa

Modele Obliczeń. Wykład 1 - Wprowadzenie. Marcin Szczuka. Instytut Matematyki, Uniwersytet Warszawski

Algorytmy w teorii liczb

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Algorytmy sortujące 1

EGZAMIN MATURALNY Z INFORMATYKI WYBRANE: ... (system operacyjny) ... (program użytkowy) ... (środowisko programistyczne)

Podstawy Programowania

Technologie informacyjne Wykład VII-IX

Analiza algorytmów zadania podstawowe

Efektywna metoda sortowania sortowanie przez scalanie

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

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

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

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

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.

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

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

Teoretyczne podstawy informatyki

Podyplomowe Studium Informatyki

Podyplomowe Studium Programowania i Systemów Baz Danych

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

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

Wykład 5. Sortowanie w czasie liniowologarytmicznym

5. Podstawowe algorytmy i ich cechy.

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

Algorytmy i struktury danych

Algorytmy i Struktury Danych, 2. ćwiczenia

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Laboratorium nr 7 Sortowanie

Zadanie: Wymyślić efektywną reprezentację par ciągów binarnych jako ciągów binarnych. Rozwiązanie: Propozycja wypracowana na ćwiczeniach

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

Logika stosowana. Ćwiczenia Złożoność obliczeniowa problemu spełnialności. Marcin Szczuka. Instytut Informatyki, Uniwersytet Warszawski

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

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

Podstawy programowania. Przykłady algorytmów Cz. 2 Sortowanie

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Efektywność Procedur Obliczeniowych. wykład 5

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

Funkcje elementarne. Ksenia Hladysz Własności 2. 3 Zadania 5

Algorytmy i ich poprawność

Algorytmy i Struktury Danych.

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

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

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

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

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

Wyszukiwanie binarne

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

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

Sortowanie przez wstawianie Insertion Sort

Transkrypt:

Zasady analizy algorytmów A więc dziś w programie: - Kilka ważnych definicji i opisów formalnych - Złożoność: czasowa i pamięciowa - Kategorie problemów - Jakieś przykłady

Problem: Zadanie możliwe do rozwiązania na maszynie liczącej (w szczególności na komputerze) z opisem zbioru danych wejściowych i charakterystyce oczekiwanej odpowiedzi. Formalnie to funkcja ze zbioru danych wejściowych w dane wyjściowe. Problem Nie mylić z instancją problemu! Przykładem problemu może być problem mnożenia liczb: Mając dwie liczby x i y znajdź ich iloczyn Instancją problemu mnożenia liczb mogą być dane 6 4, oczekiwaną odpowiedzą jest 24

Zadanie algorytmiki Przykłady algorytmów rozwiązujących problem mnożenia a x b Algorytm 1: a razy dodać do siebie liczbę b Algorytm 2: pomnożyć pisemnie (wymaga zdanego AK!) Algorytm 3: Mnożenie,,po rosyjsku : 1. Oblicz ciąg a 1, a 2 a k, taki, że a 1 = a, a 2 = a/2, a k = 1 (dzielimy całkowitoliczbowo) 2. Oblicz ciąg b 1, b 2 b k, taki, że b 1 = b, b 2 = 2b, b 3 = 4b 3 k 3. Oblicz σ i=1 b i dla a i nieparzyste

Złożoność obliczeniowa algorytmu Złożoność czasowa liczba jednostek czasu potrzebna na wykonanie algorytmu Jednostką czasu jest czas potrzebny na wykonanie elementarnej operacji (np. na maszynie RAM) Zakładamy kryterium jednorodne koszt każdej operacji na maszynie RAM jest jednostkowy 4 Złożoność pamięciowa liczba jednostek pamięci (np. komórek, bitów) potrzebnych na wykonanie algorytmu.

Złożoność algorytmów Jakie sytuacje należy rozpatrzeć? Złożoność najgorszego przypadku (pesymistyczna) Maksimum kosztu obliczeń dla danych rozmiaru N Złożoność średniego przypadku (oczekiwana) Średni koszt obliczeń dla danych rozmiaru N Złożoność najlepszego przypadku (optymistyczna) Minimum kosztu obliczeń dla danych rozmiaru N 5

Złożoność obliczeniowa Asymptotyczne tempo wzrostu Często interesuje nas ogólny przebieg funkcji kosztu, a nie jej dokładny wykres Do takiego ogólnego opisu używa się notacji Wykorzystywane notacje: Duże O ogranicza funkcję z góry Duże Ω ogranicza funkcję z dołu Duże ϴ - ogranicza funkcję z góry i z dołu 6

Notacja duże O Definicja formalna Mówimy, że f(n) = O( g(n) ), gdy dla każdego n większego od n 0 istnieje takie c, że f n c g(n) Zaraz narysuje o co chodzi Definicja intuicyjna Jesteśmy w stanie dobrać taką stałą dla funkcji ograniczającej, że wartości funkcji ograniczonej są mniejsze od wartości funkcji ograniczającej Jeśli rozumiesz liczenie granic to to bardzo podobne 7

Praktyka czyni mistrza Kilka przykładów Zapisz za pomocą dużego O: 8 1 3 n2 + 10n + 1 100 n4 + 10000n 3 + 125 nlog n + 10n + log n 2 n + 100n 5 + 1000000000 n n log n + n 1.00001 + 2 log n! + n 2 2 n + 3 n + 5 n

Elementarny słowniczek Nazewnictwo O(1) stała liczba operacji, koszt stały, złożoność stała O(n) liniowa liczba operacji, koszt liniowy O(nlogn) złożoność quasi-liniowa (pseudoliniowa) O(n 2 ) złożoność kwadratowa O(n c ) złożoność wielomianowa O(2 no(1) ) złożoność wykładnicza Jeśli mówimy o złożoności pamięciowej, to algorytmy wykorzystujące nie więcej niż logarytmicznie wiele pamięci dodatkowej, to są to algorytmy działające w miejscu (in situ). 9

Klasy złożoności problemów Przez klasę problemów rozumiemy takie zbiory problemów, że do ich rozwiązania potrzebna jest podobna ilość zasobów (czasu lub pamięci). Pokazanie do jakiej klasy należy algorytm jest ważne przy konstrukcji rozwiązania. Nie ma bowiem sensu próbować wymyślać szybkiego algorytmu dla problemu, dla którego pokazano, że nie należy do klasy P (czym jest klasa P zaraz). 10

Zaraz zrobię wykres i to omówię, dajcie mi chwilę! Najważniejsze klasy problemów Klasa R Klasa P Klasa EXP Klasa NP Klasa PSPACE 11

To teraz praktyka Analiza złożoności - sortowanie Rozpatrzmy sortowanie przez wybór (select sort) Polega ono na wybieraniu kolejnych najmniejszych elementów spośród przedstawionych danych Pseudokod zaraz na tablicy 12

Kontynujemy Sortowanie przez wybór 13 Widać zatem, że w pierwszej iteracji zewnętrznej pętli for wykonamy jedno przypisanie do zmiennej min, pętlę wewnętrzną for i jedną zamianę elementów Każde kolejne odpalenie pętli for kosztuje odpowiednio n, n-1, n-2,, 2, 1 operacji Jeśli zatem pętla zewnętrzna kręci się n-razy, to otrzymamy złożoność programu n + n 1 + n 2 + + 2 + 1 = (n 2 + n)/2 plus liniowa liczba operacji wynikająca z przypisania i zamiany elementów Zatem złożoność sortowania przez wybór to..

Czemu tak słabo? Co tutaj decyduje o złożoności? Widać, że złożoność jest uzależniona od dwóch pętli for, które powodują kwadratową liczbę operacji względem wielkości danych Konieczność zastosowania pętli wewnętrznej wynika z naiwnego wyszukiwania minimum w zbiorze Gdyby jakoś usprawnić to wyszukiwanie, to można usprawnić całą złożoność 14

Ulepszenie Sortowanie przez kopcowanie Zauważmy, że jeśli elementy u z uniwersum U mają porządek liniowy, to możemy te elementy kopcować Wytwarzanie kopca kosztuje O(n) operacji Otrzymanie elementu minimalnego i jego usunięcie z kopca kosztuje O(log n ) operacji Zatem sumaryczny koszt sortowania przez kopcowanie to O(n log n ) (dowód zaraz na tablicy) 15

Pytania na koniec