Lista zadań na zajęcia, semestr letni 2013/2014, zestaw II

Transkrypt

Lista zadań na zajęcia, semestr letni 2013/2014, zestaw II
Lista zadań na zajęcia, semestr letni 2013/2014, zestaw II
Sortowanie w czasie liniowym
Przemysław Krysztowiak, [email protected]
Zadanie 1. Uzasadnij dolne ograniczenie Ω(n log n) na złożoność czasową problemu sortowania za pomocą
porównań kluczy.
(a) Rozrysuj drzewo porównań dla ciągu 3-elementowego.
Zadanie 2. Zilustruj przebieg algorytmu sortowania przez zliczanie na tablicy [5, 2, 7, 3, 7, 4, 7, 6, 2, 7]
(pseudokod za [T. Cormen et al., Introduction to algorithms]).
Zadanie 3. Oszacuj czasową złożoność obliczeniową sortowania przez zliczanie.
Zadanie 4. Zaimplementuj sortowanie przez zliczanie:
(a) dla przypadku, gdy na wejściu jest tablica liczb naturalnych nie przekraczających k,
(b) dla przypadku, gdy na wejściu jest tablica struktur (rekordów), których klucze są liczbami naturalnymi nie przekraczającymi k.
CountingSort(A, B, k) { A – wejście, B – wyjście, k – zakres liczb }
niech C[0..k] będzie nową tablicą
for i := 0 to k
C[i] := 0;
for j := 1 to A.length
C[A[j]] := C[A[j]] + 1;
for i := 1 to k
C[i] = C[i] + C[i − 1];
for j := A.length downto 1
B[C[A[j]]] := A[j];
C[A[j]] := C[A[j]] − 1;
Zadanie domowe
1. Napisz pseudokod oraz wykonaj implementację algorytmu sortowania przez zliczanie dla przypadku,
gdy wszystkie elementy tablicy są liczbami naturalnymi z zakresu od p do q włącznie (nie używając tablic
rozmiaru q, a jedynie rozmiaru q − p + 1).
2. Napisz pseudokod sortowania pozycyjnego dla liczb dziesiętnych o długości co najwyżej d cyfr. Oszacuj
złożoność czasową tego algorytmu.
3. Dla pierwszego zestawu swoich danych z moodle-a (tzn. we1 ) rozpisz przebieg (wyniki częściowe
i końcowe) sortowania pozycyjnego.
Wyrażam zgodę na drukowanie przez studentów i pracowników WMiI UMK treści zawartej w niniejszym pliku.

Podobne dokumenty