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


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Vladimir A. Pertzel                  2:5020/400     17 Jul 2002  11:27:44
 To : Max Alekseyev
 Subject : Re: сортировка почти отсортированных данных
 -------------------------------------------------------------------------------- 
 
 Мир Вашему Дому!
 
 "Max Alekseyev" > news:1026764972@f60.n5015.z2.ftn ...
 
 > Предположим, что массив данных размерности n является почти
 
 отсортированным
 
 > (чтобы формализовать это понятие, скажем, достаточно не более
 
 log(n)
 
 > элементарных операций для получения из него отсортированного
 
 массива). Какие
 
 > есть алгоритмы для быстрой сортировки таких массивов? Хотелось
 
 бы линейного
 
 > времени, а лучше саб-линейного.
 
 Требуемое время не менее линейного, поскольку если мы
 не узнавали значения некоторого элемента, то в ситуации,
 когда он стоит не на своем месте, задача окажется
 нерешенной.
 
 Однако, прежде всего, хотелось бы понять, минимальным должно
 быть "среднее" время сортировки или гарантированный результат?
 
 Вот решение с двунаправленными сортированными списками:
 Создаем список списков и инициируем его исходным.
 Исходный список объявляем текущим списком.
 Его элемент, что находится с того конца, где предполагаются
 минимальные элементы, объявляем текущим элементом списка.
 Двигаемся в сторону предполагаемого возрастания. Цикл: {
   Как только следующий элемент Y оказывается меньше
   предыдущего Z, разрываем текущий список по связке
   между ними, и хвост объявляем началом нового текущего
   (заметим, что хотя бы один из элементов Y и Z стоит
   не на своем месте, поэтому списков не более 2*log(n))
 }
 Создаем из минимальных элементов списков priority queue,
 в качестве приоритета используя убывание. Цикл по ней: {
   Извлекаем из priority queue список, объявляем его
   текущим. Список, оказавшийся в начале очереди объявляем
   списком-кандидатом, а минимальный элемент списка-кандидата
   объявляем элементом-кандидатом. Цикл по текущему списку,
   двигаемся в сторону возрастания: {
     Если текущий элемент меньше элемента-кандидата,
       вставляем его в итоговый список,
       (всего эта операция будет выполнена ровно n раз)
     иначе
       возвращаем текуший список в priority queue и выходим
       из цикла по текущему списку. (поскольку либо
 элемент-кандидат,
       либо текущий элемент стояли не на своем месте, всего эта
       операция будет выполнена не более (2*log(n) раз)
   }
 }
 --
  /\ /\     С почти африканским приветом,
 ((ovo))    Владимир Анатольевич Перцель
 ():::()     http://voldemar.relhum.org
 --PVA---------------------------------------
 Блаженны умеющие смеяться над собой,  ибо не
 иссякнет источник их услады до конца дней их.
 --- ifmail v.2.15dev5
  * Origin: Sent via Graf's Inn at news://news.relhum.org (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 сортировка почти отсортированных данных   Max Alekseyev   15 Jul 2002 20:29:32 
 Re: сортировка почти отсортированных данных   Sergei Katkovsky   16 Jul 2002 10:17:57 
 Re: сортировка почти отсортированных данных   Nagval   16 Jul 2002 10:41:48 
 Re: соpтиpовка почти отсоpтиpованных данных   Mike Girkin   16 Jul 2002 18:59:30 
 RE: соpтиpовка почти отсоpтиpованных данных   Anatoly Svishev   17 Jul 2002 00:48:01 
 Re: сортировка почти отсортированных данных   Vladimir A. Pertzel   17 Jul 2002 11:27:44 
Архивное /ru.algorithms/13592cfdb7171.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional