Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Dmitriy K.                           2:5020/400     31 Jul 2002  18:20:48
 To : Ilya Teterin
 Subject : Re: сортировка с линейной сложностью
 -------------------------------------------------------------------------------- 
 
 Привет, Ilya!
 Wed, 31 Jul 2002 10:17:30 +0000 (UTC) Вы написали :
 
  IT> Хай, Олл!
 
  IT> Существует ли алгоритм сортировки с линейной вычислительной
  IT> сложностью, если известно, что сортируемые данные - случайная
  IT> величина с равномерным распределением?
 
 Существует. Hо человечеству пока не известна ;-)
 
 Зависит от того, что за "данные" и что за "величина".
 
 Если величина - из некоторого конечного множества - например, 0-255, то
 сортировку  последовательности с линейной скоростью a0, a1, ..., ak можно
 сделать так:
 
 1) посчитать, сколько раз встречается 0, сколько - 1 и т.д. Это можно
 сделать за один проход последовательности, заведя 256 счетчиков.
 
 2) построить отсортированную последовательность: сначала идут '0' - столько
 раз, сколько встречались в исходной последовательности, затем '1' и т.д.
 Линейность всё равно сохраниться, т.к. количество проходов равно k.
 
 Вот так:
 
 const k = 10;
 
 var
   a: array[1..k] of byte;
 
 procedure sort;
 var
   counters: array[byte] of byte;
   i, j, l: byte;
 begin
   FillChar(counters, SizeOf(counters), 0);
   for i := 1 to k do Inc(counters[a[k]]); // Шаг 1
   l = 1; // Шаг 2
   for i := 0 to 255 do
     for j := 1 to counters[a[i]] do
     begin
       a[l] := i;
       Inc(l);
     end;
 end;
 
 Как называется эта сортировка - я не помню. Кажется, "карманная".
 
 Если же твоя "случайная величина" не помещается в границы байта, то тут надо
 смотреть...
 
 Hапример:
 1) Если гарантировано все элементы разные - можно через битовые массивы
 (правда, памяти пожрет...). Если встречается не больше k раз - через k
 битовых массивов. Кстати, подойдет и для байтов, тогда вообще проще: в
 Pascal уже есть подходящий битовый массив - производные от типа set.
 
 2) Если не байт, а, например, слово (2 байта) - та же фигня, но на счетчики
 больше памяти будет угрохано. Hа самом деле не так уж и важно, какое
 представление. Просто для целых чисел получается проще - порядок задается
 порядком счетчиков, тогда как для дробных приходится извращаться на шаге 2
 да и память, память...
 
 3) Сдается мне, что если эта "случайная величина" представляется, ну, для
 простоты типом integer (32-х битным), то сначала нуна отсортировать по
 младшим байтам (сохраняя информацию об оставшихся), потом - по более старшим
 и т.д... Тогда для счетчиков нужно будет меньше памяти. Думать надо.
 
 P.S. А может, сразу отсортированную последовательность генерить?
 
 P.P.S. В инете проскакивала как-то информация о O(log(log(log(n))))
 сортировке... Типа, для больших n ;) . Могу поискать на винте.
 
 Удачи!
 __________________________________________________________________________
 --{ Dmitriy Krylov aka "Abulafia"   }-------------------------------------
 --{ mailto: krylov@mail.primorye.ru }-------------------------------------
 -- 
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.Mail.Ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 сортировка с линейной сложностью   Ilya Teterin   31 Jul 2002 14:17:30 
 Re: сортировка с линейной сложностью   Dmitriy K.   31 Jul 2002 18:20:48 
 Re: сортировка с линейной сложностью   Ilya Teterin   31 Jul 2002 19:34:30 
 сортировка с линейной сложностью   Dmitri Panev   31 Jul 2002 21:13:05 
 Re: сортировка с линейной сложностью   Ilya Teterin   01 Aug 2002 09:05:57 
 Re: соpтиpовка с линейной сложностью   Evgeni Kubachev   03 Aug 2002 00:09:26 
 Re: сортировка с линейной сложностью   …ମ« Ґў „¬ЁваЁ© ‘ҐаЈҐҐўЁз   31 Jul 2002 23:22:38 
 сортировка с линейной сложностью   Roman Kukushkin   01 Aug 2002 21:08:35 
 Re: сортировка с линейной сложностью   Dmitriy K.   05 Aug 2002 16:39:26 
 сортировка с линейной сложностью   Roman Kukushkin   01 Aug 2002 20:54:36 
 Re: сортировка с линейной сложностью   Sergey Andrianov   31 Jul 2002 23:50:56 
 Re: сортировка с линейной сложностью   Dmitriy K.   05 Aug 2002 16:39:25 
 Re: сортировка с линейной сложностью   Sergey Andrianov   09 Aug 2002 23:35:54 
 сортировка с линейной сложностью   Roman Kukushkin   04 Aug 2002 23:10:53 
 Re: сортировка с линейной сложностью   Sergey Andrianov   09 Aug 2002 23:38:54 
 сортировка с линейной сложностью   Roman Kukushkin   11 Aug 2002 23:20:55 
 Re: сортировка с линейной сложностью   Sergey Andrianov   27 Aug 2002 20:03:34 
 сортировка с линейной сложностью   Roman Kukushkin   28 Aug 2002 07:12:47 
 Re: сортировка с линейной сложностью   Gimpelson Vadim   18 Sep 2002 15:08:07 
 Re: сортировка с линейной сложностью   Nikolay Ponomarenko   18 Aug 2002 22:24:37 
 Re: сортировка с линейной сложностью   Vladimir A. Pertzel   04 Aug 2002 16:41:44 
 Re: сортировка с линейной сложностью   Pertzel Family   06 Aug 2002 01:25:53 
 Re: соpтиpовка с линейной сложностью   Serge Levin   06 Aug 2002 01:24:00 
 Re: соpтиpовка с линейной сложностью   …ମ« Ґў „¬ЁваЁ© ‘ҐаЈҐҐўЁз   06 Aug 2002 09:18:58 
 Re^2: соpтиpовка с линейной сложностью   Serge Levin   12 Aug 2002 19:10:50 
 сортировка с линейной сложностью   Anthone Tikhonov   20 Aug 2002 14:24:48 
Архивное /ru.algorithms/648809e41439.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional