Matematyczne Podstawy Informatyki

Podobne dokumenty
1. Analiza algorytmów przypomnienie

TEORETYCZNE PODSTAWY INFORMATYKI

Wprowadzenie do złożoności obliczeniowej

Podstawy Informatyki. Sprawność algorytmów

Sortowanie przez wstawianie

Strategia "dziel i zwyciężaj"

Algorytmy i Struktury Danych.

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 )

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

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

INFORMATYKA SORTOWANIE DANYCH.

Teoretyczne podstawy informatyki

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

Projektowanie i Analiza Algorytmów

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

Algorytmy i Struktury Danych.

Sortowanie - wybrane algorytmy

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

Algorytmy i Struktury Danych

Efektywność algorytmów

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

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

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.

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,

Zasady analizy algorytmów

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Przykładowe sprawozdanie. Jan Pustelnik

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

Jeszcze o algorytmach

Efektywna metoda sortowania sortowanie przez scalanie

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

Projektowanie i analiza algorytmów

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

Zaawansowane algorytmy i struktury danych

Algorytmy i struktury danych Matematyka III sem.

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

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

Algorytmy i Struktury Danych

Analiza algorytmów zadania podstawowe

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

Algorytm. a programowanie -

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Analiza algorytmów zadania podstawowe

Zał nr 4 do ZW. Dla grupy kursów zaznaczyć kurs końcowy. Liczba punktów ECTS charakterze praktycznym (P)

Sortowanie przez scalanie

TEORETYCZNE PODSTAWY INFORMATYKI

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

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

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

Złożoność Obliczeniowa Algorytmów

Teoretyczne podstawy informatyki

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Podyplomowe Studium Programowania i Systemów Baz Danych

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

Wstęp do programowania

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

Podyplomowe Studium Informatyki

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

Wykład 2. Poprawność algorytmów

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

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

PRZEWODNIK PO PRZEDMIOCIE

Metody numeryczne I. Janusz Szwabiński. Metody numeryczne I (C) 2004 Janusz Szwabiński p.1/61

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4

Struktury Danych i Złożoność Obliczeniowa

Matematyczne Podstawy Informatyki

Technologie Informacyjne

Metodyki i techniki programowania

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

PROBLEMY NIEROZSTRZYGALNE

Sortowanie danych. Jolanta Bachan. Podstawy programowania

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

Algorytmy sortujące. Sortowanie bąbelkowe

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

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

TEORETYCZNE PODSTAWY INFORMATYKI

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

Zaawansowane algorytmy. Wojciech Horzelski

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

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

Rekurencja. Przykład. Rozważmy ciąg

Załącznik KARTA PRZEDMIOTU. KARTA PRZEDMIOTU Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010

Algorytm i złożoność obliczeniowa algorytmu

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

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

9. Schematy aproksymacyjne

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

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Realizacja w roku akademickim 2016/17

Algorytmy komputerowe. dr inż. Jarosław Forenc

Algorytmy i Struktury Danych.

Metodyki i techniki programowania

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

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

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

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

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

Algorytmy sortujące i wyszukujące

Matematyczne Podstawy Informatyki

Transkrypt:

Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014

Algorytm 1. Termin algorytm jest używany w informatyce do opisania: 1.1 skończonego, 1.2 deterministycznego, 1.3 efektywnego sposobu rozwiązania określonego problemu. 2. Najczęściej algorytmem jest ściśle określona procedura obliczeniowa, która na podstawie danych wyjściowych są tworzone dane wyjściowe.

Algorytm Euklidesa 1 i n t gcd ( i n t p, i n t q ) 2 { 3 i f ( q == 0) return p ; 4 return gcd ( q, p % q ) ; 5 }

Analiza algorytmów 1. Analiza algorytmu polega na określeniu zasobów, jakie są niezbędne do jego wykonania. 2. Zasobem może być: 2.1 czas obliczeń, 2.2 wielkość pamięci, 2.3 przepustowość kanału komunikacyjnego lub sprzętu. 3. Analiza zapotrzebowania prowadzi do wyboru rozwiązania (algorytmu) najefektywniejszego. 4. W analizie dokonuje się wyboru modelu realizowania obliczeń - najczęściej maszyna o dostępie swobodnym do pamięci.

Rozmiar danych wejściowych i czas działania algorytmu 1. Na ogół czas działania algorytmu rośnie wraz z rozmiarem danych wejściowych - czas, można powiedzieć, jest funkcją rozmiaru danych wejściowych. 2. Rozmiar danych wejściowych - jest zależny od rozwiązywanego problemu: 2.1 W rozważanym dalej problemie sortowania rozmiarem jest liczba danych do posortowania. 2.2 W problemach kryptograficznych liczba bitów, na których wymagane jest wykonanie operacji. 3. Czas działania algorytmu dla konkretnych danych wejściowych jest wyrażony liczbą wykonanych elementarnych operacji. 3.1 Na ogół definiuje się go niezależnie od konkretnego komputera - przyjmuje się, że wykonanie jednego wiersza kodu wymaga stałego czasu.

Przypadek pesymistyczny i średni 1. Najczęściej wyznacza się pesymistyczny i średni przypadek dla określonego algorytmu. 2. Pesymistyczny czas działania jest górną granicą możliwego czasu działania algorytmu dla każdych danych wejściowych. Daje gwarancję, że algorytm nie będzie działał dłużej. 3. Przypadek średni (zwany również oczekiwanym) jest zbliżony do pesymistycznego - wyznacza się oczekiwany porządek elementów i na tej podstawie dokonuje analizy.

Rząd wielkości funkcji 1. W trakcie analizy algorytmów dokonuje się wielu uproszczeń - np. pomija się stałe współczynniki - prowadzi to uzyskania pewnej wielkości wyznaczającej efektywność algorytmu np O(n 2 ) czy O(n). 2. Dany algorytm jest efektywniejszy od innego, jeśli jego pesymistyczny czas działania jest funkcją niższego rzędu.

Funkcje

Funkcje

Złożoność obliczeniowa i asymptotyczna Złożoność asymptotyczna jest miarą wydajności używaną podczas odrzucania pewnych składowych funkcji nieistotnych lub takich, dla których możliwe jest wyznaczenie jedynie przybliżeń. Miara ta pozwala na szacowanie tempa wzrostu funkcji.

Notacja asymptotyczna O( ) I Najpowszechniej używana notacja opisująca złożoność asymptotyczną (P. Bachmann, 1894 r.) Niech f (n), g(n), n N będą funkcjami ze zbioru liczb naturalnych w zbiór liczb rzeczywistych. Powiemy, że funkcja f (n) jest rzędu najwyżej g(n), co oznaczamy O(g(n)), jeżeli istnieją stałe dodatnie c 1 R, n 0 N takie, że: na przykład: n n 0, f (n) c 1 g(n) f (n) = 3 n 3 + n 2 n + 113 f (n) = const f (n) = O(n 3 ) f (n) = O(1)

Notacja asymptotyczna O( ) II Podana definicja oznacza, że f ma złożoność rzędu g, jeśli istnieje taka liczba dodatnia c 1, że f jest niewiększa od c 1 g dla dostatecznie dużych n, czyli dla dla wszystkich n większych od pewnej ustalonej liczby n 0. Związek między f i g oznacza, że albo g jest kresem górnym dla f, albo że od pewnego miejsca f rośnie nie szybciej niż g. Przykład: f (n) = n 2 + 100n + log 10 n + 1000 Dla małych wartości n ostatni wyraz jest największy. Kiedy n = 10, drugi i ostatni wyraz są tego samego rzędu, zaś pozostałe mają do wyniku niewielki wkład. Kiedy n osiąga wartość 100, pierwszy i drugi wyraz mają taki sam wkład w wynik; kiedy n przekracza 100, drugi wyraz też traci na znaczeniu. Wobec tego dla dużych wartości n, z uwagi na kwadratowy postęp pierwszego wyrazu (n 2 ), wartość funkcji f zależy głównie od niego, a pozostałe wyrazy na dłuższą metę tracą na znaczeniu.

Notacja asymptotyczna O( ) III

Sortowanie Problem, który polega na uporządkowaniu ciągu liczb w odpowiedniej kolejności jest nazywany sortowaniem. 1. Dane wejściowe: Ciąg n liczb (a 1, a 2,..., a n ), 2. Dane wyjściowe: Permutacja (zmiana kolejności) a 1, a 2,..., a n ciągu wejściowego, w której: a 1 <= a 2 <=... <= a n.

Sortowanie bąbelkowe 2 4 0 1 5 3 7 6 2 0 1 4 3 5 6 7 2 0 1 4 3 5 6 7 2 0 1 4 3 5 6 7 0 1 2 3 4 5 6 7

Sortowanie bąbelkowe 1 void zamien ( i n t& x, i n t& y ) 2 { 3 i n t tmp = x ; 4 x = y ; 5 y = tmp ; 6 } 7 8 void s o r t b a b e l ( v e c t o r <int>& tab, unsigned r o z m i a r ) 9 { 10 f o r ( unsigned i = 0 ; i < r o z m i a r ; ++i ) 11 f o r ( unsigned j = 0 ; j < r o z m i a r i 1 ; ++j ) 12 i f ( tab [ j ] > tab [ j + 1 ] ) 13 zamien ( tab [ j ], tab [ j + 1 ] ) ; 14 }

Sortowanie przez wstawianie 2 4 0 1 5 3 7 6 2 4 0 1 5 3 6 7 2 4 0 1 5 3 6 7 2 4 0 1 3 5 6 7 2 4 0 1 3 5 6 7 2 4 0 1 3 5 6 7 2 0 1 3 4 5 6 7 0 1 2 3 4 5 6 7

Sortowanie przez wstawianie 1 void s o r t w s t a w ( v e c t o r <int>& tab, unsigned r o z m i a r ) 2 { 3 f o r ( i n t i = r o z m i a r 2 ; i >= 0 ; i ) 4 { 5 i n t elem = tab [ i ] ; 6 unsigned j = i + 1 ; 7 f o r ( ; tab [ j ] < elem && j < r o z m i a r ; ++j ) 8 tab [ j 1 ] = tab [ j ] ; 9 tab [ j 1 ] = elem ; 10 } 11 }

Dziel i zwyciężaj 1. Podział problemu na podproblemy. 2. Rozwiązanie podproblemów rekurencyjnie, chyba że są one małego rozmiaru i już nie wymagają zastosowania rekursji - używa się wtedy bezpośrednich metod. 3. Scalanie rozwiązań podproblemów w celu uzyskania rozwiązania całego problemu.

Sortowanie przez scalanie I 1 void s o r t s c a l ( v e c t o r <int>& tab, unsigned r o z m i a r ) 2 { 3 scal pomoc ( 0, r o z m i a r 1, tab ) ; 4 }

Sortowanie przez scalanie II 1 void scal pomoc ( unsigned pocz, unsigned kon, v e c t o r <int>& tab ) 2 { 3 i f ( pocz < kon ) 4 { 5 cout << pocz << << kon << e n d l ; 6 scal pomoc ( pocz, ( kon + pocz ) /2, tab ) ; 7 scal pomoc ( ( kon + pocz ) /2 + 1, kon, tab ) ; 8 s c a l a j ( pocz, kon, tab ) ; 9 } 10 }

Sortowanie przez scalanie III 1 void s c a l a j ( unsigned pocz, unsigned kon, v e c t o r <int>& tab ) 2 { 3 v e c t o r <int > pom( kon pocz + 1) ; 4 5 unsigned i = pocz ; 6 unsigned s r o d e k = ( kon + pocz ) / 2 ; 7 unsigned j = s r o d e k + 1 ;

Sortowanie przez scalanie IV 1 unsigned k = 0 ; 2 f o r ( ; i <= s r o d e k && j <= kon ; ++k ) 3 { 4 i f ( tab [ i ] < tab [ j ] ) 5 pom [ k ] = tab [ i ++]; 6 e l s e 7 pom [ k ] = tab [ j ++]; 8 } 1 while ( i <= s r o d e k ) 2 pom [ k++] = tab [ i ++]; 3 4 while ( j <= kon ) 5 pom [ k++] = tab [ j ++];

Sortowanie przez scalanie V 1 f o r ( i = pocz ; i <= kon ; ++i ) 2 tab [ i ] = pom [ i pocz ] ; 3 }

Sortowanie kubełkowe 1 void s o r t k u b e l ( v e c t o r <int>& tab, unsigned r o z m i a r ) 2 { 3 i n t maxi = 100; 4 v e c t o r <int > pom( maxi, 0 ) ; 5 f o r ( i n t i = 0 ; i < r o z m i a r ; ++i ) 6 pom [ tab [ i ]]++; 7 8 f o r ( i n t i = 0, j =0; i < maxi + 1 ; ++i ) 9 i f (pom [ i ] > 0) 10 f o r ( i n t k = 0 ; k < pom [ i ] ; ++k ) 11 tab [ j ++] = i ; 12 13 }

Sortowanie - złożoność I Sortowanie bąbelkowe - O(n 2 ), Sortowanie przez wstawianie - O(n 2 ), Sortowanie przez scalanie - O(nlog(n)), Sortowanie kubełkowe - O(n).

Sortowanie - złożoność II

Literatura 1. T.H. Cormen, Ch. E. Leiserson, R. Rivest, C. Stein Wprowadzenie do algorytmów, WNT 2004 2. R. Sedgewick, K. Wayne Algorithms, Addison-Wesley Professional 2011 3. E. Gawrońska Podstawy informatyki - wykład.