Analiza algorytmów zadania podstawowe

Podobne dokumenty
Analiza algorytmów zadania podstawowe

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Programowanie w VB Proste algorytmy sortowania

Algorytmy i Struktury Danych, 2. ćwiczenia

Sortowanie przez scalanie

Strategia "dziel i zwyciężaj"

Algorytmy i Struktury Danych.

Informatyka A. Algorytmy

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

Laboratorium nr 7 Sortowanie

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

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

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Algorytmy i Struktury Danych.

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

Programowanie Proceduralne

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Zaawansowane algorytmy i struktury danych

Wstęp do programowania

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 )

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

Algorytmy i Struktury Danych, 2. ćwiczenia

Technologie informacyjne Wykład VII-IX

Sortowanie. LABORKA Piotr Ciskowski

Problemy porządkowe zadania

Laboratoria nr 1. Sortowanie

Struktury Danych i Złożoność Obliczeniowa

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

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

Sortowanie w czasie liniowym

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

Podstawy Informatyki. Sprawność algorytmów

Laboratoria nr 1. Sortowanie

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

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

Algorytm selekcji Hoare a. Łukasz Miemus

INFORMATYKA SORTOWANIE DANYCH.

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

Sortowanie bąbelkowe

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

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

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

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

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

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

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

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

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

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

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

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

Jeszcze o algorytmach

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

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

ALGORYTMY I STRUKTURY DANYCH

Wykład 6. Wyszukiwanie wzorca w tekście

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

Algorytmy i struktury danych. Wykład 4

Rekurencja (rekursja)

Czas pracy: 60 minut

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

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

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

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Matematyczne Podstawy Informatyki

Algorytmy i Struktury Danych

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

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

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

TEORETYCZNE PODSTAWY INFORMATYKI

Wstęp do programowania

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

Luty 2001 Algorytmy (4) 2000/2001

Technologie Informatyczne Wykład VII

Algorytmy w teorii liczb

Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : grudnia 2005.)

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

5. Podstawowe algorytmy i ich cechy.

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.

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

Wykład 4. Sortowanie

Wykład 2. Poprawność algorytmów

Sprawozdanie do 5. Projektu z Algorytmów i struktur danych 1

Sortowanie przez wstawianie Insertion Sort

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

ZADANIE 1. Ważenie (14 pkt)

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

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.

Pytanie 1. Pytanie 2. Pytanie 3 WOJEWÓDZKI KONKURS INFORMATYCZNY. Treść pytania

Efektywna metoda sortowania sortowanie przez scalanie

Zaawansowane algorytmy i struktury danych

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Algorytmy sortujące 1

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

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

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

Podstawy programowania. Przykłady algorytmów Cz. 2 Sortowanie

Transkrypt:

Analiza algorytmów zadania podstawowe 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 0 Jaka wartość zostanie zwrócona przez powyższą funkcję? Wyraź odpowiedź jako funkcję zmiennej n. Zadanie 2 Mnożenie Poniższy algorytm wyznacza yz, gdzie y, z N. 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 0 Określ ile razy zostanie wykonane dodawanie (instrukcja w wierszu 4) w przypadku pesymistycznym. Zadanie 3 Potęgowanie powolne Poniższy algorytm wyznacza y z, gdzie y R, z N. Potęga(y, z) 1 x 1 2 while z > 0 3 do x x y 4 z z 1 5 return x 0 Określ ile razy zostanie wykonane mnożenie (instrukcja w wierszu 3) w przypadku pesymistycznym. 1

Zadanie 4 Potęgowanie szybkie Poniższy algorytm wyznacza y z, gdzie y R, z N. 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 0 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) 0 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. 2

Horner(A, n, x) 1 v 0 2 for i n downto 0 3 do v A[i] + v x 4 return v 0 Jaka jest jego złożoność obliczeniowa? 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 0 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 0 Określ ile razy zostaną wykonane instrukcje przypisania (instrukcja w wierszu 1 i instrukcja w wierszu 4) w przypadku optymistycznym, pesymistycznym i średnim. 0 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 Sortowanie bąbelkowe Poniższy algorytm sortuje elementy tablicy A[1..n]. 3

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] 0 Określ ile razy zostaną porównane elementy tablicy (instrukcja warunkowa w wierszu 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 0 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) 0 Wykaż, że powyższy algorytm zwraca wartość 3 n 2 n dla wszystkich n 0. 0 Pokaż, że algorytm ten działa w czasie O(2 n ). Zadanie 13 Mnożenie rekurencyjne Poniższy algorytm wyznacza yz, gdzie y, z N. 4

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 ) 0 Jaka jest jego złożoność obliczeniowa? Zadanie 14 Jeszcze raz rekurencja G(n) 1 if n = 0 n = 1 2 then return 3 n 3 else return G(n 1) + 2 G(n 2) 0 Wykaż, że powyższy algorytm zwraca wartość 2 n ( 1) n dla wszystkich n 0. 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] 0 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). 0 Dla jakiej wartości k obliczenia będą trwały najkrócej? Uzasadnij swoją odpowiedź. 5

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 0 Określ złożoność obliczeniową tej metody sortowania. 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). Szukaj(A, p, r) 1 if p < r 2 then q (p + r 1)/2 3 if v A[q] 4 then Szukaj(A, p, q) 5 else Szukaj(A, q + 1, r) 6 else if v = A[p] 7 then return p 8 else return nil 0 Wykaż, że algorytm ten dokonuje logarytmicznej liczby porównań. 0 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 0 Niech A[1..n] będzie posortowaną tablicą parami różnych liczb całkowitych. Zaprojektuj algorytm działający na zasadzie dziel i zwycię- Zadanie 20 Indeks równy elementowi 6

żaj, który znajduje indeks i taki, że A[i] = i (jeśli takowy istnieje) i działa w czasie O(log n). 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 0 Jaki jest czas działania tego algorytmu dla tablicy długości n: Stooge- Sort(A, 1, n)? 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) 0 Jaki jest czas działania tego algorytmu dla tablicy długości n: Merge- Sort(A, 1, n)? 7