Sortowanie Algorytmy o liniowej zoonoci obliczeniowej Ox Countsort
Sortowanie Algorytmy o liniowej złożoności obliczeniowej ( O(x) )
Countsort (sortowanie licznikowe) Algorytmy takie jak Mergesort, Combsort czy Quicksort w każdym z kroków „zbliżają się” do rozwiązania. Countsort po zgromadzeniu informacji na temat wystąpień elementów wstawia je od razu na odpowiednie miejsce. Algorytm polega na zliczaniu wystąpień każdego z elementów, a następnie wykorzystaniu tej informacji do określenia ilości elementów znajdujących się przed każdym elementem, co jednoznacznie określa jego pozycje w uporządkowanym ciągu. Dodatkowe dane gromadzone są w tablicy, której liczba elementów odpowiada wielkości największego elementu w sortowanym ciągu. Można zarezerwować tablicę o ilości elementów odpowiadającej maksymalnej wartości, jaką może przyjąć typ składowy tablicy wejściowej, co przy typie 4 bajtowym uniemożliwia uruchomienie algorytmu na komputerze domowym (> 4 GB pamięci) Rozsądną metodą jest wyznaczenie maksimum ciągu wejściowego i zarezerwowanie tylko potrzebnej pamięci. Tu z kolei może wystąpić problem „elementów rzadkich”, który rozwiązać możemy implementując tablicę na liście (najlepiej dwukierunkowej).
Countsort c. d. Symulacja sortowania Złożoność oblicz en iowa: O(n+k) (k – maksimum ci ągu wejściowego) Dodatkowa pam ięć: n*typ 1 + k*t yp 2 B iar zmiennyc (typ 1, typ 2 – rozm h: wejściowej, lic znika wystąpień) Stabilność: TAK Implemetacja wie lo Ograniczenia i w wątkowa: NIE Ø możliwość sort ady: owania wyłącznie liczb całkowitych Ø duża ilość niezb ędnej dodatkowe j pamięci np. dla 500 liczb z zakresu (0; 10. 0 00) >128 KB
Radixsort (sortowanie pozycyjne) Idea polega na podzieleniu sortowanych wartości (kluczy sortowanych rekordów) na mniejsze „porcje” (np. po 4 bity, po literze), a następnie wykorzystaniu jakiegokolwiek STABILNEGO algorytmu sortującego do posortowania według kolejnych „porcji” w ODWROTNEJ kolejności. Metodę tą wykorzystujemy także przy sortowaniu rekordów na zhierarchizowanych kluczach częściowych. Określamy to wtedy mianem strategii LSD (Least Significant Digit first) Radixsort w połączeniu z Countsort umożliwia obejście głównej wady tego drugiego: dużej ilości pamięci potrzebnej do liczenia wystąpień elementów. Np. Po podzieleniu wartości na „porcje” 8 bajtowe, możemy posortować ciąg 32 bitowych wartości w 4 krokach, używając tylko 256 dodatkowych komórek pamięci. (sam countsort: 1 krok i do 4. 294. 967. 296 komórek pamięci) Dzięki ściśle określonej zależności między ilością kroków a pamięcią możemy dowolnie „skonfigurować” ten algorytm w zależności od dostępnych zasobów pamięci i oczekiwanej prędkości działania.
Radixsort c. d. Symulacja sortowania /przy wykorzysta niu countsort jako Złożoność oblicz algorytmu sortow eniowa: O(dn+dk (k – maksimum ci ągu wejściowego, Dodatkowa pam ania/ ) d – ilość kroków) ięć: n*typ 1 + p*typ 2 (typ 1, typ 2 – rozm B iar zmiennych: w ejściowej, licznik p – 2^ilość_bitów a wystąpień _w_porcji) Stabilność: TAK Implemetacja wie Ograniczenia i w lowątkowa: NIE Ø możliwość sort ady: owania wyłącznie liczb całkowitych (i słów)
Bucketsort (sortowanie kubełkowe) Sortowanie to posiada ŚREDNIĄ złożoność obliczeniową O(n). Zależność ta w rzeczywistości będzie tym bliższa liniowej im sortowane elementy będą bardziej równomiernie wypełniały przedział od 0 do maksimum. Metoda polega na „rozrzuceniu” n wartości do n „kubełków”, gdzie każdemu kubełkowi przydzielamy wąski przedział wartości elementów, które do niego mogą wpadać. Wartości te z założenia muszą należeć do przedziału [0; 1). Kiedy tak nie jest, musimy je najpierw znormalizować (dzieląc każdą przez maksimum+1). Następną czynnością jest posortowanie wartości w każdym z kubełków metodą prostą. Ponieważ sortujemy wtedy jednorazowo 1/n całego znioru: czas składowego sortowania to (n/n)^2 czyli 1 ! Po n krokach uzyskujemy złożoność O(n) (to oczywiście tylko oczekiwana złożoność).
Bucketsort c. d. Symulacja sortowania Złożoność oblicz Dodatkowa pam eniowa: zmierza do O(n) ięć: n*4 + n*(4 + typ) przy założeniu, że u żyjemy tablicy lis Stabilność: ? t na platformie 32 bitowej Zależy od użyteg o sortowania pro stego Implemetacja wie lo Ograniczenia i w wątkowa: ? ? ady: Ø w pesymistycz nym przypadku zł ożonośc może sp aść do O(n^2)
Podsumowanie algorytmów liniowych Zalety ü bardzo szybki ü stabilny Countsort Radixsort Bucketsort i Wady • bardzo duże zapotrzebowanie na pamięć przy sortowaniu wartości >16 -bitowych • sortowanie wyłącznie liczb całkowitych ü stabilny • sortowanie wyłącznie liczb całkowitych ü bardzo dobre rozwiązanie w połączeniu z countsort ü zastosowanie przy sortowaniu rekordów o zhierarchizowanych kluczach częściowych ü sortowanie liczb • zmienna złożoność zmiennoprzecinkowych (w obliczeniowa oraz wysoka jej przeciwieństwie do poprzednich) zależność od danych wejściowych: rozpiętość O(n) – O(n^2) !
- Slides: 8