Sortowanie pozycyjne - Google

Sortowanie pozycyjne

Z Wikipedii

Skocz do: nawigacji, szukaj

Sortowanie pozycyjne (ang. radix sort) to algorytm sortowania porządkujący stabilnie ciągi wartości (liczb, słów) względem konkretnych cyfr, znaków itp, kolejno od najmniej znaczących do najbardziej znaczących pozycji. Złożoność obliczeniowa jest równa O(d(n + k)), gdzie k to wielkość domeny cyfr, a d szerokość kluczy w cyfrach. Wymaga O(n + k) dodatkowej pamięci.

Przewagą sortowania pozycyjnego nad innymi metodami jest fakt, iż nie wykonuje on żadnych operacji na danych wejściowych - wyobraź sobie, że mamy dużą liczbę bardzo długich liczb, bardzo do siebie podobnych - w tym sensie, że prawdopodobieństwo tego, że większość z nich ma takie same cyfry na poszczególnych pozycjach jest duże. W szczególności dotyczy to cyfr wiodących - nie jest łatwo powiedzieć która jest większa, gdyż za każdym razem musimy schodzić głęboko "w głąb" liczb. A więc czas porównania takich liczb jest bardzo duży. Gdybyśmy do posortowania tych liczb zastosowali inny algorytm, np. Quicksort, otrzymalibyśmy dla nich złożoność O(nlogn) = C * nlogn gdzie C jest czasem między innymi porównania dwóch liczb - w przypadku naszych "złośliwych danych" stała ta mogłaby być znacznie większa od nlogn, gdzie n to ilość liczb (a nie ich długość!). A więc asymptotycznie lepszy Quicksort w praktyce mógłby okazać się gorszy od RadixSort'a, który porównuje tylko pojedyncze cyfry!

Algorytmy pozycyjne bardzo dobrze sprawdzają się także w roli algorytmów sortujących listy. Przykładem bardzo efektywnej i praktycznej implementacji algorytmu pozycyjnego sortującego listy jest Pbit. Pierwszy algorytm pozycyjny sortujący listy został zaprezentowany przez Steven Pigeon w Dr. Dobb's Journal, May 2002, pp. 89-94.

[edytuj] Implementacja w pseudojęzyku programowania

  • tab[] - tablica ciagów (cyfr,liter itp) gdzie pozycja 1 oznacza najbardziej znaczÄ…cÄ… pozycje ciÄ…gu
  • n - dÅ‚ugość ciÄ…gów

procedure RadixSort(tab[],n)
begin 
   for i:=n downto 1 do
       posortuj stabilnie ciągi według i-tej pozycji;
end;

[edytuj] Dowód poprawności algorytmu sortowania pozycyjnego

Załóżmy, że przed i-tym przebiegiem pętli for, wszystkie ciągi są posortowane według (i-1)tej cyfry/litery. Po kolejnej iteracji ciągi będą posortowane według i-tej. Jeżeli dla dwóch, lub więcej ciągów, ich i-ta cyfra/litera jest taka sama, stabilność sortowania zapewni nam zachowanie dobrego porządku. Po ostatnim przebiegu pętli for ciągi będą uporządkowane według najbardziej znaczących cyfr, oraz kolejnych w przypadku identyczności na ostatnich pozycjach.

UWAGA!!! Powyższy algorytm zakłada, że ciągi są tej samej długości - w przypadku gdy tak nie jest, możemy uzupełnić "za krótkie" ciągi zerami lub znakami pustymi.

[edytuj] Przykład działania algorytmu sortowania pozycyjnego

^ oznacza aktualnÄ… pozycjÄ™.

523     472     523     266
266     523     349     349
783 --> 783 --> 266 --> 472
472     266     472     523
349     349     783     783
   ^      ^      ^      ^ 

4000 GB w zsypie
Serwer, z którego nielegalnie można było pobrać 4000 gigabajtów nielegalnych gier, filmów, muzyki i programów zabezpieczyli policjanci z KWP. Administratorowi i właścicielowi serwera grozi do pięciu lat więzienia.
Społecznościowy antywirus?
Czy możliwe jest wykorzystanie potencjału społeczności internetowych, lub użytkowników sieci do ochrony komputera przed zagrożeniami płynącymi z sieci? Producent oprogramowania antywirusowego, Panda Security, właśnie takie rozwiązania planuje wprowadzić w swoich najnowszych produktach.
Mozilla aktualizuje Thunderbird'a
W ostatnią środę Mozilla udostępniła na swoich serwerach najnowszą wersję programu pocztowego Thunderbird 2.0.0.16, wzbogaconą o dziewięć zasadniczych poprawek.
Internetowy tablet z Firefoksem
Michael Arrington planuje stworzyć stylowy tablet, który służyć ma wyłącznie do surfowania w internecie.
Wielofunkcyjna stacja dokujÄ…ca
Stacje dokujące i huby USB to urządzenia przygotowane z myślą o osobach, którym ciągle brakuje gniazd przyłączeniowych.
Linki: Strona g³ówna