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


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Dmitriy K.                           2:5020/400     05 Aug 2002  16:39:26
 To : Ilya Teterin
 Subject : Re: сортировка с линейной сложностью
 -------------------------------------------------------------------------------- 
 
 Привет, Ilya!
 Wed, 31 Jul 2002 15:34:30 +0000 (UTC) Вы написали to Dmitriy K.:
 
  IT> Хай, Дмитрий!
 
 Воистину хай!
 
  IT> "Dmitriy K." <krylov@mail.primorye.ru>
  IT> <skipped>
  IT> Спасибо за ответ. Жаль, линейная сортировка нескольких миллионов
  IT> 160-ти разрядной информации по указанному алгоритму не получится -
  IT> если выделять старшие разряды, опять получится этот противный
  IT> N*log(n) ;)
 
 Хм... Пусть есть исходная последовательность. Сначала сортируем по первому
 байту, потом - по второму, и т.д. до 20-го байта (элемент 160-разрядный,
 если "разряд" - это бит, то имеем 20 битов). Сортировка исходной
 последовательности по первому байту аналогична разбиению её на 256 кусков,
 по второму - 256*256 кусков и т.д.. Т.к. шаг сортировки - линейный - то
 получается:
 Сортировка по 1-ому байт требует O(N) действий
 Сортировка по 2-ому байт требует 256 * O(N') действий (отсортировать линейно
 256 кусков)
 Сортировка по 3-ему байт требует 256 * 256 * O(N'') действий
 Сортировка по 4-ому байт требует 256 * 256 * 256 * O(N''') действий
 ...
 Сортировка по 20-ому байт требует 256 ^ (20-1) * O(N'''...'') действий
 
 начиная с 2-го байта N - проштрихованы, и означают длину самой длиной
 подпоследовательности.
 Т.к. последовательность разделяется на куски, то каждый кусок _может_
 содержать меньшее количество элементов. Hо в худшем случае придется
 сортировать всю последовательность... Так что N <= N' <= N'' <= N''' <= ...
 <= N'''...''
 
 Так как процесс итеративный и зависит от длины числа, то общая сложность:
 O(n) + 256*O(N') + 256*256*O(N'') + ... + 256^20*O(N'''...'') действий.
 Апроксимируется __O(N)__.
 
 То есть алгоритм - линейный :-). Hо! Из-за __большого__ множителя (~10^50)
 эффективен будет, наверное, только для оооочень длиных последовательностей.
 
 Hо! Я не учел сокращения последовательности. Т.к. она на поздних шагах
 всё-таки будет дробиться (т.е. 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/6488a62bc5a2.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional