Algorytmy i Struktury Danych, 2. ćwiczenia

Podobne dokumenty
Algorytmy i Struktury Danych, 2. ćwiczenia

Analiza algorytmów zadania podstawowe

Programowanie w VB Proste algorytmy sortowania

Analiza algorytmów zadania podstawowe

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Jeszcze o algorytmach

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

Strategia "dziel i zwyciężaj"

Algorytm selekcji Hoare a. Łukasz Miemus

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

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

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

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

Algorytmy i Struktury Danych.

Sortowanie przez scalanie

Zaawansowane algorytmy i struktury danych

Sortowanie. LABORKA Piotr Ciskowski

Laboratorium nr 7 Sortowanie

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

Sortowanie w czasie liniowym

Wstęp do programowania

Sortowanie przez wstawianie Insertion Sort

Wstęp do Programowania potok funkcyjny

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 )

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

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

Sortowanie zewnętrzne

Algorytmy sortujące 1

Efektywna metoda sortowania sortowanie przez scalanie

Struktury Danych i Złożoność Obliczeniowa

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Problemy porządkowe zadania

Podstawy Informatyki. Sprawność algorytmów

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

Zaawansowane algorytmy i struktury danych

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

Algorytmy sortujące i wyszukujące

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4

Wstęp do programowania

INFORMATYKA SORTOWANIE DANYCH.

Sortowanie Shella Shell Sort

Wykład 2. Poprawność algorytmów

Wykład 4. Sortowanie

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

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

Teoretyczne podstawy informatyki

Algorytmy w teorii liczb

Sortowanie przez wstawianie

Programowanie Współbieżne. Algorytmy

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

TEORETYCZNE PODSTAWY INFORMATYKI

PODSTAWY INFORMATYKI wykład 5.

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

Teoretyczne podstawy informatyki

Informatyka A. Algorytmy

Wstęp do programowania

Algorytmy i Struktury Danych, 9. ćwiczenia

Programowanie Proceduralne

Źródła. N.Wirth Algorithms and Data Structures, 1985 D.E.Knuth The Art of Computer Programming. Vol. 3, 1973

Algorytmy Równoległe i Rozproszone Część II - Sieci porównujące

Zasady analizy algorytmów

Równoległe algorytmy sortowania. Krzysztof Banaś Obliczenia równoległe 1

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

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

Algorytmy i Struktury Danych.

Technologie informacyjne Wykład VII-IX

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

Algorytmy sortujące. Sortowanie bąbelkowe

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

Algorytmy i Struktury Danych. (c) Marcin Sydow. Introduction. QuickSort. Sortowanie 2. Limit. CountSort. RadixSort. Summary

Przykładowe sprawozdanie. Jan Pustelnik

Matematyka dyskretna. Andrzej Łachwa, UJ, /10

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

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

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

KOPCE KOLEJKI PRIORYTETOWE - PRZYPOMNIENIE KOPCE WYSOKOŚĆ KOPCA KOPCE I KOLEJKI PRIORYTETOWE PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI

ALGORYTMY POSZUKIWANIA I PORZĄDKOWANIA ELEMENTY JĘZYKA PROGRAMOWANIA

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Algorytmy i struktury danych

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

Kodowanie permutacji. Przykład Kodem permutacji A = (1, 5, 2, 6, 4, 7, 3) jest ciąg B = (0, 0, 1, 0, 2, 0, 4).

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

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

Matematyczne Podstawy Informatyki

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

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

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

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,

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

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

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

Ciągi komplementarne. Autor: Krzysztof Zamarski. Opiekun pracy: dr Jacek Dymel

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

TEORETYCZNE PODSTAWY INFORMATYKI

2:8,7 3:9,4 / \ / \ / \ / \ 4:7,3 5:8 6:9,2 7:4

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

Transkrypt:

Algorytmy i Struktury Danych, 2. ćwiczenia 2017-10-13 Spis treści 1 Optymalne sortowanie 5 ciu elementów 1 2 Sortowanie metodą Shella 2 3 Przesunięcie cykliczne tablicy 3 4 Scalanie w miejscu dla ciągów długości n i n n 3 5 Scalanie w miejscu 3 6 Zadania z klasówek 4 1 Optymalne sortowanie 5 ciu elementów Niech A = (a, b, c, d, e). compare(a, b), (niech a < b) compare(c, d), (niech c < d) compare(a, c), (niech a < c) c a d b teraz wkładamy, e pomiędzy a, c, d, if (e > c) then compare(e, a) else compare(e, d) możemy otrzymać jeden z następujących posetów: każdy z nich można posortować używając 2 porównań. 1

2 Sortowanie metodą Shella Lemat 1 Niech m, n, r będą nieujemnymi liczba całkowitymi i niech (x 1,..., x m+r ) oraz (y 1,..., y n+r ) będą dowolnymi ciągami liczbowymi takimi, że y i x m+i dla 1 i r. Jeśli elementy x oraz y posortujemy niezależnie tak, że x 1... x m+r oraz y 1... y n+r to nadal będziemy mieli y i x m+i dla 1 i r. Po posortowaniu element x m+i jest większy bądź równy od co najmniej m+i elementów z x, wśród nich jest co najmniej i elementów które przed sortowaniem były na pozycjach m,..., m + r, każdy z tych elementów ma wśród y element od którego jest większy, stąd x m+i jest większy bądź równy od i najmniejszych elementów y. (pełny dowód jest w Knuth, tom III, strona 94) Lemat 2 Jeśli tablica jest h posortowana i k posortujemy, to nadal będzie h posortowana. Niech a i i a i+h elementy które po sortowaniu nie są h posortowane. Niech Y ciąg zawierający a i, a i+k, a i+2k,.... Niech X ciąg zawierający a i+h, a i+h+k, a i+h+2k,.... Po k posortowaniu ciągi Y i X są uporządkowane, z poprzedniego lematu mamy jednak, że a i a i+h sprzeczność. Lemat 3 Liczba porównań wymagana przy h posortowaniu tablicy rozmiaru n wynosi O(n 2 /h). Mamy h ciągów, każdy o długości n/h stąd całkowity czas wynosi h n 2 /h 2 = n 2 /h. qued Lemat 4 Liczba porównań wymagana przy h i posortowaniu tablicy rozmiaru n, która jest h i+1 i h i+2 posortowana wynosi O(nh i+1 h i+2 /h i ) (przy założeniu, że h i+1 i h i+2 są względnie pierwsze) Trzeba pokazać, że jeśli ciąg jest h i+1 i h i+2 posortowany, to jeśli k h i+1 h i+2, to a i a i+k. qued Lemat 5 Dla ciągu h = {2 i 1 : i N} algorytm ShellSort ma złożoność O(n n). (Knuth, tom III, strona 95) Niech B i koszt i tej fazy, t = log n. Dla pierwszy t/2 przebiegów h n, ponieważ koszt jednej fazy jest ograniczona przez O(n 2 /h) stąd sumaryczny koszt jest rzędu O(n 1.5 ). Dla pozostałych przebiegów możemy skorzystać z poprzedniego lematu, koszt pojedynczej fazy jest równy B i = O(nh i+2 h i+1 /h i ), więc sumaryczny koszt tych faz jest również rzędu O(n 1.5 ). Lemat 6 Dla ciągu h = {2 i 3 j O(n log 2 n). : i, j N} algorytm ShellSort ma złożoność 2

Wszystkich faz algorytmu jest O((log n) 2 ). Trzeba pokazać, że każda z nich zajmuje O(n) czasu. Obserwacja jeśli ciąg jest 2 i 3 uporządkowany, to jego 1 posortowanie wymaga O(n) czasu. Analogicznie jeśli ciąg jest 2i i 3i posortowany to jego i posortowanie wymaga O(n). 3 Przesunięcie cykliczne tablicy Function CyclicLeftShift(a, k) n := len(a) Reverse(a, 1, n k) Reverse(a, n k + 1, n) Reverse(a, 1, n) 4 Scalanie w miejscu dla ciągów długości n i n n Algorithm 1: Merge(A) Dana jest tablica A zawierająca dwa uporządkowane rosnąco ciągi: 1..n n i n n + 1..n. Posortuj (używając alg. insertion sort) ciąg n 2 n + 1..n Scal ciąg 1..n 2 n i n 2 n + 1..n n używając obszaru n n + 1..n jako bufor Posortuj (używając alg. insertion sort) ciąg n n + 1..n 5 Scalanie w miejscu Knuth, Tom III, strona 698. podziel tablicę na bloki rozmiaru n, Z 1, Z 2,..., Z m+2, (blok Z m+2 może być mniejszy, zamień blok leżący na połączeniu dwóch ciągów, z blokiem Z m+1, teraz każdy z bloków Z 1,..., Z m jest uporządkowany, posortuj używając selection sort bloki, wg. pierwszego elementu z bloków (jeśli dwa bloki mają ten sam element początkowy, to porównaj elementy końcowe) scal Z 1,..., Z m używając Z m+1 jako bufora pomocniczego, Algorithm 2: Z-Merge(Z) foreach i 1,..., m 1 do SimpleMerge(Z i,z i+1,z m+1 ) 3

(należy jeszcze pokazać, że taka procedura daje dobre uporządkowanie) wskazówka: przed tym krokiem każdy element jest w inwersji z co najwyżej (n) innymi elementami bloków Z1,.., Z m+1 dzielimy tablicę na trzy części: A, B, C, B = C = 2 n posortuj ostatnie 4 n elementów (bloki B, C) używając InsertionSort (w rezultacie w bloku C znajdują się największe elementy w tablicy) scal bloki A i B używając C jako bufora posortuj blok C używając InsertionSort Ćwiczenie: dlaczego używając selection-sort trzeba uwzględniać początki i końce bloków? Rozwiązanie: np. dla ciągów (111,123),(111,145) (rozmiar bloku 3), sortując jedynie po początkach moglibyśmy otrzymać: (123,145,111,111), który przy scalaniu metodą opisaną w algorytmie nie da uporządkowanego ciągu. 6 Zadania z klasówek Zadanie 1 W tym zadaniu rozważamy rekurencyjny algorytm sortowania przez scalanie, w którym scalanie dwóch posortowanych ciągów odbywa się w sposób klasyczny: na swoją docelową pozycję trafia mniejszy z początkowych elementów scalanych ciągów. Przykład Podczas scalania ciągów [2, 4, 5, 8] oraz [1, 3, 6, 7] porównywane są kolejno 2 z 1, 2 z 3, 4 z 3, 4 z 6, 5 z 6, 8 z 6 oraz 8 z 7. Zaprojektuj liniowy algorytm, który sprawdzi, czy w wyniku wykonania algorytmu sortowania przez scalanie na danej permutacji p[1..n] liczb naturalnych {1,..., n}, porównane zostaną ze sobą zadane, dwie różne liczby a i b ze zbioru {1,..., n}. Rozwiązanie: 1. Znajdź wspólny poziom rekurencji na której te elementy są scalane 2. Dla a i b wyznacz pierwszy większy/mniejszy element a, a, b, b 3. Sprawdź cośtam cośtam. Zadanie 2 Udowodnij, że jeśli algorytm sortujący tablicę A[1..n] porównuje i zamienia wyłącznie elementy odległe co najwyżej o 2015 (tzn. jeśli porównuje A[i] z A[j], to i-j <= 2015), to jego pesymistyczny czas działania jest co najmniej kwadratowy. Rozwiązanie: Zauważmy, że zamiana elementów odległych o co najwyżej 2015, może zmniejszyć liczbę inwersji o O(1). Ponieważ tablica może zawierać O(n 2 ) inwersji, stąd czas działania dowolnego algorytmu o tej własności będzie Ω(n 2 ). 4

Zadanie 3 Dana jest tablica a[1..n] parami różnych elementów pochodzących ze zbioru z liniowym porządkiem. Należy posortować tablicę a rosnąco. Jedyną operacją służącą do porównywania elementów między sobą jest funkcja ile(x,y), której wynikiem jest liczba całkowita k zdefiniowana tak, że k = {1 i n : min(x, y) a[i] max(x, y)}. Wartość k jest ujemna tylko wtedy, gdy x jest mniejsze od y. Udowodnij, że każdy algorytm sortujący a wywoła funkcję ile w pesymistycznym przypadku co najmniej n-1 razy. Zaproponuje algorytm sortowania a w miejscu za pomocą co najwyżej O(n) wywołań funkcji ile i O(n) zamian. Rozwiązanie: 1. Znajdź minimum 2. Przejdź po wszystkich elementach i wstaw je w odpowiednie miejsce (uwaga! to musi być w miejscu) 5