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

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

Sortowanie Shella Shell Sort

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

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Struktury Danych i Złożoność Obliczeniowa

Zaawansowane algorytmy i struktury danych

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

INFORMATYKA SORTOWANIE DANYCH.

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

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

Sortowanie - wybrane algorytmy

Zasady analizy algorytmów

Analiza algorytmów zadania podstawowe

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

AiSD zadanie trzecie

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

Wstęp do programowania

Algorytmy i Struktury Danych, 2. ćwiczenia

1. Analiza algorytmów przypomnienie

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Podstawy Informatyki. Sprawność algorytmów

Sortowanie. Bartman Jacek Algorytmy i struktury

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

Przykładowe sprawozdanie. Jan Pustelnik

PODSTAWY INFORMATYKI wykład 5.

Algorytmy i Struktury Danych.

Informatyka 1. Złożoność obliczeniowa

Algorytmy i Struktury Danych.

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

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Algorytmy i struktury danych

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 )

WSTĘP DO INFORMATYKI. Złożoność obliczeniowa, efektywność i algorytmy sortowania

Podstawy Programowania. Złożoność obliczeniowa

Sortowanie przez scalanie

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

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

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

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

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

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,

Algorytmy I Struktury Danych Prowadząca: dr Hab. inż. Małgorzata Sterna. Sprawozdanie do Ćwiczenia 1 Algorytmy sortowania (27.02.

Algorytmy przeszukiwania

Laboratoria nr 1. Sortowanie

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Efektywna metoda sortowania sortowanie przez scalanie

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

Sortowanie bąbelkowe

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

KONSPEKT ZAJĘĆ KOŁA INFORMATYCZNEGO LUB MATEMATYCZNEGO W KLASIE III GIMNAZJUM LUB I LICEUM ( 2 GODZ.)

Algorytmy sortujące 1

Analiza algorytmów zadania podstawowe

Algorytmy i Struktury Danych.

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

Programowanie w VB Proste algorytmy sortowania

Sortowanie w czasie liniowym

Podstawy Programowania

Jeszcze o algorytmach

Podstawy Programowania. Złożoność obliczeniowa

Laboratorium nr 7 Sortowanie

Problemy porządkowe zadania

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

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

Ciąg monotoniczny. Autorzy: Katarzyna Korbel

Algorytmy sortujące i wyszukujące

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

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

Badanie złożoności obliczeniowej algorytmów na przykładzie sortowania

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Liczby pierwsze - wstęp

Sortowanie. LABORKA Piotr Ciskowski

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

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

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

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

Wyszukiwanie binarne

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

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

SQL SERVER 2012 i nie tylko:

AiSD zadanie pierwsze

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

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki.

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

Algorytm i złożoność obliczeniowa algorytmu

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

. Podstawy Programowania 1. Sortowanie tablic jednowymiarowych. Arkadiusz Chrobot. 16 listopada 2016

Podstawy Programowania

Zaawansowane algorytmy i struktury danych

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

Laboratoria nr 1. Sortowanie

Zajęcia nr. 5: Funkcja liniowa

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

Podziałka liniowa czy logarytmiczna?

Matematyczne Podstawy Informatyki

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmy i Struktury Danych, 2. ćwiczenia

Teoretyczne podstawy informatyki

Kompletna dokumentacja kontenera C++ vector w -

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Transkrypt:

Czas sortowania w milisekundach Czas sortowania w milisekundach Sortowanie Porównanie, Counting Sort, Shell Sort, Bubble Sort 4 Porównanie sortowao: HS, CS, Shs, BS 35 3 25 2 15 5 Counting Sort Shell Sort Bubble sort 2 3 4 5 6 7 Ilość elementów Ze względu na bardzo małą efektywnośd Sortowania Bąbelkowego (Bubble Sort) wykres jest dośd nieczytelny, dlatego przedstawię dodatkowe, bardziej przejrzyste dwa wykresy: jeden z Sortowaniem Bąbelkowym, a drugi z pozostałymi sortowniami Sortowanie przez Kopcowanie (), przez Zliczanie (Counting) oraz sortowanie Shella (Shell Sort). 16 14 Porównanie sortowao: HS, CS, ShS 12 8 6 4 Counting Sort Shell Sort 2 1 2 3 4 5 6 7 Ilość elementów (*1^6)

Czas sortowania w milisekundach 4 35 3 25 2 15 5 Bubble sort 2 4 6 8 1 Ilość elementów (*1^3) Bubble sort Oba wykresy powstały na podstawie następujących danych: Czas sortowania w milisekundach dla: Liczba elementów w milionach Counting Sort Shell Sort,4 792 28 126,8 1669 6 273 1,2 2564 93 429 1,6 354 121 558 2 459 153 716 2,4 545 189 87 2,8 639 217 128 3,2 7471 246 1164 3,6 8547 286 137 4 8876 322 1581 4,4 1524 342 1691 4,8 117 383 1883 5,2 12592 47 216 5,6 13764 439 223 6 14679 475 2336 Czas sortowania w milisekundach Liczba elemntów w tysiącach Bubble sort 1 578 15 1297 2 2297 25 3563 3 5156 35 7 4 914 45 11531 5 1423 55 1725 6 2453 65 24172 7 2796 75 3196 8 36515

1. Sortowanie Bąbelkowe Zdecydowanie najmniej efektywny sposób sortowania spośród przedstawionych w powyższym raporcie. Sortowanie jest wykonywane dla dwóch zagnieżdżonych w sobie pętli. Obie wykonują się (n 1) razy, przez co czas potrzebny na posortowanie tablicy n- elementowej wynosi: Sortowanie bąbelkowe ma więc złożonośd czasową równą O(n 2 ). Parę lat temu można by powiedzied, że zaletą sortowania bąbelkowego jest bardzo mała pamięd potrzebna do sortowania. Jednak w dzisiejszych czasach przy czterordzeniowych procesorach pamięd, jaką zaoszczędzimy sortując 8 tysięcy elementów sortowaniem bąbelkowym, zamiast na przykład sortowaniem przez zliczanie, jest pomijalna w stosunku do czasu, jaki zaoszczędzimy używając innej metody. 2. Sortowanie przez kopcowanie Jak wynika z wykresu jest zaraz po Bubble Sort najwolniejszym algorytmem sortowania spośród omawianych. Nie oznacza to, że jest on prawie tak samo wolny przeciwnie zarówno tworzenie kopca, jak i jego rozbieranie ma czasową złożonośd równą O(n log n). Oznacza to, że jest zdecydowanie wielokrotnie szybszy od omawianego wcześniej sortowania bąbelkowego. sortuje w miejscu, dzięki czemu złożonośd pamięciowa sortowania przez kopcowanie wynosi O(n). Może byd to uciążliwe tylko wtedy, gdy ktoś ma do posortowania naprawdę dużą ilośd elementów dziesiątki milionów nie stanowią bardzo dużego kłopotu, jeżeli nie brad pod uwagę czasu, jaki to sortowanie procesorowi zajmuje. Wadą sortowania przez kopcowanie jest jego niestabilnośd. Sortowanie według przypisanych do elementów identycznych kluczy nie gwarantuje uzyskania poprawnego wyniku. 3. Sortowanie Shella Shell Sort jest drugim najszybszym algorytmem sortowania spośród omawianych. Jego złożonośd czasowa jest zależna od tego, jaki się przyjmie odstęp między elementami. Z wielu opracowao możemy się dowiedzied, że najefektywniejszy dotychczas wymyślony odstęp został zaproponowany przez Donalda Knutha: Przy założeniu takiego odstępu złożonośd czasowa Shell Sort wynosi O(n 1,15 ). Wynika z tego, że sortowanie Shella jest bezkonkurencyjne w klasie sortowao O(n 2 ). Co więcej jest on szybsze, niż o czasowej złożoności O(n log n).

Czas sortowao w milisekundach Sortowanie Shella, podobnie jak, jest niestabilne oraz sortuje w miejscu, więc nie zajmuje dużo pamięci. 4. Sortowanie przez zliczanie Zdecydowanie najszybszy algorytm spośród omawianych. Swoją szybkośd zawdzięcza temu, że nie wykonuje żadnych porównao. Dzięki opieraniu się na tym, ile konkretnych liczb znajduje się w ciągu otrzymujemy złożonośd czasową wynoszącą O(m + n), gdzie m = k max -k min + 1 Największym minusem sortowania przez zliczanie jest fakt, iż potrzebuje on dodatkowej pamięci wynoszącej O(m + n). Jest to spowodowane tym, że Counting Sort wymaga zarezerwowania pamięci dla dodatkowej struktury danych. Dodatkowo algorytm ten może być stosowany jedynie do danych całkowitoliczbowych. 5. Podsumowanie Najbardziej efektywnym sortowaniem w stosunku czas do pamięci okazuje się sortowanie przez zliczanie. Jest ono nie tylko szybsze od pozostałych omawianych, ale dodatkowo w przeciwieostwie do sortowania przez kopcowanie i sortowania Shella, jest ono stabilne. Dodatkowa pamięd, jaka jest wymagana nie stanowi chyba aż tak dużej zapory, przy dzisiejszych możliwościach sprzętowych. Jeśli jednak komuś zależy na każdym oszczędzonym bajcie pamięci lub musi posortowad dane niecałkowito liczbowe może użyd sortowania Shella, który jest niewiele wolniejszy, a dzięki temu, że sortuje w miejscu oszczędza pamięd. Zdecydowanie najgorszym rozwiązaniem jest używanie Bubble Sort. Quick Sort, i Merge Sort dla różnych typów danych 16 Ciąg losowy i stały dla QS,MS,HS 14 12 8 6 4 Quick Sort (L) (L) Merge Sort (L) Quick Sort (S) (S) Merge Sort (S) 2 2 3 4 5 6 7 Ilość elementów

Czas sortowao w milisekundach Ciąg rosnący i malejący dla QS,HS,MS 14 12 8 6 4 Quick Sort (R) (R) Merge Sort (R) Quick Sort (M) (M) Merge Sort (M) 2 2 3 4 5 6 7 Ilość elementów Quick Sort - malejąco-rosnący 14 12 8 6 4 (RM) Merge Sort (RM) (MR) Merge Sort (MR) Quick Sort (RM) Quick Sort (MR) 2 2 3 4 5 6 7

Powyższe wykresy powstały na bazie następujących danych: Ilośd elementów Quick Sort (L) Losowo (L) Czas sortowao w milisekundach Merge Sort (L) Quick Sort (S) Stały (S) Merge Sort (S) 4 64 792 132 44 35 84 8 132 1669 273 93 71 176 12 23 2564 422 145 17 269 16 272 354 566 194 143 367 2 348 459 713 227 179 466 24 42 545 851 36 215 566 28 481 639 115 351 25 669 32 558 7471 1164 43 273 767 36 64 8547 1315 438 323 842 4 7 8876 1468 482 361 965 44 787 1524 1626 61 395 176 48 842 117 177 635 43 118 52 937 12592 197 669 466 1284 56 972 13764 291 736 51 1381 6 167 14679 2222 783 538 149 Quick Sort (R) Rosnący (R) Czas sortowao w milisekundach Merge Sort (R) Quick Sort (M) Malejący (M) Merge Sort (M) 24 648 66 26 339 85 51 1435 138 52 711 175 77 2117 212 77 196 27 18 298 288 111 1475 364 13 388 361 131 1829 466 157 4643 441 165 213 558 192 5426 52 197 2656 661 225 6158 598 23 363 765 248 779 673 251 349 865 263 7862 751 279 3822 961 298 875 833 31 464 167 332 9519 912 347 469 1171 361 1424 992 377 513 1265 398 11236 17 49 5491 139 433 121 1155 439 5881 1493

Quick Sort Czas sortowao w milisekundach Rosnąco-malejący Malejąco-rosnący Quick (RM) Merge Sort (RM) Sort (MR) Merge Sort (MR) - 699 75-686 75-146 159-1443 157-2255 244-2229 241-36 329-311 328-3879 417-3814 416-4672 58-459 498-5526 599-5494 597-6224 689-6369 686-7258 774-789 767-8144 861-7981 864-8926 959-875 958-9797 155-9295 152-1567 1146-1129 1127-1146 1249-11419 1244-11729 134-11831 1328 Ilośd elementów Quick Sort (MR) Ilośd elementów Quick Sort (RM) 4 18 77 8 164 15 173 12 113 2 299 16 341 25 473 2 723 3 683 24 1344 35 926 28 416 4 1214 32 312 45 1541 36 699 5 191 4 2182 55 2299 44 149 6 2739 48 2711 65 3215 52 1395 7 3728 56 483 75 4279 6 66 8 4863 85 5499

Quick Sort Quick Sort jest, jak sama nazwa wskazuje, bardzo szybkim algorytmem sortującym. Jego złożonośd czasowa wynosi O(n log n). Jest to najszybszy algorytm sortujący z tej klasy. Jak można zobaczyd na wykresach dla większości typów danych(ciąg losowy, stały, rosnący, malejący) bije na głowę pozostałe algorytmy. Dodatkowo jest to algorytm sortujący w miejscu, czyli nie zajmuje dużo pamięci. Warto go stosowad zawsze, gdy mamy pewnośd, co do rodzaju wprowadzanych danych, ponieważ Quick Sort ma dwie dosyd duże wady: 1. W przypadku pesymistycznym tzn. gdy wybierzemy jako podziałkę ciągu posortowanego skrajny element złożonośd czasowa sięga aż O(n 2 ), natomiast złożonośd pamięciowa jest liniowa i wynosi aż. 2. Quick Sort działa rekurencyjnie w skutek czego w przypadku pesymistycznych danych może szybko dojśd do przepełnienia stosu i zablokowania komputera przykładem tego jest wykres przedstawiający działanie Quick Sort dla ciągu rosnąco-malejącego, gdzie stos przepełnił się bardzo szybko (ledwo ponad 85 elementów) oraz dla ciągu malejąco-rosnącego, gdzie algorytm zaczął podawad błędne wyniki. Problem określony w punkcie pierwszym można w bardzo łatwy sposób zlikwidowad, a przynajmniej mocno ograniczyd. Wystarczy jako element dzielący wybrad medianę. Sprawia to, że pesymistyczne oszacowanie złożoności zrówna się z optymistycznym. Zwiększa to pewność, że czas potrzebny na posortowanie nie przekroczy O(n log n).