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

Podobne dokumenty
Algorytmy sortujące. Sortowanie bąbelkowe

Laboratorium nr 7 Sortowanie

Sortowanie - wybrane algorytmy

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

PODSTAWY INFORMATYKI wykład 5.

Algorytmy sortujące i wyszukujące

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

Algorytmy przeszukiwania

Sortowanie przez wstawianie Insertion Sort

Analiza algorytmów zadania podstawowe

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

Sortowanie Shella Shell Sort

Sortowanie. LABORKA Piotr Ciskowski

Algorytmy i Struktury Danych, 2. ćwiczenia

Wstęp do programowania

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Sortowanie w czasie liniowym

Sortowanie bąbelkowe

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

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.

Analiza algorytmów zadania podstawowe

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 )

INFORMATYKA SORTOWANIE DANYCH.

Strategia "dziel i zwyciężaj"

Algorytmy. 1. Sortowanie 2. Statki i okręty. programowanie cz.7. poniedziałek, 2 marca 2009

1. Analiza algorytmów przypomnienie

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

PODSTAWY INFORMATYKI wykład 10.

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

Algorytm Euklidesa. Największy wspólny dzielnik dla danych dwóch liczb całkowitych to największa liczba naturalna dzieląca każdą z nich bez reszty.

Metodyki i Techniki Programowania 2

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

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

Jeszcze o algorytmach

Sortowanie. Bartman Jacek Algorytmy i struktury

Laboratoria nr 1. Sortowanie

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Programowanie w VB Proste algorytmy sortowania

EGZAMIN MATURALNY Z INFORMATYKI

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

Jednym z najprostszych sposobów porządkowania jest technika stosowana przy sortowaniu listów:

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

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

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

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

Algorytm selekcji Hoare a. Łukasz Miemus

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

1. Znajdowanie miejsca zerowego funkcji metodą bisekcji.

Matematyczne Podstawy Informatyki

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

Sortowanie zewnętrzne

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

Problemy porządkowe zadania

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

Algorytmy przeszukiwania wzorca

Struktury Danych i Złożoność Obliczeniowa

Haszowanie. dr inż. Urszula Gałązka

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

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

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

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

Zasady analizy algorytmów

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

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Luty 2001 Algorytmy (7) 2000/2001

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

(3 kwiecień 2014) Marika Pankowska Kamila Pietrzak

Algorytmy sortujące 1

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

Algorytmy i struktury danych Matematyka III sem.

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Opis problemu i przedstawienie sposobu jego rozwiązania w postaci graficznej. Gimnazjum nr 3 im. Jana Pawła II w Hrubieszowie 1

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Algorytmy i struktury danych. Wykład 4

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Temat: Algorytmy zachłanne

Podstawy Informatyki. Sprawność algorytmów

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

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

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

Algorytmy i Struktury Danych.

Podstawy programowania. Wykład: 11. Trochę różnych przykładów. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

ZADANIE 1. Ważenie (14 pkt)

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Rozdział 1 PROGRAMOWANIE LINIOWE

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Algorytmy i struktury danych

Wstęp do metod numerycznych Eliminacja Gaussa Równania macierzowe. P. F. Góra

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

Sortowanie. Tomasz Żak zak. styczeń Instytut Matematyki i Informatyki, Politechnika Wrocławska

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

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

Algorytmy i Struktury Danych.

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

Poszukiwanie liniowe wśród liczb naturalnych

Laboratoria nr 1. Sortowanie

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

Transkrypt:

Algorytmy sortujące sortowanie kubełkowe, sortowanie grzebieniowe

Sortowanie kubełkowe (bucket sort) Jest to jeden z najbardziej popularnych algorytmów sortowania. Został wynaleziony w 1956 r. przez E.J. Issaca i R.C. Singletona. Algorytm działa w czasie liniowym O(n). Algorytm najlepiej się sprawdza dla zbiorów zawierających dużą liczbę elementów, liczb całkowitych jednak o małym zakresie ich wartości. Zazwyczaj przyjmuje się, że sortowane liczby należą do przedziału od 0 do 1. Jeśli tak nie jest, to można podzielić każdą z nich, przez największą możliwą (jeśli znany jest przedział) lub wyznaczoną. Dla osiągnięcia optymalnej złożoności liczba kubełków powinna być rzędu liczby elementów.

Zasada działania algorytmu 1. Na początku określamy zakres wartości jakie mogą przyjmować elementy sortowanego zbioru. 2. Dla każdej liczby występującej w sortowanym zbiorze tworzymy kubełek (licznik), do którego będziemy przyporządkowywać poszczególne elementy zbioru. Kubełek zlicza nam ilość wystąpień konkretnego elementu w zbiorze sortowanym. Na początku, każdy kubełek licznik ma wartość zero. 3. Następnie rozpoczynamy przeglądanie sortowanego zbioru od początku do końca. Poszczególne elementy wrzucamy do kubełków oznaczonych daną cyfrą. W rezultacie kubełki będą nas informować o ilości wystąpień każdej z możliwych wartości w sortowanym zbiorze. 4. Ostatnim etapem jest spisanie do zbioru wynikowego liczb przypisanych do poszczególnych kubełków, tyle razy ile wynosi wartość licznika. W ten sposób zbiór wyjściowy będzie posortowany.

Przykład Posortujemy algorytmem kubełkowym zbiór [ 3 6 5 2 3 8 2 2 5 7 9 8 5 2 6]. W pierwszej kolejności określamy zakres wartości jakie mogą przyjmować elementy sortowanego zbioru. W naszym przypadku sortowane liczby nie należą do przedziału od 0 do 1, dlatego wyszukujemy w zbiorze element najmniejszy i największy będzie to w min =2 i w max =9,. Teraz obliczmy liczbę potrzebnych kubełków. w max - w min +1 = 9 2 + 1 = 8 Będziemy potrzebowali 8 kubełków (liczników). Dla każdego z nich przypiszemy wartość, którą będą zliczały i ustawimy wartość licznika na zero: [2:0] [3:0] [4:0] [5:0] [6:0] [7:0] [8:0] [9:0]

Przykład W następnym kroku przeglądamy kolejne elementy zbioru od początku do końca, zliczając ilość ich wystąpień i zapisując to w odpowiednich kubełkach: [ 3 6 5 2 3 8 2 2 5 7 9 8 5 2 6] [2:4] [3:2] [4:0] [5:3] [6:2] [7:1] [8:2] [9:1] Podobnie jak w sortowaniu przez zliczanie, zapis [2:4] oznacza że, kubełek (licznik) liczby 2 zawiera 4 elementy czyli liczba 2 występuje 4 razy w zbiorze. Jeżeli zbiór ma być posortowany rosnąco, rozpoczynamy przeglądanie kolejnych kubełków od tego o najmniejszym numerze, w przeciwnym wypadku posortujemy zbiór malejąco. W zbiorze wynikowym zapisujemy poszczególne liczby tyle razy ile wystąpiły w liczniku. Zbiór jest posortowany: [ 2 2 2 2 3 3 5 5 5 6 6 7 8 8 9]

Sortowanie grzebieniowe (combsort) Sortowanie grzebieniowe należy do algorytmów niestabilnych - czyli kolejność wynikowa elementów równych jest nieokreślona (zwykle nie zostaje zachowana). Algorytm został wynaleziony w 1980 roku przez Włodzimierza Dobosiewicza, wybitnego specjalistę techniki komputerowej. W 1991 roku ponownie odkryta i opisana przez Stephena Lacey'a i Richarda Boxa metoda sortowania tablicowego. Sortowanie grzebieniowe należy do metod o złożoności liniowo-logarytmicznej. Złożoności obliczeniowej algorytmu dotychczas nie udało się dowieść formalnie.

Sortowanie grzebieniowe zasada działania Ogólna zasada działania algorytmu opiera się, jak sama nazwa wskazuje na analogii czesania. Ze zbioru wyczesujemy najpierw duże elementy "z grubsza", podobnie jak najpierw czeszemy się grzebieniem o rzadszym rozmieszczeniu ząbków a dopiero później grzebieniem o ząbkach umieszczonych gęściej. Sortowanie grzebieniowe dla wariantu podstawowego: za rozpiętość przyjmuje się długość tablicy, dzieli się rozpiętość przez 1.3, odrzuca część ułamkową bada się kolejno wszystkie pary obiektów odległych o rozpiętość (jeśli są ułożone niemonotonicznie - zamienia się je miejscami) wykonuje się powyższe w pętli dzieląc rozpiętość przez 1.3 do czasu, gdy rozpiętość osiągnie wartość 1 Gdy rozpiętość spadnie do 1 metoda zachowuje się tak jak sortowanie bąbelkowe. Tylko wtedy można określić, czy dane są już posortowane czy nie. W tym celu można użyć zmiennej typu bool, która jest ustawiana po zamianie elementów tablicy miejscami. Przerywane jest wykonywanie algorytmu, gdy podczas przejścia przez całą tablicę nie nastąpiła zamiana.

Przykład Posortować tablicę 10 elementową algorytmem sortowania grzebieniowego: [88 24 97 47 41 31 99 97 33 65 ] Wielkość tablicy jest równa 10 - jest dzielona całkowitoliczbowo (bez reszty) przez 1.3 co daje (10/1.3)=7. W pierwszym przebiegu pętli porównywane są elementy oddalone od siebie o 7. Najpierw porównujemy element na pozycji 1 z elementem na pozycji 8. Podobnie jak w metodzie bąbelkowej zamieniamy je jeśli element na pozycji 8 jest mniejszy od elementu na pozycji 1 w naszym przykładzie nie przestawiamy elementów. 88 24 97 47 41 31 99 97 33 65 Postępujemy tak aż porównamy element na pozycji 3 z elementem 10-tym - następuje zamiana miejsc 3 z 10. 88 24 65 47 41 31 99 97 33 97

Przykład c.d Następnie ponownie dzielimy aktualną odległość (7 dla 10-elementowej tablicy) przez 1.3. Otrzymujemy odległość równą 5. Porównujemy elementy 1 z 6 i przestawiamy jeśli 1-ka jest większa od 6-ki, itd. aż do porównania elementu 5-go z 10-tym. 88 24 65 47 41 31 99 97 33 97 Element z pozycji 1 jest większy od elementu z pozycji 6 zamieniamy je miejscami, podobnie postępujemy z elementami 4 i 9. 31 24 65 33 41 88 99 97 47 97

Przykład c.d Ponownie ustalamy aktualną odległość pomiędzy porównywanymi elementami - ustalamy go na 3. Element z pozycji 6 jest większy od elementu z pozycji 9 więc je zamieniamy miejscami 31 24 65 33 41 88 99 97 47 97 Element z pozycji 7 jest większy od elementu z pozycji 10 więc zamieniamy je miejscami 31 24 65 33 41 47 97 97 88 99

Przykład c.d Odległość pomiędzy porównywanymi elementami ustalamy na 2 31 24 65 33 41 47 97 97 88 99 Ponownie porównujemy elementy zbioru. Element z pozycji 3 jest większy od elementu na pozycji 5 dlatego zamieniamy je miejscami. Podobnie z elementami nr 7 i 9 je także zamieniamy miejscami. Zbiór po przestawieniach będzie przedstawiał się następująco: 31 24 41 33 65 47 88 97 97 99

Przykład c.d Odległość pomiędzy porównywanymi elementami ustalamy na 1. Algorytm przekształca się w ten sposób w algorytm bąbelkowy, lecz istnieje dodatkowy warunek zatrzymania go (brak inwersji, przestawień elementów), który statystycznie pozwala na zakończenie algorytmu szybciej niż algorytm bąbelkowy. Globalnym warunkiem stop jest koniunkcja warunku braku inwersji i odległości równej 1, co zapewnia właściwy porządek w tablicy wynikowej. 31 24 41 33 65 47 88 97 97 99 Ponownie porównujemy elementy zbioru. Element z pozycji 1 jest większy od elementu na pozycji 2 dlatego zamieniamy je miejscami. Podobnie z elementami nr 3 i 4 oraz 5 i 6 je także zamieniamy miejscami. Zbiór po przestawieniach będzie przedstawiał się następująco: 24 31 33 41 47 65 88 97 97 99 Odległość pomiędzy porównywanymi elementami ustalona na 1. Odległość między poszczególnymi elementami wynosi 1 i żaden nie został przestawiony co oznacza, że tablica jest posortowana

Bibliografia Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, "Wprowadzenie do algorytmów", WNT 2001 W. Dobosiewicz, An efficient variation of bubble sort, Information processing letters 11(1):5-6, 1980 Sysło M.: Algorytmy, WSiP, 1997 Wróblewski P.: Algorytmy, struktury danych i techniki programowania, Wyd. Helion, 2003 www.pl.wikipedia.org www.algorytm.org www.encyklopedia.pwn.pl www.edu.i-lo.tarnow.pl