Analiza algorytmów zadania podstawowe

Podobne dokumenty
Analiza algorytmów zadania podstawowe

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Algorytmy i Struktury Danych, 2. ćwiczenia

Algorytmy i Struktury Danych.

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

Sortowanie przez scalanie

Informatyka A. Algorytmy

Zaawansowane algorytmy i struktury danych

Programowanie w VB Proste algorytmy sortowania

Strategia "dziel i zwyciężaj"

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

Laboratorium nr 7 Sortowanie

Algorytmy i Struktury Danych.

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

Zaawansowane algorytmy i struktury danych

Technologie informacyjne Wykład VII-IX

Sortowanie przez wstawianie

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Matematyczne Podstawy Informatyki

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

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

Sortowanie - wybrane algorytmy

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

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

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

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

Algorytmy i Struktury Danych, 2. ćwiczenia

Algorytmy i Struktury Danych

Laboratoria nr 1. Sortowanie

Algorytmy sortujące i wyszukujące

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 )

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

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

Wykład 6. Wyszukiwanie wzorca w tekście

Wstęp do programowania

Algorytmy sortujące. Sortowanie bąbelkowe

Programowanie Proceduralne

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

Wstęp do programowania

1.1. Uzupełnij poniższą tabelę: i wynik(i)

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

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

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

Problemy porządkowe zadania

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

Sortowanie. LABORKA Piotr Ciskowski

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Algorytmy w teorii liczb

Laboratoria nr 1. Sortowanie

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

Rekurencja. Przygotowała: Agnieszka Reiter

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

Indukcja matematyczna

TEORETYCZNE PODSTAWY INFORMATYKI

ALGORYTMY I STRUKTURY DANYCH

1. Analiza algorytmów przypomnienie

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

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

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

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

Struktury Danych i Złożoność Obliczeniowa

Podstawy Informatyki. Sprawność algorytmów

Technologie Informatyczne Wykład VII

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

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

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 9 Rekurencja

Techniki konstruowania algorytmów. Metoda dziel i zwyciężaj

Rekurencja (rekursja)

Luty 2001 Algorytmy (4) 2000/2001

Algorytm selekcji Hoare a. Łukasz Miemus

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

INFORMATYKA SORTOWANIE DANYCH.

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

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

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

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

Zadanie 1. Zadanie 2. Zadanie 3. Zadanie 4. Zadanie 5. Zadanie 6. Zadania przykładowe do pierwszego kolokwium z AA

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

Sortowanie bąbelkowe

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Złożoność obliczeniowa i pamięciowa. Spis treści. Złożoność obliczeniowa -- założenia

ZADANIE 1. Ważenie (14 pkt)

Sortowanie w czasie liniowym

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Temat 7. Najlżejsze i najcięższe algorytmy sortowania

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

Wykład 2. Poprawność algorytmów

5. Podstawowe algorytmy i ich cechy.

Laboratorium nr 1. i 2.

Algorytmy i struktury danych. Wykład 4

Drzewa poszukiwań binarnych

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

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

Porządek symetryczny: right(x)

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

Transkrypt:

Analiza algorytmów zadania podstawowe 15 stycznia 2019 Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r P Jaka wartość zostanie zwrócona przez powyższą funkcję? Wyraź odpowiedź jako funkcję zmiennej n. Zadanie 2 Poniższy algorytm wyznacza yz, gdzie y, z N. Mnożenie Mnóż(y, z) 1 x 0 2 while z > 0 3 do if z mod 2 = 1 4 then x x + y 5 y 2 y 6 z z/2 7 return x P Określ ile razy zostanie wykonane dodawanie (instrukcja w wierszu 4) w przypadku pesymistycznym. Zadanie 3 Poniższy algorytm wyznacza y z, gdzie y R, z N. Potęgowanie powolne Potęga(y, z) 1 x 1 2 while z > 0 3 do x x y 4 z z 1 5 return x P Określ ile razy zostanie wykonane mnożenie (instrukcja w wierszu 3) w przypadku pesymistycznym. 1

Zadanie 4 Poniższy algorytm wyznacza y z, gdzie y R, z N. Potęgowanie szybkie Potęga(y, z) 1 x 1 2 while z > 0 3 do if odd(z) 4 then x x y 5 z z/2 6 y y 2 7 return x P Określ ile razy zostanie wykonane mnożenie (instrukcja w wierszu 4) w przypadku pesymistycznym. Zadanie 5 Dzielenie Poniższy algorytm wyznacza q, r N takie, że y = qz + r oraz r < z, gdzie y, z N. Dziel(y, z) 1 r y 2 q 0 3 w z 4 while w y 5 do w 2w 6 while w > z 7 do q 2q 8 w w/2 9 if w r 10 then r r w 11 q q + 1 12 return (q, r) P Określ ile razy zostanie wykonane odejmowanie (instrukcja w wierszu 10) w przypadku pesymistycznym. Zadanie 6 Schemat Hornera Poniższy algorytm wyznacza wartość wielomianu a n x n +a n 1 x n 1 + +a 1 x+a 0 w punkcie x. Znaczy to, że zwracana jest wartość n i=1 A[i] x i, zakładając, że w tablicy A[0..n] przechowywane są współczynniki a i = A[i] dla wszystkich 0 i n. Nazwa algorytmu pochodzi od nazwiska jego autora Williama G. Hornera. Horner(A, n, x) 1 v 0 2 for i n downto 0 3 do v A[i] + v x 4 return v P Jaka jest jego złożoność obliczeniowa? 2

Zadanie 7 Poniższy algorytm wyznacza n!, gdzie n N. Silnia Silnia(n) 1 x 1 2 while n > 1 3 do x x n 4 n n 1 5 return x P Określ ile razy zostanie wykonane mnożenie (instrukcja w wierszu 3). Zadanie 8 Maksimum Załóżmy, że w tablicy A[1..n] rozmieszczono n różnych liczb w sposób losowy. Poniższy algorytm znajduje największą z nich. Max(A, n) 1 m A[1] 2 for i 2 to n 3 do if A[i] > m 4 then m A[i] 5 return m P Określ ile razy zostaną wykonane instrukcje przypisania (instrukcja w wierszu 1 i instrukcja w wierszu 4) w przypadku optymistycznym, pesymistycznym i średnim. P Dana jest tablica A[1..n] zawierająca n liczb. Zaprojektuj algorytm sprawdzający, czy w tablicy A są dwie liczby dające w sumie wartość x, a następnie określ jego złożoność obliczeniową. Zadanie 9 Para elementów Zadanie 10 Poniższy algorytm sortuje elementy tablicy A[1..n]. Sortowanie bąbelkowe Bubble-Sort(A, n) 1 for i 1 to n 1 2 do for j 1 to n i 3 do if A[j] > A[j + 1] 4 then zamień A[j] z A[j + 1] P Określ ile razy zostaną porównane elementy tablicy (instrukcja warunkowa w wierszu 3). 3

Zadanie 11 Dopasowanie wzorca Dane są łańcuch S[1..n] i wzorzec P [0.. m 1], gdzie 1 m n. Poniższy algorytm wyznacza pozycję l występowania wzorca P w łańcuchu S, tzn. l = p jeśli S[p.. p+m 1] = P, a l = n m + 1 jeśli wzorzec P nie jest podciągiem S. Dopasuj(P, S, m, n) 1 l 0 2 dopasowano false 3 while l n m dopasowano 4 do l l + 1 5 r 0 6 dopasowano true 7 while r < m dopasowano 8 do dopasowano (P [r] = S[l + r]) 9 r r + 1 10 return l P Ile porównań symboli łańcucha i wzorca (instrukcji w wierszu 8) wykonuje powyższy algorytm w przypadku pesymistycznym? Zadanie 12 Rekurencja G(n) 1 if n 1 2 then return n 3 else return 5 G(n 1) 6 G(n 2) P Wykaż, że powyższy algorytm zwraca wartość 3 n 2 n dla wszystkich n 0 (n N). P Pokaż, że algorytm ten działa w czasie O(2 n ). Zadanie 13 Poniższy algorytm wyznacza yz, gdzie y, z N. Mnóż(y, z) 1 if z = 0 2 then return 0 3 else if odd(z) 4 then return Mnóż(2 y, z/2 ) + y 5 else return Mnóż(2 y, z/2 ) P Jaka jest jego złożoność obliczeniowa? Mnożenie rekurencyjne 4

Zadanie 14 G(n) 1 if n = 0 n = 1 2 then return 3 n 3 else return G(n 1) + 2 G(n 2) Jeszcze raz rekurencja P Wykaż, że powyższy algorytm zwraca wartość 2 n ( 1) n dla wszystkich n 0 (n N). P Jaka jest jego złożoność obliczeniowa? Zadanie 15 Sortowanie przez proste wybieranie Sortowanie przez proste wybieranie odbywa się w następujący sposób: trzeba wyznaczyć najmniejszy element w tablicy, zamienić go miejscami z pierwszym elementem, wyznaczyć najmniejszy element w A[2..n] i zamienić go z drugim elementem itd., aż cała tablica zostanie posortowana. Selection-Sort(A, n) 1 for i 1 to n 1 2 do m i 3 for j i + 1 to n 4 do if A[j] < A[m] 5 then m j 6 zamień A[m] z A[i] P Określ złożoność obliczeniową tej metody sortowania. Zadanie 16 Optymalny podział Załóżmy, że pewien algorytm wykonuje m 2 kroków dla m-elementowej tablicy (dla dowolnego m 1). Algorytm ten ma być użyty do tablic A 1 i A 2. Tablice zawierają łączną liczbę n elementów. A 1 ma k elementów, a A 2 ma n k elementów (0 k n). P Dla jakiej wartości k obliczenia będą trwały najkrócej? Uzasadnij swoją odpowiedź. Zadanie 17 Sortowanie przez proste wstawianie Sortowanie tablicy A[1..n] przez proste wstawianie odbywa się w następujący sposób: niech x będzie elementem drugim, potem trzecim itd., aż do ostatniego (n). Elementy stojące po lewej stronie x są już uporządkowane i należy x wstawić w odpowiednie miejsce w ciągu A[1..j], gdzie x = A[j]. Insertion-Sort(A, n) 1 for j 2 to n 2 do x A[j] 3 i j 1 4 while i > 0 A[i] > x 5 do A[i + 1] A[i] 6 i i 1 7 A[i + 1] x P Określ złożoność obliczeniową tej metody sortowania. 5

Zadanie 18 Wyszukiwanie binarne Dana jest posortowana, n-elementowa tablica A oraz wartość v. Poniższy algorytm jako wynik działania podaje indeks p taki, że v = A[p] lub nil jeśli v A. Zakładamy, że wywołano go z parametrami Szukaj(A, 1, n, v). Szukaj(A, p, r, v) 1 if p < r 2 then q (p + r 1)/2 3 if v A[q] 4 then return Szukaj(A, p, q, v) 5 else return Szukaj(A, q + 1, r, v) 6 else if v = A[p] 7 then return p 8 else return nil P Wykaż, że algorytm ten dokonuje logarytmicznej liczby porównań. P Skonstruuj algorytm sprawdzania, czy dany tekst zaczyna się słowem postaci ww. Następnie określ optymistyczną i pesymistyczną złożoność obliczeniową tego algorytmu. Zadanie 19 Powtórzenie słowa P Niech A[1..n] będzie posortowaną tablicą parami różnych liczb całkowitych. Zaprojektuj algorytm działający na zasadzie dziel i zwyciężaj, który znajduje indeks i taki, że A[i] = i (jeśli takowy istnieje) i działa w czasie O(log n). Zadanie 20 Indeks równy elementowi Zadanie 21 Rozważmy następujący algorytm sortowania. Nieefektywne sortowanie Stooge-Sort(A, i, j) 1 if A[i] > A[j] 2 then zamień A[i] z A[j] 3 if i + 1 j 4 then return 5 k (j i + 1)/3 6 Stooge-Sort(A, i, j k) // pierwsze dwie trzecie tablicy 7 Stooge-Sort(A, i + k, j) // ostatnie dwie trzecie tablicy 8 Stooge-Sort(A, i, j k) // znowu pierwsze dwie trzecie P Jaki jest czas działania tego algorytmu dla tablicy długości n, tj. przy wywołaniu: Stooge-Sort(A, 1, n)? 6

Zadanie 22 Sortowanie przez scalanie Scalanie (ang. merge) dwóch części tablicy (A[p..q] i A[q + 1.. r]) z których każda jest posortowana polega na przepisaniu ich do pomocniczej tablicy w odpowiedniej kolejności, a następnie z powrotem do właściwej tablicy, gdzie będą już posortowane. Na przykład tablica A = [10, 11, 13, 16, 9, 12, 14, 15] składa się z dwóch posortowanych części: A[1..4] i A[5..8]. Ich scalenie odbywa się następująco (B jest pomocniczą tablicą): porównaj A[1] z A[5] i wpisz mniejszą wartość, czyli 9, do B[1]; następnie porównaj A[1] z A[6] i wpisz mniejszą wartość, czyli 10, do B[2]; następnie porównaj A[2] z A[6] i wpisz mniejszą wartość, czyli 11, do B[3] itd., aż wszystkie elementy od 1 do 8 zostaną wpisane do tablicy B; na końcu przepisz elementy z tablicy B = [9, 10, 11, 12, 13, 14, 15, 16] z powrotem do A. Poniżej przedstawiono algorytm sortujący tablicę A od elementu p do elementu r z wykorzystaniem scalania. Merge-Sort(A, p, r) 1 if p < r 2 then q (p + r)/2 3 Merge-Sort(A, p, q) 4 Merge-Sort(A, q + 1, r) 5 Merge(A, p, q, r) P Jaki jest czas działania procedury Merge(A, p, q, r) dla dwóch tablic o łącznej długości n? P Jaki jest czas działania tego algorytmu dla tablicy długości n, tj. przy wywołaniu: Merge-Sort(A, 1, n)? P Udowodnij metodą indukcji matematycznej, że dla wszystkich liczb naturalnych n N, n 1, poniższe równania są prawdziwe: (a) 1 + 2 + + n = n(n+1) 2, (b) 1 3 + 2 3 + + n 3 = (1 + 2 + + n) 2, (c) 1 2 + 2 2 + + n 2 = n(n+1)(2n+1) 6. Zadanie 23 Równania P Udowodnij metodą indukcji matematycznej, że prawdziwe są następujące nierówności: (a) n! > 2 n dla n 4, (b) 3 n > n 2 + 5 dla n 3, (c) (1 + x) n 1 + nx, jeśli 1 + x > 0, (d) n! > 3 n dla n 7, (e) 2 n > n 2 dla n 5, gdzie n N. Zadanie 24 Nierówności 7

P Udowodnij, że dla wszystkich liczb naturalnych n N następujące równania są prawdziwe: (a) n 1 = 1 1 2 i 2, n i=1 (b) n 2 i = 2 n+1 1, i=0 (c) n i=1 (d) n i=0 1 i(i+1) = n n+1, a i = an+1 1 a 1, (e) n i2 i = (n 1)2 n+1 + 2. i=1 Zadanie 25 Sumy P Rozwiąż następujące równania rekurencyjne: T (0) = 1 (a) T (n) = 2T (n 1) + 1 Zadanie 26 Równania rekurencyjne T (1) = 8 (b) T (n) = 3T (n 1) 15 (c) T (n) = nt (n 1) + n T (0) = 1 (d) T (n) = 2T (n 1) 9 T (1) = 3 (e) T (n) = 6T (n/6) + 3n 1 (f) T (n) = 3T (n 1) + 2 (g) T (n) = 4T (n/3) + n 2 (h) T (n) = 3T (n/2) + n 2 (i) T (n) = 6T (n/6) + 2n + 3 (j) T (n) = 2T (n/2) + 6n 1 T (1) = 2 (k) T (n) = 4T (n/3) + 3n 5 (l) T (n) = 3T (n/2) + n 2 8

P Udowodnij metodą indukcji matematycznej, że: (a) liczba naturalna n 2 n jest podzielna przez 2, (b) liczba naturalna 8 n 1 jest podzielna przez 7, (c) liczba naturalna 13 n 7 jest podzielna przez 6, gdzie n N. Zadanie 27 Podzielność Zadanie 28 Poniższy algorytm sortuje elementy tablicy A[1..n]. Sortowanie bąbelkowe i rekurencja BubbleSort(A, n) 1 if n > 1 2 then for i 1 to n 1 3 do if A[i] > A[i + 1] 4 then zamień (A[i], A[i + 1]) 5 BubbleSort(A, n 1) P Przeanalizuj podany algorytm ze względu na operację dominującą, jaką jest porównanie kluczy znajdujących się w tablicy A[1..n]. P Udowodnij, że algorytm rozwiązujący problem wież Hanoi musi wykonać co najmniej 2 n 1 kroków. Zadanie 29 Wieże Hanoi Zadanie 30 Liczby Fibonacciego Przeanalizuj algorytm wyznaczający liczby Fibonacciego: Fibonacci(n) 1 if n 1 2 then return n 3 else return Fibonacci(n 1) + Fibonacci(n 2) P Ułóż równanie rekurencyjne oraz określ złożoność obliczeniową tego algorytmu. Zadanie 31 Poniższy algorytm wyznacza n!, gdzie n N. Jeszcze raz silnia Silnia(n) 1 if n 1 2 then return 1 3 else return n Silnia(n 1) P Ułóż równanie rekurencyjne oraz określ złożoność obliczeniową tego algorytmu. 9

P Udowodnij metodą indukcji matematycznej, że dla wszystkich liczb naturalnych n N, n 1, poniższe równanie jest prawdziwe: Zadanie 32 Jeszcze raz równanie 1 2 + 2 3 + 3 4 +... + n(n + 1) = n(n + 1)(n + 2). 3 Literatura 1. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Stein Clifford Wprowadzenie do algorytmów 2. Zbigniew J. Czech, Sebastian Deorowicz, Piotr Fabian Algorytmy i struktury danych : wybrane zagadnienia 3. Sanjoy Dasgupta, Christos H. Papadimitriou, Umesh Virkumar Vazirani Algorytmy 4. Ronald E. Graham, Donald E. Knuth, Oren Patashnik Matematyka konkretna 5. Barbara Marszał-Paszek, Piotr Paszek Algorithms and Complexity Theory 6. Ian Parberry, William Gasarch Problems on Algorithms 7. Ian Parberry Lecture Notes on Algorithm Analysis and Computational Complexity 10