Zaawansowane algorytmy i struktury danych

Podobne dokumenty
TEORETYCZNE PODSTAWY INFORMATYKI

Teoretyczne podstawy informatyki

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

Podstawy Informatyki. Sprawność algorytmów

Algorytmy i Struktury Danych

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,

Schemat programowania dynamicznego (ang. dynamic programming)

Wprowadzenie do algorytmów / Thomas H. Cormen [et al.]. - wyd. 7. Warszawa, Spis treści. Wprowadzenie 2

Projektowanie i analiza algorytmów

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

Zaawansowane algorytmy i struktury danych

Algorytmy i Struktury Danych

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

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

INFORMATYKA SORTOWANIE DANYCH.

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Wstęp do programowania

Analiza algorytmów zadania podstawowe

Algorytmy i Struktury Danych.

Efektywność algorytmów

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

1. Analiza algorytmów przypomnienie

Struktury Danych i Złożoność Obliczeniowa

Algorytmy i Struktury Danych

Informatyka 1. Złożoność obliczeniowa

Programowanie dynamiczne i algorytmy zachłanne

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Strategia "dziel i zwyciężaj"

Wstęp do programowania

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

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

Zasady analizy algorytmów

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

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

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

Wykład 3. Metoda dziel i zwyciężaj

Efektywna metoda sortowania sortowanie przez scalanie

Algorytmika i pseudoprogramowanie

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

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

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

Programowanie dynamiczne cz. 2

Matematyczne Podstawy Informatyki

Wprowadzenie do złożoności obliczeniowej

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4

Rozdział 4. Algorytmy sortowania 73 Rozdział 5. Typy i struktury danych 89 Rozdział 6. Derekursywacja i optymalizacja algorytmów 147

Sortowanie - wybrane algorytmy

Roman Mocek Zabrze Opracowanie zbiorcze ze źródeł Scholaris i CKE

Liczby pierwsze - wstęp

Podstawy Programowania. Złożoność obliczeniowa

Jeszcze o algorytmach

Efektywność Procedur Obliczeniowych. wykład 5

Technologie informacyjne Wykład VII-IX

Wymagania edukacyjne i sposoby sprawdzania edukacyjnych osiągnięć uczniów z informatyki - klasy II zakres rozszerzony

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

Programowanie w VB Proste algorytmy sortowania

Algorytmika w bioinformatyce

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

Algorytmika w bioinformatyce

O rekurencji i nie tylko

Wstęp do programowania

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

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

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

Metody numeryczne w przykładach

Algorytmy i Struktury Danych.

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

Sortowanie przez scalanie

TEORETYCZNE PODSTAWY INFORMATYKI

Podstawy Programowania

Podstawy Programowania. Złożoność obliczeniowa

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

Analiza algorytmów zadania podstawowe

Algorytmy i Struktury Danych, 2. ćwiczenia

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

Rekurencja. Matematyka dyskretna

Okręgowa Komisja Egzaminacyjna w Krakowie 1

Szczegółowy program kursów szkoły programowania Halpress

5. Podstawowe algorytmy i ich cechy.

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

KARTA MODUŁU KSZTAŁCENIA

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

Wykład 2. Poprawność algorytmów

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

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 )

WYMAGANIA EGZAMINACYJNE Egzamin maturalny z INFORMATYKI

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

Algorytmy i struktury danych.

TEORETYCZNE PODSTAWY INFORMATYKI

Matematyka dyskretna dla informatyków

Podyplomowe Studium Informatyki

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

Kurs MATURA Z INFORMATYKI

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).

PROBLEMY NIEROZSTRZYGALNE

Transkrypt:

Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań teoretycznych z egzaminów. Strona 1 z 12

Pytania teoretyczne z egzaminu pisemnego z 25 czerwca 2014 (studia dzienne) 1. Wady i zalety programowania dynamicznego. 2. Podaj dwa przykłady algorytmów wyszukiwania wzorca w tekście i podaj ich złożoność. 3. Przykład algorytmu działającego w czasie. 4. Gdzie znajduje się granica między problemami łatwo rozwiązywalnymi i trudno rozwiązywalnymi (chodzi o złożoności). 5. Podaj rząd wielkości złożoności obliczeniowej algorytmu mnożącego wielkie liczby w oparciu o metodę dziel i zwyciężaj. Pytania teoretyczne z egzaminu pisemnego z 15 oraz 27 lutego 2015 (studia zaoczne) 1. Wymień dwa algorytmy wyszukiwania wzorca w tekście i podaj ich złożoności czasowe. 2. Podaj wzór na średnią złożoność obliczeniową algorytmu. 3. Podaj, gdzie znajduje się (w zakresie klas złożoności) granica pomiędzy problemami łatwo rozwiązalnymi, a problemami trudno rozwiązywalnymi. 4. Podaj po jednym przykładzie algorytmu działającego w czasie oraz. 5. Podaj rząd wielkości złożoności obliczeniowej algorytmu mnożącego wielkie liczby w oparciu o strategię "dziel i zwyciężaj". Pytania teoretyczne z egzaminu ustnego z 27 stycznia 2015 (jest to "dopytka" osób, które powtarzają ten przedmiot) 1. Podać dwie metody rozwiązywania równań rekurencyjnych. 2. Której notacji używa się do opisywania złożoności pesymistycznych. 3. Zdefiniować notacje, powiedzieć dlaczego jest kilka, podać różnice pomiędzy nimi / kiedy się je stosuje (pytanie to jest rozwinięciem pytania nr 2). Pytania teoretyczne z egzaminu ustnego z 30 stycznia 2015 (jest to "dopytka" osób, które powtarzają ten przedmiot) 1. Podać twierdzenie o rekurencji uniwersalnej. 2. Do jakiego typu równań stosuje się twierdzenie o rekurencji uniwersalnej. 3. Rodzaje równań rekurencyjnych. 4. Jaka jest złożoność najlepszych algorytmów sortujących. 5. Co sprawia, że QuickSort jest taki szybki. 6. Inne pytania odnośnie algorytmów sortujących (niestety nie pamiętam ich już ). Strona 2 z 12

Jak widać, niektóre pytania się powtarzają, także w opracowaniu będę podawał treść pytania i odpowiedź na nie. Niektóre pytania połączyłem, a niektóre rozdzieliłem aby nie zaciemniać, a także dostosowałem kolejność do tematyki. Gdzieniegdzie dodałem też więcej przykładów, niż było to wymagane. Pytania z 30 stycznia, poza jednym, nie są opracowane. Strona 3 z 12

1. Wady i zalety programowania dynamicznego Wady Istnieje potrzeba rekurencyjnego sformułowania problemu. Należy dowieść własności optymalnej podstruktury. Wymagana jest pamięć o wymiarach zależnych od danych wejściowych (np. rozmiaru problemu). Istnieją ograniczenia zastosowań algorytmów programowania dynamicznego związane z wielkością liczb występujących w przetwarzanych problemach. Zalety Problemy o strukturze rekurencyjnej pod problemów są tą metodą przetwarzane w czasie wielomianowym eliminacja wielokrotnego rozwiązywania tych samych pod problemów. Rozwiązywane są wszystkie różne pod problemy danego problemu, a wyniki przechowywane w tablicy o rozmiarze wielomianowym (najczęściej lub Po rozwiązaniu wszystkich pod problemów i zbudowaniu tablicy z ich rozwiązaniami czas rozwiązywania problemu jest zwykle liniowy, np.. Istnieje możliwość wyznaczenia dokładnego rozwiązania problemu optymalizacyjnego, który czasami nie posiada algorytmu wielomianowego (np. problem plecakowy). Strona 4 z 12

2. Podaj dwa przykłady algorytmów wyszukiwania wzorca w tekście i podaj ich złożoność. m - długość wzorca n - długość tekstu 1. Algorytm Knutha-Morrisa-Pratta Przetwarzanie wstępne: Wyszukiwanie: 2. Algorytm Karpa-Rabina: Wyszukiwanie: 3. Algorytm naiwny (brute force) Wyszukiwanie: 3. Przykład algorytmu działającego w czasie: a) Wybór elementu z tablicy. Wstawianie elementu do listy. Odkładanie elementu na stos / pobieranie elementu ze stosu. Dodawania/usuwanie elementu do/z kolejki. Przejście do następnego elementu listy. b) Przeszukiwanie liniowe. Przeszukiwanie listy nieuporządkowanej. Porównanie dwóch łańcuchów. Sprawdzanie palindromu. Przejście przez tablicę. Przejście przez listę. Strona 5 z 12

c) Przeszukiwanie binarne. Znajdowanie największej/najmniejszej liczby w drzewie przeszukiwań binarnych. Obliczanie liczb Fibonacciego. d) Sortowanie przez kopcowanie. Sortowanie przez scalanie. Sortowanie biblioteczne. Quick Sort. e) Sortowanie bąbelkowe. Sortowanie przez wstawianie. Sortowanie przez wybór. Przejście przez tablicę dwuwymiarową. f) Rekurencyjny algorytm dla wież Hanoi. Generowanie wszystkich podzbiorów zbioru n-elementowego. Klasyczne rekurencyjne obliczanie liczb Fibonacciego. Znalezienie klucza symetrycznego algorytmu szyfrującego metodą brute force. 4. Podaj rząd wielkości złożoności obliczeniowej algorytmu mnożącego wielkie liczby w oparciu o metodę dziel i zwyciężaj. UWAGA: Theta, a nie O! Algorytm Karacuby (Karatsuby): Strona 6 z 12

5. Podaj, gdzie znajduje się (w zakresie klas złożoności) granica pomiędzy problemami łatwo rozwiązalnymi, a problemami trudno rozwiązywalnymi. Granica znajduje się pomiędzy złożonościami: wielomianową, a wykładniczą Złożoność wielomianowa jest największą złożonością dla problemów łatwo rozwiązywanych. Złożoność wykładnicza jest najmniejszą złożonością dla problemów trudno rozwiązywalnych. 6. Podać dwie metody rozwiązywania równań rekurencyjnych. 1. Metoda podstawiania Polega na odgadnięciu postaci rozwiązania, a następnie wykazaniu przez indukcję, że jest ono poprawne. Trzeba też znaleźć odpowiednie stałe. Bardzo skuteczna, jednak stosowana tylko w przypadkach, kiedy łatwo jest przewidzieć rozwiązania. 2. Metoda iteracyjna Polega na rozwijaniu (iterowaniu) rekurencji i wyrażeniu jej jako sumy składników zależnych tylko od n warunków brzegowych. Następnie mogą być użyte techniki sumowania do oszacowania rozwiązania. Metoda ta jest zazwyczaj związana dużą ilością przekształceń algebraicznych, przez co zachowanie prostoty nie jest łatwe. 3. Metoda uniwersalna Strona 7 z 12

7. Której notacji używa się do opisywania złożoności pesymistycznych. Zdefiniować notacje, powiedzieć dlaczego jest kilka, podać różnice pomiędzy nimi / kiedy się je stosuje. Rząd wielkości służy do opisu czasu działania algorytmu. Istnieją trzy notacje służące do tego celu. Niech a) Notacja O (omikron) Jest to ograniczenie funkcji od góry (asymptotyczna granica górna). Służy do szacowania czasu działania algorytmu w przypadku pesymistycznym. Gdy mówimy, że pewna funkcja jest rzędu ( ), to oznacza, że: Istnieje taki argument od którego począwszy: dla każdego argumentu wartości funkcji są nie większe od wartości funkcji z dokładnością do stałej Formalnie: ( ) Obrazowo: Na prawo od argumentu funkcja znajduje się pod funkcją, czyli jest ograniczona przez nią z góry, Notacja ( ) pozwala nam oszacować zachowanie się złożoności obliczeniowej gdy Strona 8 z 12

b) Notacja (omega) Jest to ograniczenie funkcji od dołu (asymptotyczna granica dolna). Służy do szacowania czasu działania algorytmu w najlepszym przypadku. Gdy mówimy, że pewna funkcja jest rzędu ( ), to oznacza, że: Istnieje taki argument od którego począwszy: dla każdego argumentu wartości funkcji są nie mniejsze od wartości funkcji z dokładnością do stałej Formalnie: ( ) Obrazowo: Na prawo od argumentu funkcja znajduje się nad funkcją, czyli jest ograniczona przez nią z dołu. Strona 9 z 12

c) Notacja (theta) Jest to ograniczenie funkcji zarówno od góry, jak i od dołu (asymptotyczne oszacowanie dokładne). Służy do szacowania czasu działania algorytmu w przypadku uśrednionym. Gdy mówimy, że pewna funkcja jest rzędu, to oznacza, że: Istnieje taki argument od którego począwszy: dla każdego argumentu wartości funkcji są nie większe od wartości funkcji z dokładnością do stałej wartości funkcji są nie mniejsze od wartości funkcji z dokładnością do stałej Formalnie: ( ) Obrazowo: Na prawo od argumentu funkcja znajduje się: pod funkcją - czyli jest ograniczona przez nią z góry nad funkcją - czyli jest ograniczona przez nią z dołu Można powiedzieć, że, gdy jest równocześnie rzędu ( ) i ( ) Strona 10 z 12

Przykład Wyznaczyliśmy oczekiwaną złożoność obliczeniową pewnego algorytmu i otrzymaliśmy następujący wzór: Gdy czynnik staje się coraz mniej znaczący w stosunku do czynnika. Stąd wnioskujemy, że jest to algorytm o złożoności Udowodnienie tego polega na znalezieniu: argumentu stałej dla których zachodzi: gdzie W tym przypadku wystarczy przyjąć: Mamy: dla Podany algorytm ma rząd złożoności obliczeniowej równy 1600 1400 1200 1000 800 f=n^2+3n g=4*n^2 600 400 200 0 0 5 10 15 20 Strona 11 z 12

8. Podaj wzór na średnią złożoność obliczeniową algorytmu. Niech: - algorytm rozwiązujący problem. - zbiór danych rozmiaru dla problemu. - pewne dane. - prawdopodobieństwo wystąpienia danych. - funkcja określająca koszt (liczbę operacji dominujących) algorytmu dla danych. - funkcja (supremum) określająca najmniejsze z ograniczeń górnych funkcji f Wzór na średnią (oczekiwaną) złożoność obliczeniową: Wzór na pesymistyczną złożoność obliczeniową: ( ) 9. Jaka jest złożoność najlepszych algorytmów sortujących. 10. Co sprawia, że QuickSort jest taki szybki. Nie pamiętam już, czy była mowa właśnie o QuickSort, w każdym razie chodziło o to, że algorytm porównuje klucze, przez co jest taki szybki. W przypadku braku kluczy byłby wolniejszy. Strona 12 z 12