1. Analiza algorytmów przypomnienie

Podobne dokumenty
Matematyczne Podstawy Informatyki

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

Podstawy Informatyki. Sprawność algorytmów

Zasady analizy algorytmów

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy i Struktury Danych.

Wprowadzenie do złożoności obliczeniowej

Algorytmy i Struktury Danych

Efektywność algorytmów

Zaawansowane algorytmy i struktury danych

Algorytmy i Struktury Danych.

Algorytmy i struktury danych Matematyka III sem.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

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

Sortowanie - wybrane algorytmy

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

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,

TEORETYCZNE PODSTAWY INFORMATYKI

Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

INFORMATYKA SORTOWANIE DANYCH.

Złożoność Obliczeniowa Algorytmów

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

Sortowanie przez scalanie

Algorytmy sortujące. Sortowanie bąbelkowe

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

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

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

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

Teoretyczne podstawy informatyki

Analiza algorytmów zadania podstawowe

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe

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

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

Podyplomowe Studium Programowania i Systemów Baz Danych

Sortowanie przez wstawianie

Teoretyczne podstawy informatyki

Algorytm i złożoność obliczeniowa algorytmu

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

Jeszcze o algorytmach

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Projektowanie i Analiza Algorytmów

Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa

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

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

Podyplomowe Studium Informatyki

Krzysztof Gniłka. Twierdzenie o rekurencji uniwersalnej

Podstawy Programowania. Złożoność obliczeniowa

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

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

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

9. Schematy aproksymacyjne

Liczby pierwsze - wstęp

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

Analiza algorytmów zadania podstawowe

Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln)

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

Laboratorium nr 7 Sortowanie

koordynator modułu dr hab. Michał Baczyński rok akademicki 2012/2013

Efektywna metoda sortowania sortowanie przez scalanie

Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I

Matematyka dyskretna Literatura Podstawowa: 1. K.A. Ross, C.R.B. Wright: Matematyka Dyskretna, PWN, 1996 (2006) 2. J. Jaworski, Z. Palka, J.

Informatyka 1. Złożoność obliczeniowa

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

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 programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Przykładowe sprawozdanie. Jan Pustelnik

1. Napisz program wypisujący w kolejnych wierszach standardowego wyjścia pojedyncze słowa następującego napisu Bardzo dlugi napis. 2.

Wstęp do programowania

Programowanie równoległe

Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I

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

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

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

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

Algorytmy i Struktury Danych, 2. ćwiczenia

Temat: Algorytm kompresji plików metodą Huffmana

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

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4

Wykład 6. Wyszukiwanie wzorca w tekście

Algorytmy sortujące 1

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

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

Algorytm. a programowanie -

KARTA PRZEDMIOTU. 1. NAZWA PRZEDMIOTU: Struktury danych i algorytmy. 2. KIERUNEK: Matematyka. 3. POZIOM STUDIÓW: I stopnia

Podstawy Programowania

Podstawy Programowania. Złożoność obliczeniowa

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

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

Algorytmy i struktury danych

Algorytmy w teorii liczb

Sprawozdanie do zadania numer 2

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

Algorytmy i struktury danych

Algorytmy i Struktury Danych.

PROBLEMY NIEROZSTRZYGALNE

Wykłady specjalistyczne. (Matematyka w finansach i ekonomii; Matematyczne metody informatyki)

Algorytmy i struktury danych

Wskaźniki. Programowanie Proceduralne 1

Transkrypt:

1. Analiza algorytmów przypomnienie T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Wprowadzenie do algorytmów, rozdziały 1-4 Wydawnictwa naukowo-techniczne (2004) Jak mierzyć efektywność algorytmu? Przyjęcie modelu obliczeniowego (np. RAM). Ustalenie rozmiaru wejścia. Ustalenie liczby operacji (instrukcji) podstawowych; zdefiniowanie operacji podstawowych. Ustalenie minimalnej potrzebnej liczby komórek pamięci; odniesienie do zastosowanych struktur danych.

Rozmiar wejścia W formalnym modelu (np. maszyna Turinga) rozmiar wejścia zdefiniowany jest jako długość napisu wejściowego nad skończonym alfabetem. Dla jednej zmiennej n N przyjmuje się liczbę bitów log 2 n +1. Dla ustalonej liczby k zmiennych n 1,...,n k przyjmuje się ich sumę długości, czyli k 1 (log 2n i +1); np. w algorytmie Euklidesa rozmiar wejścia to log 2 m + log 2 n +2. Dla wektora n-elementowego przyjmujemy liczbę elementów, czyli n. Dla tablicy wielowymiarowej przyjmujemy największy z jej wymiarów; np. dla tablicy TAB[1... 100][1... 1000] rozmiarem wejścia jest 1000.

Szacowanie tempa wzrostu Symbol O( ): h: N R + ; klasa O(h) = {g: N R +, gdzie c>0 n0 N n n0 g(n) c h(n)}; g O(h) oznacza, że funkcja g rośnie nie szybciej niż funkcja h. g O(h) czytamy: g jest klasy O duże od h g O(h) czytamy: lub g jest rzędu O duże od h. Symbol Ω( ): Przykłady: f: N R + ; g(n) klasa= Ω(f) n = O(n {g: 2 ); N R +, gdzie c>0 n0 N n n0 g(n) c f(n)}; g(n) g Ω(f) = 1/noznacza, O(1); że funkcja f rośnie nie szybciej niż funkcja g. g(n) g Ω(f) = 100 n czytamy: 2 +100 g 100 n+100 jest klasy 100100 Omega O(n duże 2 ); od f g(n) g Ω(f) = (logn) czytamy: a O(n lub b ) g dlajest każdych rzędu a,b Omega > 0; np. duże(logn) od f. 1000 O(n 0.001 ). Symbole o( ),ω( ) oraz Θ( ).

Symbol Ω( ): f: N R + ; klasa Ω(f) = {g: N R +, gdzie c>0 n0 N n n0 g(n) c f(n)}; g Ω(f) oznacza, że funkcja f rośnie nie szybciej niż funkcja g. g Ω(f) czytamy: g jest klasy Omega duże od f g Ω(f) czytamy: lub g jest rzędu Omega duże od f. Przykłady: g(n) = n 2 Ω(n); g(n) = 1 10 Ω(1/n); g(n) = n2 100 100100 n 100100100 Ω(n 2 ); g(n) = n b Ω((logn) a ) dla każdych a,b > 0. Symbole o( ),ω( ) oraz Θ( ).

Czasowa złożoność obliczeniowa Operacje podstawowe: operacje arytmetyczne, logiczne oraz porównania; odczytanie, zapisanie do komórki pamięci; wywołanie funkcji, procedury. W modelu RAM koszty powyższych operacji podstawowych są jednostkowe. Dla ustalonych danych wejściowych I możemy (zazwyczaj) precyzyjnie wyznaczyć liczbę lop(i) operacji podstawowych wykonanych przez program. (Pesymistyczna) Czasowa złożoność obliczeniowa T(n) := max{lop(i) : I I(n)}, gdzie I(n) jest to zbiór wszystkich danych wejściowych o rozmiarze n. Ze względów praktycznych szuka się jak najlepszego oszacowania tempa wzrostu funkcjit, czyli możliwie najwolniej rosnącej funkcjig takiej, żet O(g).

Czasowa złożoność obliczeniowa Np. sortowanie bąbelkowe n liczb: Operacje rozmiar danych podstawowe: wejściowych: n; liczba operacji podstawowych const n operacje arytmetyczne, logiczne oraz porównania; 2 ; złożoność czasowa: T(n) O(n 2 ) (ale i też T(n) O(n 100 )). odczytanie, zapisanie do komórki pamięci; Twierdzenie. wywołanie Dowolny funkcji, algorytm procedury. sortujący n elementów za pomocą porównań wymaga w przypadku pesymistycznym czasu rzędu Ω(nlogn). /Cormen et al./ W modelu RAM koszty powyższych operacji podstawowych są jednostkowe. Dla ustalonych danych wejściowych I możemy (zazwyczaj) precyzyjnie wyznaczyć liczbę lop(i) operacji podstawowych wykonanych przez program. (Pesymistyczna) Czasowa złożoność obliczeniowa T(n) := max{lop(i) : I I(n)}, gdzie I(n) jest to zbiór wszystkich danych wejściowych o rozmiarze n. Ze względów praktycznych szuka się jak najlepszego oszacowania tempa wzrostu funkcjit, czyli możliwie najwolniej rosnącej funkcjig takiej, żet O(g).

Pamięciowa złożoność obliczeniowa W każdym momencie wykonywania programu jesteśmy w stanie sprawdzić, ile aktualnie wykorzystywanych jest komórek (jednostek) pamięci. Dla ustalonych danych wejściowych I możemy wyznaczyć liczbę lkp(i) komórek pamięci wykorzystywanych podczas działania programu. (Pesymistyczna) Pamięciowa złożoność obliczeniowa M(n) := max{lkp(i) : I I(n)}. Nie zliczamy łącznej liczby użytych komórek pamięci, a pytamy się, jaki powinien być najmniejszy rozmiar pamięci gwarantującej wykonanie się programu. W przypadku programów ze zmiennymi dynamicznymi należy ustalić maksymalny rozmiar stosu zmiennych dynamicznych. Szukamy jak najlepszego oszacowania tempa wzrostu funkcji M, czyli możliwie najwolniej rosnącej funkcji f takiej, że M O(f).

Pamięciowa Np. sortowanie złożoność bąbelkowe obliczeniowa n liczb: rozmiar danych wejściowych: n; W każdym momencie wykonywania programu jesteśmy w stanie sprawdzić, ile aktualnie liczba operacji wykorzystywanych podstawowych jest komórek const n 2 (jednostek) ; pamięci. złożoność czasowa: T(n) O(n 2 ); Dla ustalonych danych wejściowych I możemy wyznaczyć liczbę lkp(i) komórek pamięci wykorzystywanych podczas działania złożoność pamięciowa: M(n) O(1). programu. (Pesymistyczna) Pamięciowa złożoność obliczeniowa M(n) := max{lkp(i) : I I(n)}. Nie zliczamy łącznej liczby użytych komórek pamięci, a pytamy się, jaki powinien być najmniejszy rozmiar pamięci gwarantującej wykonanie się programu. W przypadku programów ze zmiennymi dynamicznymi należy ustalić maksymalny rozmiar stosu zmiennych dynamicznych. Szukamy jak najlepszego oszacowania tempa wzrostu funkcji M, czyli możliwie najwolniej rosnącej funkcji f takiej, że M O(f).