Algorytmy i struktury danych Matematyka III sem.

Podobne dokumenty
Podyplomowe Studium Programowania i Systemów Baz Danych

Podyplomowe Studium Informatyki

Podstawy Informatyki. Sprawność algorytmów

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

Wyszukiwanie. Wyszukiwanie binarne

Wprowadzenie do złożoności obliczeniowej

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

Sortowanie przez wstawianie

TEORETYCZNE PODSTAWY INFORMATYKI

Wykład 2. Poprawność algorytmów

Efektywna metoda sortowania sortowanie przez scalanie

INFORMATYKA SORTOWANIE DANYCH.

Efektywność algorytmów

Krzysztof Gniłka. Twierdzenie o rekurencji uniwersalnej

TEORETYCZNE PODSTAWY INFORMATYKI

Złożoność Obliczeniowa Algorytmów

Laboratorium nr 7 Sortowanie

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

Matematyczne Podstawy Informatyki

Zasady analizy algorytmów

Zaawansowane algorytmy. Wojciech Horzelski

Algorytmy i Struktury Danych

Zaawansowane algorytmy i struktury danych

Algorytmy i Struktury Danych.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Metoda bisekcji (inaczej połowienia przedziału lub równych podziałów)

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

Teoretyczne podstawy informatyki

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

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

Wstęp do programowania

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

Teoretyczne podstawy informatyki

i = n = n 1 + n 2 1 i 2 n 1. n(n + 1)(2n + 1) n (n + 1) =

Układy równań liniowych. Ax = b (1)

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Jeszcze o algorytmach

Wykład z Technologii Informacyjnych. Piotr Mika

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

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,

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

Podstawy Informatyki. Algorytmy i ich poprawność

Sortowanie - wybrane algorytmy

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

Sortowanie przez scalanie

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

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

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

Programowanie w VB Proste algorytmy sortowania

Sortowanie przez wstawianie Insertion Sort

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

Algorytmy i ich poprawność

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.

Informatyka 1. Złożoność obliczeniowa

Wstęp do programowania

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

Algorytmy i Struktury Danych.

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

Wprowadzenie do algorytmiki

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

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

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

Podstawy Programowania. Złożoność obliczeniowa

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

Wykład 8. Informatyka Stosowana. 26 listopada 2018 Magdalena Alama-Bućko. Informatyka Stosowana Wykład , M.A-B 1 / 31

Algorytmy. Programowanie Proceduralne 1

Algorytmy sortujące i wyszukujące

Algorytm. a programowanie -

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

Algorytmy i struktury danych

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

Definicja pochodnej cząstkowej

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

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

Analiza algorytmów zadania podstawowe

jest rozwiązaniem równania jednorodnego oraz dla pewnego to jest toŝsamościowo równe zeru.

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

5. Rozwiązywanie układów równań liniowych

Algorytmy i struktury danych

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

Układy równań i nierówności liniowych

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

Przykładowe sprawozdanie. Jan Pustelnik

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

Metody numeryczne. Sformułowanie zagadnienia interpolacji

Algorytm. Krótka historia algorytmów

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 )

Projekt Era inżyniera pewna lokata na przyszłość jest współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Temat: Algorytmy zachłanne

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

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

Algorytmy i Struktury Danych, 2. ćwiczenia

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Definicje. Algorytm to:

Podstawy Programowania

WIELOMIANY I FUNKCJE WYMIERNE

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

Transkrypt:

Algorytmy i struktury danych Matematyka III sem. 30 godz. wykł. / 15 godz. ćw. / 15 godz. projekt dr inŝ. Paweł Syty, 413GB, sylas@mif.pg.gda.pl, http://sylas.info Literatura T.H. Cormen i inni, Wprowadzenie do algorytmów, WNT 2005 J. Bentley, Perełki oprogramowania, wyd. II, WNT 2001 D. Harel, Rzecz o istocie informatyki. Algorytmika, WNT 2001 Materiały dydaktyczne http://moodle.pg.gda.pl Kurs Algorytmy i struktury danych (Mat)

Algorytm definicja, cechy, poprawność Obliczenie znalezienie rozwiązania danego zagadnienia w oparciu o dostępne dane i z uŝyciem algorytmu. Algorytm poddający się interpretacji skończony zbiór instrukcji wykonania zadania mającego określony stan końcowy dla kaŝdego zestawu danych wejściowych. Innymi słowy algorytm jest ciągiem kroków obliczeniowych, prowadzących do przekształcenia danych wejściowych w wyjściowe. Własności algorytmu - moŝe korzystać z danych wejściowych - prowadzi do jednej lub większej liczby danych wyjściowych - wskazana własność ogólności - rozwiązanie zawsze osiągnięte i to w skończonej liczbie kroków - kaŝdy moŝliwy przypadek przewidziany - kaŝdy krok jednoznacznie i precyzyjnie zdefiniowany - korzysta z operacji podstawowych (plus iteracje i struktury warunkowe) Poprawność algorytmów Algorytm nazywamy poprawnym, jeŝeli dla dowolnych poprawnych danych wejściowych, osiąga on punkt końcowy i otrzymujemy poprawne wyniki.

Cechy algorytmu poprawnego - Częściowa poprawność. Algorytm nazywamy częściowo poprawnym, gdy prawdziwa jest następująca implikacja: jeŝeli algorytm osiągnie koniec dla dowolnych poprawnych danych wejściowych, to dane wyjściowe będą spełniać warunek końcowy. - Własność określoności obliczeń. Algorytm posiada tę własność, jeŝeli dla dowolnych poprawnych danych wejściowych, działanie algorytmu nie zostanie przerwane. - Własność stopu. Algorytm posiada tę własność, jeŝeli dla dowolnych poprawnych danych wejściowych, algorytm nie będzie działał w nieskończoność. Dowodzenie poprawności algorytmów metoda niezmienników Floyda - wyróŝnić newralgiczne punkty w algorytmie - określić warunki (niezmienniki), jakie muszą być spełnione w kaŝdym wyróŝnionym punkcie - udowodnić poprawność kolejnych warunków, zakładając poprawność warunków poprzedzających - własność stopu udowodnić np. metodą liczników iteracji lub metodą malejących wielkości

Przykłady sformułowania problemów algorytmicznych Sortowanie Wejście: tablica T zawierająca n elementów (a 1, a 2,..., a n ) typu porządkowego. Wyjście: tablica o tych samych elementach, ale uporządkowana niemalejąco (czyli uporządkowana permutacja ciągu wejściowego). Wyszukiwanie Wejście: posortowana, n-elementowa tablica liczbowa T oraz liczba p. Wyjście: liczba naturalna, określająca pozycję elementu p w tablicy T, bądź zero, jeŝeli element w tablicy nie występuje. Generowanie podciągu Wejście: dwie liczby całkowite m i n, gdzie m <= n. Wyjście: posortowana lista m losowych liczb całkowitych z przedziału 1...n, wśród których Ŝadna nie powtarza się dwukrotnie. Problem komiwojaŝera Wejście: n punktów (miast), odległości pomiędzy miastami (d ij i, j = 1, 2,..., n); Wyjście: trasa komiwojaŝera przez wszystkie miasta (przy czym dopuszczalna jest tylko jedna wizyta w kaŝdym mieście permutacja miast) o najmniejszej sumie odległości.

Przykład algorytmu sortującego sortowanie przez wstawianie - efektywny algorytm sortowania niewielkiej liczby elementów - działa na zasadzie porządkowania talii kart Schemat działania algorytmu: 1. utwórz zbiór elementów posortowanych i przenieś do niego dowolny element ze zbioru nieposortowanego 2. weź dowolny element ze zbioru nieposortowanego 3. wyciągnięty element porównuj z kolejnymi elementami zbioru posortowanego póki nie napotkasz elementu równego lub mniejszego, lub nie znajdziesz się na początku zbioru uporządkowanego 4. wyciągnięty element wstaw w miejsce gdzie skończyłeś porównywać 5. jeśli zbiór elementów nieuporządkowanych jest niepusty, wróć do punktu 2

Pseudokod // wejście: n-elementowa tablica T[1... n] pętla od i = 2 do n // niezmiennik: fragment T[1... i-1] jest posortowany // cel: przesunąć element T[i] w dół na właściwe miejsce pętla od j = i do 2 jeŝeli T[j] < T[j-1] zamień T[j] z T[j-1] // realizacja zamiany: tmp = T[j]; T[j] = T[j-1]; T[j-1] = tmp Analiza algorytmów Rozmiar danych wejściowych - dla sortowania: liczba elementów do posortowania (n) - mnoŝenie liczb całkowitych: całkowita liczba bitów - operacje na grafach: liczba wierzchołków Czas działania algorytmu (złoŝoność czasowa) - liczba elementarnych operacji (np. podstawienie, porównanie, prosta operacja arytmetyczna), potrzebnych do wykonania algorytmu - najczęściej jest funkcją rozmiaru danych wejściowych

Dla sortowania przez wstawianie: 1 pętla od i = 2 do n 2 pętla od j = i do 2 3 jeŝeli T[j] < T[j-1] 4 tmp = T[j] 5 T[j] = T[j-1] 6 T[j-1] = tmp 7 w przeciwnym wypadku zakończ pętlę wewnętrzną Oznaczmy przez t liczbę porównań w wierszu 3. Maksymalnie będzie ich (n-1)(n-1) (bo mamy maksymalnie n-1 wykonań pętli zewnętrznej pomnoŝone przez n-1 (w uproszczeniu; ściśle w tej implementacji algorytmu będzie ich mniej, jest to jednak sprawa drugorzędna) wykonań pętli wewnętrznej; ten przypadek wystąpi dla pechowego przypadku tablicy wejściowej posortowanej malejąco). Minimalna liczba porównań to n-1 (bo mamy n-1 wykonań pętli zewnętrznej pomnoŝone przez jedno, negatywne porównanie; ten przypadek wystąpi dla tablicy wejściowej juŝ posortowanej rosnąco wewnętrzna pętla w takim przypadku nie musi nic robić, poza jednym porównaniem). Liczba wykonań instrukcji w wierszach 4 6 jest zaleŝna od t. W skrajnym przypadku moŝe to być aŝ (n-1)(n-1) instrukcji na kaŝdy wiersz, z drugiej strony instrukcje te się mogą się w ogóle nie wykonać, w przypadku wszystkich negatywnych porównań (tablica wstępnie posortowana rosnąco). ZałóŜmy dla uproszczenia, Ŝe pojedyncze instrukcje porównania i przypisania wykonują się w tym samym czasie c. Procedura sortująca wykona się maksymalnie w czasie 4c(n-1)(n-1) (przypadek pesymistyczny dane posortowane odwrotnie; funkcja kwadratowa względem n), natomiast minimalny czas wykonania to c(n-1) (przypadek optymistyczny dane posortowane; funkcja liniowa względem n).

Przypadek średni (oczekiwany) będzie w tym przypadku zbliŝony do przypadku pesymistycznego (teŝ będzie to funkcja kwadratowa). Wymagana pamięć (złoŝoność pamięciowa) - liczba podstawowych komórek pamięci, wykorzystywanych przez algorytm - najczęściej jest funkcją rozmiaru danych wejściowych Dla sortowania przez wstawianie: wymagana pamięć wynosi n (elementy tablicy) + 1 (zmienna pomocnicza tmp) zaleŝność liniowa względem n.

Oszacowania asymptotyczne Notacja Θ (Theta) Przykład: ½ n 2-3n = Θ(n 2 ). Uzasadnienie: Szukamy stałych c 1 i c 2 oraz n 0 takich, Ŝe c 1 n 2 <= ½ n 2-3n <= c 2 n 2 dla kaŝdego n > n 0. Dzieląc przez n 2 otrzymujemy: c 1 <= ½ - 3/n <= c 2. Nierówność ta jest spełniona dla wszystkich n>6, np. gdy c 1 =1/14 i c 2 = ½. Zatem : ½ n 2-3n = Θ(n 2 ). Przykład: 6n 3 Θ(n 2 ). Uzasadnienie: ZałóŜmy, Ŝe istnieją stałe c 2 oraz n 0 takie, Ŝe 6n 3 <= c 2 n 2 dla kaŝdego n > n 0. Ale wtedy 6n <= c 2 /6 co nie moŝe być prawdą dla dowolnie duŝych n, poniewaŝ c 2 jest stałą.

Notacja Θ asymptotycznie ogranicza funkcję od góry i od dołu. Oszacowania Θ uŝywamy dla określenia pesymistycznej złoŝoności obliczeniowej algorytmów. Na przykład pesymistyczny czas wykonania sortowania przez wstawianie (czyli pesymistyczna złoŝoność obliczeniowa tego algorytmu) jest rzędu Θ(n 2 ). Intuicyjnie, składniki niŝszego rzędu mogą być pominięte, gdyŝ są mało istotne dla duŝych n. Składniki wyŝszego rzędu są wtedy dominujące. Przykład: dowolna funkcja kwadratowa jest rzędu Θ(n 2 ), tzn. an 2 + bn + c = Θ(n 2 ). d i Ogólnie, dowolny wielomian p(n) = a in = Θ(n d ), o ile a i są stałymi oraz a d > 0. i = 0 Funkcję stałą określamy jako Θ(n 0 ) lub Θ(1).

Notacja O (duŝego O) Przykład: ½ n 2-3n = O(n 2 ), ale równieŝ np. 5n +6 = O(n 2 ). Notacja O określa asymptotyczną granicę górną. Korzystamy z niej, Ŝeby oszacować funkcję z góry, z dokładnością do stałego współczynnika. MoŜna powiedzieć, Ŝe czas działania algorytmu sortowania przez wstawianie jest rzędu O(n 2 ) czyli algorytm ten nie zostanie nigdy wykonany wolniej niŝ w czasie kwadratowym (ale moŝe być wykonany szybciej np. w czasie liniowym).

Notacja Ω (Omega) Notacja Ω określa asymptotyczną granicę dolną. MoŜna powiedzieć, Ŝe czas działania algorytmu sortowania przez wstawianie jest rzędu Ω(n) czyli algorytm ten nie zostanie nigdy wykonany szybciej niŝ w czasie linowym.

Notacja o (małego o) Przykład: 2n = o(n 2 ), ale n 2 o(n 2 ). Notacja ω (małego omega) Przykład: n 2 /2= ω(n), ale n 2 /2 ω(n 2 ).

Własności oszacowań Twierdzenie. Dla kaŝdych dwóch funkcji f(n) i g(n) zachodzi zaleŝność f(n) = Θ(g(n)) wtedy i tylko wtedy, gdy f(n) = O(g(n)) i f(n) = Ω(g(n)). Przykład: Z tego, Ŝe ½ n 2-3n = Θ(n 2 ) wynika, Ŝe ½ n 2-3n = O(n 2 ) oraz ½ n 2-3n = Ω (n 2 ). Przechodniość: f(n) = Θ(g(n)) i g(n) = Θ(h(n)) implikuje f(n) = Θ(h(n)) f(n) = O(g(n)) i g(n) = O(h(n)) implikuje f(n) = O(h(n)) f(n) = Ω(g(n)) i g(n) = Ω(h(n)) implikuje f(n) = Ωh(n)) f(n) = o(g(n)) i g(n) = o(h(n)) implikuje f(n) = o(h(n)) f(n) = ω(g(n)) i g(n) = ω(h(n)) implikuje f(n) = ω(h(n)) Zwrotność: f(n) = Θ(f(n)) f(n) = O(f(n)) f(n) = Ω(f(n)) Symetria: f(n) = Θ(g(n)) wtedy i tylko wtedy, gdy g(n) = Θ(f(n)) Symetria transpozycyjna: f(n) = O(g(n)) wtedy i tylko wtedy, gdy g(n) = Ω(f(n)) f(n) = Ω(g(n)) wtedy i tylko wtedy, gdy g(n) = O(f(n))

Notacja asymptotyczna w równaniach Gdy notacja asymptotyczna pojawia się po prawej stronie równania, tak jak do tej pory (np. n = O(n 2 ) ), oznacza to przynaleŝność: n O(n 2 ). Z kolei, np. równanie: 2n 2 + 3n +1 = 2 n 2 + Θ(n) oznacza, Ŝe Θ(n) jest pewną anonimową funkcją (o pomijalnej nazwie), tzn, 2n 2 + 3n +1 = 2 n 2 + f(n), gdzie f(n) jest funkcją naleŝącą do zbioru Θ(n). W tym przypadku f(n) = 3n+1 = Θ(n). UŜycie notacji asymptotycznej pozwala więc na uproszczenie równań poprzez wyeliminowanie nieistotnych jego składników.