Algorytmy i Struktury Danych

Podobne dokumenty
Podstawy Informatyki. Sprawność algorytmów

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy i Struktury Danych.

Zaawansowane algorytmy i struktury danych

Wprowadzenie do złożoności obliczeniowej

1. Analiza algorytmów przypomnienie

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

TEORETYCZNE PODSTAWY INFORMATYKI

Zasady analizy algorytmów

Matematyczne Podstawy Informatyki

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

Algorytmy i struktury danych Matematyka III sem.

Efektywność algorytmów

Złożoność Obliczeniowa Algorytmów

Podyplomowe Studium Informatyki

Teoretyczne podstawy informatyki

Informatyka 1. Złożoność obliczeniowa

Podstawy Programowania. Złożoność obliczeniowa

Sortowanie przez wstawianie

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

Krzysztof Gniłka. Twierdzenie o rekurencji uniwersalnej

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

KARTA KURSU. Algorytmy, struktury danych i techniki programowania. Algorithms, Data Structures and Programming Techniques

INFORMATYKA SORTOWANIE DANYCH.

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

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

Teoretyczne podstawy informatyki

Wykład 2. Poprawność algorytmów

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

Zaawansowane algorytmy. Wojciech Horzelski

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

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

Algorytmy i Struktury Danych.

Wykład na Politechnice Krakowskiej w dniu 18 stycznia 2012 r. ZADAŃ I ALGORYTMÓW W OPTYMALIZACJI DYSKRETNEJ

Liczby pierwsze - wstęp

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

Podstawy Programowania

Podstawy Programowania. Złożoność obliczeniowa

Wstęp do programowania

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

ID2ZSD2 Złożone struktury danych Advanced data structures. Informatyka II stopień ogólnoakademicki stacjonarne

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Podyplomowe Studium Programowania i Systemów Baz Danych

Opis efektów kształcenia dla modułu zajęć

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

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

IZ2ZSD2 Złożone struktury danych Advanced data structures. Informatyka II stopień ogólnoakademicki niestacjonarne

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

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

Podstawy Programowania

Kompletna dokumentacja kontenera C++ vector w -

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Algorytmy i struktury danych

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

PRZEWODNIK PO PRZEDMIOCIE

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

Sortowanie - wybrane algorytmy

Algorytmy i Struktury Danych.

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

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

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

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

Projektowanie i Analiza Algorytmów

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

Algorytmy i struktury danych

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

Sortowanie przez scalanie

EGZAMIN MATURALNY 2011 INFORMATYKA

Jeszcze o algorytmach

PRZEWODNIK PO PRZEDMIOCIE

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

Algorytmy i ich poprawność

Technologie informacyjne Wykład VII-IX

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

Algorytmy i struktury danych.

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

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

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

Efektywna metoda sortowania sortowanie przez scalanie

struktury danych dla operacji słownikowych

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

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

Zaawansowane algorytmy i struktury danych

Algorytmy i Struktury Danych.

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2013/2014

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.

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej

przedmiot kierunkowy (podstawowy / kierunkowy / inny HES) obowiązkowy (obowiązkowy / nieobowiązkowy) polski semestr I

przedmiot kierunkowy (podstawowy / kierunkowy / inny HES) obowiązkowy (obowiązkowy / nieobowiązkowy) polski semestr I

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

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

KARTA MODUŁU KSZTAŁCENIA

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

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

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

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

Algorytmika i pseudoprogramowanie

Algorytmy i Struktury Danych.

Struktury Danych i Złożoność Obliczeniowa

Transkrypt:

Algorytmy i Struktury Danych

Podstawowe informacje Prowadzący: Jan Tuziemski Email: jan.tuziemski@pg.edu.pl Konsultacje: pokój 412 GB (do ustalenia 412 GB)

Podstawowe informacje literatura K. Goczyła Struktury Danych Wydawnictwo PG T. H. Cormen, C.E. Leiseron, R.L. Rivest, C. Stein Introducton to algorithms The MIT press K. Mehlhorn, P. Sanders Algorithms and data structures Springer

Podstawowe informacje zasady zaliczenia Wykład: próg zaliczenia 56%, składowa końcowa 50% 2 Egzaminy połówkowe albo egzamin końcowy Laboratoria (min 56%): próg zaliczenia 56%, składowa końcowa 50%

Orientacyjny plan wykładu 1. Wprowadzenie do struktur danych, złożoność obliczeniowa i pamięciowa, notacja asymptotyczna. 2. Defnicja rekurencji, rozwiązywanie rekurencji metodą podstawiania. 3. Metoda rekurencji uniwersalnej. 4. Tablice nieuporządkowane i uporządkowane. 5. Tablice rozproszone, funkcje haszujące, metody rozwiązywania kolizji. 6. Tablice rozproszone, metoda adresowania otwartego

Orientacyjny plan wykładu 7. Sortowanie tablic część 1. 8. Sortowanie tablic część 2. 9. Listy jedno i dwukierunkowe. Kolejki FIFO i LIFO 10. Drzewa, podstawy. 11. Binarne drzewa wyszukiwawcze 12. Cyfrowe drzewa wyszukiwawcze

Orientacyjny plan wykładu 13. Algorytmy wyszukiwania wzorca część 1. 14. Wyszukiwanie wzorca część 2. 15. Zaliczenie przedmiotu

Defnicje pojęć Algorytm (nieformalnie) Dobrze określona procedura obliczeniowa, która na wejściu przyjmuje pewną wartość (zbiór wartości) i po przetworzeniu zwraca zbiór wartości.

Defnicje pojęć Algorytm (przykład) Problem sortowania: Wejście lista nieuporządkowana (a 1, a 2,, a n ) Wyjście: lista uporządkowana (a 1, a 2,, a n ), taka że a 1 a 2 a n

Defnicje pojęć Algorytm To sposób rozwiązania pewnego dobrze określonego problemu obliczeniowego. Na podstawie problemu określone są dane wejścia/wyjścia a algorytm opisuje konkretny sposób osiągnięcia pożądanej relacji pomiędzy tymi danymi.

Defnicje pojęć Algorytm nazywamy poprawnym jeżeli dla każdego zestawu danych zwraca poprawny wynik. Algorytm niepoprawny nie zwraca wyniku dla pewnych zestawów danych lub zwraca dla nich wynik błędny (może być to użyteczne jeżeli wielkość błędu da się kontrolować -> liczby pierwsze ).

Przykłady zastosowań algorytmów 1. Human Genome Project (projekt poznania ludzkiego genomu) identyfkacja ok. 20 tys. ludzkich genów (tworzonych z 3,3 mld par zasad) 2. Znajdowanie optymalnej drogi w sieci, przeszukiwanie zasobów 3. Algorytmy szyfrujące, podpis elektroniczny.

Przykłady zastosowań algorytmów 4. Algorytmy optymalizacyjne (optymalizacja z więzami)

Defnicje pojęć Struktury danych Zbiór elementów powiązanych ze sobą określonymi relacjami. (elementy mogą być określonego typu)

Defnicje pojęć Typ określa zbiór wartości, który może przyjmować dany element. Moc typu określa liczbę różnych wartości które może przyjmować/przechowywać dany element (związane z rozmiarem pamięci). Z typem związane są operatory, które można na nim wykonywać.

Defnicje pojęć Typ Prosty -Bitowy -Bajtowy -Całkowity -Logiczny -Znakowy - Złożony -tablica -rekord -zbiór -lista -kolejka --stos - Ewentualnie: dynamiczne/statyczne

2600 lat p.n.e Zapis darów od możnowładców Adabu dla wysokiej kapłanki https://commons.wikimedia.org/wiki/file:sumerian226th2c2adab.jpg

1600 lat p.n.e Babiloński algorytm wyszukiwania dzielników liczb oraz obliczanie pierwiastka kwadratowego

Dlaczego warto się uczyć? - Dla danego problemu może nie być opracowanego rozwiązania. Wtedy: - Warto znać zasady projektowania algorytmów - Znać metody określania ich wydajność - Nie ma optymalnej struktury danych

Dlaczego warto się uczyć? Jeżeli komputery staną się nieskończenie szybkie czy warto studiować algorytmy? Tak bo: Nawet nieskończenie szybki komputer może mieć problem z działającym w nieskończoność algorytmem Zawsze będą obowiązywały pewne zasady projektowe, np. korzystanie z najprostszej z dostępnych metod

Dlaczego warto się uczyć? W przypadku rosnącej mocy obliczeniowej czas i Pamięć są wciąż zasobami, które choć coraz tańsze, nie są darmowe. Dlatego najlepiej stosować optymalne rozwiązania.

Dlaczego warto się uczyć? Algorytmy powinny być traktowane jako technologia. Materiał z http://www.palantr.com/2011/09/how-to-rock-a n-algorithms-interview/ Jest teraz tu http://westpavilion.blogspot.com/2014/01/fw-ho w-to-rock-algorithms-interview.html

Dlaczego warto się uczyć? Przykład tablica n = 10^6 elementów Komputer A: 10^10 operacji/s (złożonych) Komputer B: 10^7 operacji/s Algorytm na komputerze A: n^2 (Inserton Sort) Algorytm na komputerze B: n log n (Merge Sort) A: 10^2 s B: ok. 2 s

Jak porównywać algorytmy? Potrzebne pojęcia: Liczebność wejścia liczba elementów do przetworzenia (liczba bitów potrzebna do reprezentacji danych) Czas wykonania algorytmów: liczba podstawowych operacji do wykonania (nie zależy od sprzętu)

Jak porównywać algorytmy? Potrzebne pojęcia: Złożoność obliczeniowa algorytmu to funkcja określająca czas potrzebny do wykonania tego algorytmu dla konkretnych danych Złożoność pamięciowa algorytmu to funkcja określająca liczbę komórek pamięci potrzebną do wykonania algorytmu dla konkretnych danych (liczbę typów prostych)

Jak porównywać algorytmy? Uwaga: dla pewnych specyfcznych danych algorytm może wykonywać się bardzo szybko a dla innych bardzo wolno. Dlatego wyróżnia się: Złożoność optymistyczną dla danych sprzyjających Złożoność pesymistyczną dla danych niesprzyjających Złożoność średnią uśrednioną po wszystkich typach danych

Jak porównywać algorytmy? Potrzebne pojęcia: Rozmiar problemu wielkość danych na jakich operuje algorytm. Przykład: http://bigocheatsheet.com/

Jak porównywać algorytmy? Dokładne obliczanie złożoności obliczeniowej jak i pamięciowej może być skomplikowane. Rozwiązanie: pominięcie małych rozmiarów wejść (podejście asymptotyczne).

Notacja asymptotyczna Używana do określania złożoności algorytmów. Założenia: rozpatrujemy funkcje zdefniowane na zbiorze N = {0,1,2, }.

Notacja asymptotyczna symbol O Dla funkcji f(n) zachodzi f(n) = O(g(n)) jeżeli istnieją stałe dodatnie c,r c>0,r>0; takie że f(n) r*g(n) dla wszystkich n>c. Uwaga: O(g(n)) defniuje zbiór, ale używamy znaku = zamiast

Notacja asymptotyczna symbol Ω Dla funkcji f(n) zachodzi f(n) = Ω(g(n)) jeżeli istnieją stałe dodatnie c,r c>0,r>0; takie że f(n) r*g(n) dla wszystkich n>c. Uwaga: Ω(g(n)) defniuje zbiór, ale używamy znaku = zamiast

Notacja asymptotyczna symbol Θ Dla funkcji f(n) zachodzi f(n) = Θ(g(n)) jeżeli jednocześnie f(n) = O(g(n)) i f(n) = Ω(g(n)). Uwaga: Θ(g(n)) defniuje zbiór, ale używamy znaku = zamiast

Notacja asymptotyczna Dla dużych n zazwyczaj dominuje człon wiodący, człony niższych rzędów można pominąć.

Notacja asymptotyczna Dla funkcji f(n) zachodzi f(n) g(n) jeżeli f(n)/g(n) 1 lim n

Notacja asymptotyczna - własności Zwrotność f(n) = Θ(f(n)) Tak samo dla O i Ω

Notacja asymptotyczna - własności Symetryczność f(n) = Θ(g(n)) g(n) = Θ(f(n)) Inaczej dla O i Ω

Notacja asymptotyczna - własności f(n) = O(g(n)) g(n) =? (f(n))

Notacja asymptotyczna - własności f(n) = O(g(n)) g(n) = Ω (f(n))

Notacja asymptotyczna - intuicja f(n) = O(g(n)) f(n) = Ω(g(n)) f(n) = Θ(g(n)) a b a b a = b Ale uwaga! Dla liczb (rzeczywistych) mamy a < b albo (alternatywa wykluczająca) a=b albo a> b Dla funkcji niekoniecznie np. f(n) = n, g(n) n^(1+ sin(n))

Klasyfkacja funkcji pod względem tępa wzrostu Θ(1) Θ(log n) Θ(n^r) gdzie 0<r<1 Θ(n) Θ(nlogn) Θ(n^r) 1<r<2 Θ(n^k) Θ(r^n) r>1 stała logarytmiczna subliniowa liniowa liniowo-logarytmiczna subkwadratowa wielomianowa wykładnicza

Podsumowanie 1. Warto się uczyć 2. Czas wykonania algorytmu to liczba podstawowych operacji dla zadanej wielkości danych wejściowych n Przy pomocy notacji asymptotycznej O, Ω,Θ można opisać własności funkcji.