1 / 8

Sortowanie

Sortowanie. Algorytmy o liniowej złożoności obliczeniowej ( O (x) ). Countsort (sortowanie licznikowe).

taite
Download Presentation

Sortowanie

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sortowanie Algorytmy o liniowej złożoności obliczeniowej ( O(x) )

  2. 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ówwstawia je od razu na odpowiednie miejsce. Algorytm polega na zliczaniu wystąpień każdego z elementów, a następniewykorzystaniu tej informacji do określenia ilości elementów znajdujących się przedkaż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ścinajwię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żliwiauruchomienie algorytmu na komputerze domowym (> 4GB pamięci) Rozsądną metodą jest wyznaczenie maksimum ciągu wejściowego i zarezerwowanietylko potrzebnej pamięci. Tu z kolei może wystąpić problem „elementów rzadkich”, któryrozwiązać możemy implementując tablicę na liście (najlepiej dwukierunkowej).

  3. Countsort c.d. Symulacja sortowania • Złożoność obliczeniowa: O(n+k)(k – maksimum ciągu wejściowego) • Dodatkowa pamięć: n*typ1+ k*typ2 B(typ1, typ2 – rozmiar zmiennych: wejściowej, licznika wystąpień) • Stabilność: TAK • Implemetacja wielowątkowa: NIE • Ograniczenia i wady: • możliwość sortowania wyłącznie liczb całkowitych • duża ilość niezbędnej dodatkowej pamięci np. dla 500 liczb z zakresu (0; 10.000) >128 KB

  4. 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.

  5. Radixsort c.d. Symulacja sortowania • /przy wykorzystaniu countsort jako algorytmu sortowania/ • Złożoność obliczeniowa: O(dn+dk)(k – maksimum ciągu wejściowego, d – ilość kroków) • Dodatkowa pamięć: n*typ1+ p*typ2 B(typ1, typ2 – rozmiar zmiennych: wejściowej, licznika wystąpieńp – 2^ilość_bitów_w_porcji) • Stabilność: TAK • Implemetacja wielowątkowa: NIE • Ograniczenia i wady: • możliwość sortowania wyłącznie liczb całkowitych (i słów)

  6. 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ść).

  7. Bucketsort c.d. Symulacja sortowania • Złożoność obliczeniowa: zmierza do O(n) • Dodatkowa pamięć: n*4 + n*(4 + typ)przy założeniu, że użyjemy tablicy list na platformie 32 bitowej • Stabilność: ?Zależy od użytego sortowania prostego • Implemetacja wielowątkowa: ?? • Ograniczenia i wady: • w pesymistycznym przypadku złożonośc może spaść do O(n^2)

  8. Podsumowanie algorytmów liniowych Zalety i Wady

More Related