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

Podobne dokumenty
Zaawansowane algorytmy i struktury danych

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie.

Analiza algorytmów zadania podstawowe

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

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.

Katarzyna Bereźnicka Zastosowanie arkusza kalkulacyjnego w zadaniach matematycznych. Opiekun stypendystki: mgr Jerzy Mil

I. Podstawy języka C powtórka

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

EGZAMIN MATURALNY Z INFORMATYKI

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

Def. Kod jednoznacznie definiowalny Def. Kod przedrostkowy Def. Kod optymalny. Przykłady kodów. Kody optymalne

Podstawy Informatyki Maszyna Turinga

Program telewizyjny emisji filmów w 4 stacjach telewizyjnych: Telewizja / stacja Film i godziny jego emisji Czas trwania emisji filmu

Programowanie dynamiczne

Zaawansowane algorytmy i struktury danych

Wstęp do programowania

Efektywność Procedur Obliczeniowych. wykład 5

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

EGZAMIN MATURALNY Z INFORMATYKI

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

Algorytmy i struktury danych. Wykład 4

Podstawy Informatyki. Metalurgia, I rok. Rekurencja. skomplikowane zadanie. Rekurencja

Podstawy Informatyki. Metalurgia, I rok. Wykład 5 Rekurencja

Zasady analizy 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 )

Laboratorium nr 1. i 2.

Matematyczne Podstawy Informatyki

Strategia "dziel i zwyciężaj"

Programowanie dynamiczne cz. 2

INFORMATYKA SORTOWANIE DANYCH.

Sortowanie. Bartman Jacek Algorytmy i struktury

Projektowanie i analiza algorytmów

Analiza algorytmów zadania podstawowe

Podstawy Informatyki. Sprawność algorytmów

EGZAMIN MATURALNY Z INFORMATYKI 17 MAJA 2016 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 90 minut

Turing i jego maszyny

Przykładowe zadania z teorii liczb

Algorytm. a programowanie -

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

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

Programowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2

Matematyka dyskretna. Andrzej Łachwa, UJ, A/15

do instrukcja while (wyrażenie);

Excel zadania sprawdzające 263

Sortowanie. LABORKA Piotr Ciskowski

1. Analiza algorytmów przypomnienie

Algorytmy decyzyjne będące alternatywą dla sieci neuronowych

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

ALGORYTMY I STRUKTURY DANYCH

Algorytmika i pseudoprogramowanie

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

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH.

Algorytmy sztucznej inteligencji

Optymalizacja systemów

Wstęp do programowania

Imię, nazwisko, nr indeksu

PROBLEMY NIEROZSTRZYGALNE

2.1. Duszek w labiryncie

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

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

Optymalizacja systemów

Algorytmy i Struktury Danych

INFORMATYKA POZIOM ROZSZERZONY

INFORMATYKA POZIOM ROZSZERZONY

Podstawy Informatyki. Inżynieria Ciepła, I rok. Iteracja warunkowadopóki(while) Blok instrukcji. Pascal: begin instrukcja1; C: { end;

Wprowadzenie do złożoności obliczeniowej

Maszyna Turinga języki

Propozycje rozwiązań zadań otwartych z próbnej matury rozszerzonej przygotowanej przez OPERON.

Obliczenia inspirowane Naturą

Języki formalne i automaty Ćwiczenia 4

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

Algorytmy i struktury danych

Kolumna Zeszyt Komórka Wiersz Tabela arkusza Zakładki arkuszy

Jeszcze o algorytmach

Metoda Karnaugh. B A BC A

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

Algorytmy sortujące i wyszukujące

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

UKŁADY RÓWNAŃ LINIOWYCH

Obliczenia inspirowane Naturą

Wydział Matematyki I Informatyki ul. Słoneczna Olsztyn

WHILE (wyrażenie) instrukcja;

EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I

Projekty zaliczeniowe Podstawy Programowania 2012/2013

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Informatyka 1. Złożoność obliczeniowa

Hierarchia Chomsky ego Maszyna Turinga

Programowanie i techniki algorytmiczne

Temat: Arkusze kalkulacyjne. Program Microsoft Office Excel. Podstawy

WHILE (wyrażenie) instrukcja;

Sortowanie zewnętrzne

Języki formalne i automaty Ćwiczenia 9

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

Proste programy w C++ zadania

Języki formalne i automaty Ćwiczenia 2

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

Analityczne modelowanie systemów równoległych

Transkrypt:

Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze n elementów. Chcemy przesunąć jej zawartość o k pozycji w lewo (n/2<k<n). Elementy, które zostaną wysunięte z lewej, wsuwamy cyklicznie z prawej strony tablicy. Czy można dla tego programu opracować algorytm o złożoności O(n)? 2. Dla problemu wyznaczania n-tego wyrazu ciągu Fibonacciego można sformułować trzy algorytmy opisane następującymi oszacowaniami asymptotycznymi: (n c ), (n c ) i o(n). Sformułować te trzy algorytmy, podać dokładne klasy złożoności do jakich należą. Które z tych klas dotyczą wersji iteracyjnych, a która wersji rekurencyjnej algorytmu. Dla n=20 podać różnice w złożoności obliczeniowej poszczególnych wersji algorytmu. 3. Wyznaczyć złożoność obliczeniową rekurencyjnego algorytmu rozwiązującego problem wież Hanoi. 4. Podać pesymistyczną złożoność obliczeniową algorytmu Euklidesa obliczającego największy wspólny dzielnik dwu liczb a i b. Podaną 5. Klasyczny algorytm mnożenia bardzo dużych liczb ma kwadratową złożoność obliczeniową (n 2 ). Zakładamy, że obie mnożone liczby zajmują w pamięci n bitów. Podać algorytm, dla którego prawdziwe jest oszacowanie asymptotyczne o(n 2 ). Wyliczyć jego złożoność obliczeniową. 6. Obliczyć złożoność pesymistyczną i oczekiwaną algorytmu: a) wyszukiwania liniowego (sekwencyjnego) elementu w nieposortowanym ciągu liczb b) wyszukiwania binarnego w posortowanym ciągu liczb 7. Obliczyć złożoność pesymistyczną i oczekiwaną dla algorytmu sprawdzającego czy w ciągu n liczb całkowitych jakaś z liczb występuje więcej niż jeden raz. 8. Obliczyć złożoność pesymistyczną i oczekiwaną dla algorytmu sprawdzającego czy w ciągu n liczb całkowitych większość stanowią liczby parzyste. Kolejne liczby w ciągu należy sprawdzać aż do osiągnięcia pozycji w tablicy po odczytaniu której jesteśmy pewni, czy więcej jest liczb parzystych czy nie. Otrzymaną zależność zweryfikować eksperymentalnie. 9. Wyznaczyć złożoność pesymistyczną i oczekiwaną dla algorytmu sortowania przez proste wstawianie. Podać kod programu zrealizowany w języku C. Rozważyć dwa warianty zadania: w pierwszym jako instrukcję podstawową przyjąć instrukcję porównania, w drugim instrukcję podstawienia. 10. Wyznaczyć złożoność pesymistyczną i oczekiwaną dla algorytmu sortowania przez proste wybieranie. Podać kod programu zrealizowany w języku C. Jako instrukcję podstawową 1

przyjąć instrukcję porównania oraz w drugim wariancie zadania instrukcję podstawienia. 11. Wyznaczyć złożoność pesymistyczną, oczekiwaną i optymistyczną dla algorytmu sortowania przez proste wybieranie. Podać kod programu zrealizowany w języku C. 12. Wyznaczyć złożoność obliczeniową algorytmu Kruskala wyznaczającego minimalne drzewo rozpinające. 13. Wyznaczyć złożoność obliczeniową algorytmu Prima wyznaczającego minimalne drzewo rozpinające. 14. Podać złożoność obliczeniową algorytmu CYK sprawdzającego przynależność słowa do podanej gramatyki bezkontekstowej. 15. Dana jest dwuwymiarowa tablica o n wierszach i n kolumnach zawierająca wartości binarne 1 lub 0. Wartość 0 interpretujemy jako czarny piksel, a wartość 1 jako biały. Należy podać ilość kwadratowych obszarów (o takiej samej ilości kolumn i wierszy), w których znajduje się tyle samo pikseli czarnych, co białych. Przykładowo, znaleziony obszar o rozmiarze 2x2 powinien mieć 2 komórki zawierające piksele białe i dwie zawierające piksele czarne. Natomiast poprawnie znaleziony obszar o rozmiarze 10x10 powinien mieć 50 pikseli białych i tyle samo czarnych. Program powinien podawać dla danej tablicy, ilość różnych kwadratowych obszarów o dowolnym rozmiarze, dla których stwierdzono taką samą ilość komórek zawierających liczbę 1, co komórek zawierających liczbę 0. Wyznaczyć złożoność obliczeniową dwóch wersji programu: nie korzystającej z tablicy sum częściowych korzystającej z utworzonej wcześniej tablicy sum częściowych Tablica sum częściowych przechowuje na pozycji (k,l) sumę elementów analizowanej tablicy zawartych w komórkach (i,j) dla których i n, j m (w komórkach położonych na lewo i u góry komórki o adresie (k,l)). Dlatego aby wyznaczyć sumę S elementów w obszarze prostokątnym tablicy wystarczy odwołać się do czterech wartości z tablicy sum częściowych zgodnie ze wzorem: S=D+A-B-C. 16. Dana jest plansza o rozmiarze nxn składająca się z n 2 kwadratowych pól. Chcemy dowiedzieć się ile istnieje różnych tras o zadanej długości zaczynających się na środkowym polu planszy i kończących na innym (być może tym samym). Długość trasy d oznacza iż, przechodząc od pola początkowego do pola końcowego wykonujemy d ruchów. Jeden ruch oznacza przesunięcie się do sąsiedniego pola w jednym z czterech kierunków: w prawo, w lewo, w górę lub dół. Rozmiar planszy musi spełniać zależność n>d/2. Wyznaczyć złożoność obliczeniową dwóch wersji programu: stosując rekurencyjne przeszukiwanie kolejnych tras wykorzystując metodę programowania dynamicznego określającą liczbę tras wiodących do danego pola 2

W rozwiązaniu rekurencyjnym, w kolejnych wywołaniach funkcji rekurencyjnej odwiedzamy po kolei sąsiednie pola. We wszystkich wywołaniach rekurencyjnych po osiągnięciu d kroków sprawdzamy, czy osiągnęliśmy pole końcowe. Jeżeli tak, to zwiększamy licznik tras. W metodzie programowania dynamicznego tworzymy tablicę przechowującą liczbę możliwych tras. W pierwszym kroku dla czterech pól sąsiadujących z polem początkowym ustawiamy wartości 1 oznaczające cztery możliwe trasy o długości 1. W kolejnych krokach do każdego pola na planszy wpisujemy wartość będącą sumą wartości pól sąsiadujących z nim w pionie i w poziomie, co oznacza zsumowanie wszystkich możliwych tras wiodących do tego pola z czterech możliwych kierunków. Na koniec po d krokach w polu końcowym znajdzie się liczba określająca ilość wszystkich tras o długości d zaczynających się w polu początkowym i kończących się w tym polu. 17. Przeprowadzić eksperymenty obliczeniowe dla sortowania metodą Shella z różnymi propozycjami ciągów odstępów. Dla różnych ciągów odstępów (m. in. Pratt, Knuth, Sedgewick) zweryfikować, poprzez eksperymenty numeryczne, rzędy złożoności obliczeniowej podane na stronie Wikipedii. 3

Maszyna Turinga złożoność obliczeniowa W poniższych zadaniach podać realizacje algorytmów w postaci Maszyny Turinga oraz określić złożoności obliczeniowe dokładne i asymptotyczne. Instrukcją podstawową jest odczytanie przez głowicę symbolu z taśmy. 1. Dany jest język L={a n b n ; n N} a) Podać Maszynę Turinga rozstrzygającą przynależność słowa w do języka L. Określić złożoność obliczeniową realizowanego algorytmu. b) Podać ulepszoną wersję MT. Przeszukiwanie liniowe taśmy zastąpić przeszukiwaniem logarytmicznym; określić złożoność obliczeniową c) Podać dwutaśmową MT rozstrzygającą przynależność słowa w do języka L. Jak zmieniła się złożoność obliczeniowa. d) Podać algorytm sprawdzający przynależność w do L zrealizowany w języku C. Określić złożoność obliczeniową, obierając za instrukcję podstawową instrukcję podstawienia. Dla klasycznych Maszyn Turinga przetestować ich działanie oraz złożoność obliczeniową na symulatorze. 2. Podać Maszynę Turinga przenoszącą łańcuch symboli wejściowych ( ={0,1}) w inne miejsce taśmy. Miejsce źródłowe i docelowe ograniczone są z lewej strony znakiem *. Maszyna rozpoczyna działanie z głowicą czytającą wskazując na * rozpoczynającą ciąg źródłowy. Ciąg kończy się znakiem pustym B lub * określającą miejsce docelowe przenoszonego ciągu. Wyznaczyć złożoność obliczeniową podanej MT. B * 0 1 1 0 1 1 1 0 B B B B * B B B B B B B B B B * B B B B B B B B B B B B * 0 1 1 0 1 1 1 0 B 3. Zdefiniować Maszynę Turinga generującą na taśmie tyle symboli 1 ile wynosi a) suma b) iloczyn ilości wystąpień dwóch ciągów symboli 0. Na początku na taśmie znajduje się ciąg *0 n *0 m *, a po wykonaniu algorytmu ciąg *1 n+m * w przypadku sumy, a w przypadku iloczynu ciąg *1 n m *. Określić złożoność obliczeniową algorytmu MT. Poniższy rysunek przedstawia przykładową taśmę MT przed i po wykonaniu algorytmu dla przypadku iloczynu. B * 0 0 0 * 0 0 0 0 0 * B B B B B B B B B B B B 4

B * 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 * B B B B B B 4. Zdefiniować Maszynę Turinga, która dla ciągu wejściowego składającego się z symboli a, b i c podaje, których symboli jest najwięcej. Jaka jest złożoność obliczeniowa realizacji tej MT? 5. Podać Maszynę Turinga, która dla ciągu wejściowego składającego się z symboli a i b przenosi te symbole tak, aby na taśmie najpierw umieszczone były wszystkie symbole a, a po nich wszystkie symbole b. Wyznaczyć złożoność obliczeniową tej MT. 6. Podać Maszynę Turinga umieszczającą na taśmie ciąg składający się z coraz większej ilości symboli 1 rozdzielanych symbolem 0, czyli ciąg: 10110111011110111110111111. Maksymalna liczba symboli 1 określona jest przez liczbę znajdującą się na taśmie. Wyznaczyć złożoność obliczeniową podanej MT. B * 7 * B B B B B B B B B B B B B B B B B B B B B * 7 * 1 0 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 * B 5