Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

AlgStr / МПХОИ / MPXOI3

.TXT
Скачиваний:
26
Добавлен:
23.03.2015
Размер:
14.91 Кб
Скачать
З А Д А Н И Я
по курсу "Методы представления, хранения и обработки информации"

З А Д А Н И Е N 3

Т Е М А : СОРТИРОВКА информации в структурах данных.

Т Е Р М И Н О Л О Г И Я :
-----------------------
Пусть у нас имеется N элементов R1, R2, ..., RN. Назовем их
записями, а всю совокупность N записей назовем файлом. Каждая
запись Rj имеет ключ Kj, который служит для идентификации записи.
Если доступ к элементу файла осуществляется по ключу, то такой файл
принято называть таблицей (в отличие от массива, где доступ
осуществляется по индексу, который не хранится в элементе массива
(вычисляемый доступ)). Помимо ключа запись может содержать
дополнительную сопутствующую "информацию", которая не влияет на
сортировку, но всегда остается вэтой записи.

На множестве ключей вводится отношение порядка "<" таким
образом, чтобы для любых трех значений ключа A, B, C выполнялись
следующие условия:
1) справедливо одно и только одно из соотношений
A < B, A = B, B < A (закон трихотомии);
2) если A < B и B < C, то A < C (закон транзитивности).
Эти свойства определяют математическое понятие линейного
упорядочения, называемого еще совершенным упорядочением.

Таблица называется сортированной (упорядоченной), если
K1 <= K2 <= ... <= KN. В противном случае таблица считается
несортированной.

Алгоритм сортировки - это процедура, которая реорганизует файл
записей таким образом, чтобы ключи записей оказались в возрастающем
(убывающем) порядке. Благодаря такому упорядоченному расположению
группируются записи с близкими ключами, становится возможной эффек-
тивная обработка группы файлов, отсортированных по одному ключу,
создается основа для эффективных алгоритмов выборки и более убеди-
тельно выглядят документы, подготовленные с помощью ЭВМ.

Существует множество алгоритмов сортировки. Было бы прекрасно,
если бы только один или два метода сортировки превосходили все ос-
тальные безотносительно к приложению или используемой машине. На
самом же деле каждый метод имеет свои собственные, одному ему при-
сущие достоинства. Например, метод пузырька (алгоритм 5.2.2B) не
имеет ярко выраженных преимуществ, так как всегда можно найти луч-
ший способ сделать то, что он делает; но даже этот метод после со-
ответствующего обобщения оказывается полезным для сортировки с дву-
мя лентами (см. п. 5.4.8). Итак приходим к выводу, что почти все
алгоритмы заслуживают того, чтобы о них помнили, так как существуют
приложения, в которых они оказываются весьма хорошими.

В следующем кратком обзоре освещаются основные аспекты наибо-
лее важных алгоритмов внутренней сортировки.

1. Распределяющий подсчет.
----------------------
Алгоритм 5.2D очень полезен, если диапазон ключей невелик. Ме-
тод устойчив (не изменяется порядок записей с равными ключами), но
требуется память для счетчиков и 2*N записей. Одна из модификаций,
экономящая N из этих записей ценой устойчивости, встречается в
упр. 5.2-13.

2. Простые вставки.
---------------
Алгоритм 5.2.1 S наиболее прост для программирования, не тре-
бует дополнительного пространства и вполне эффективен при малых N
(скажем, при N <= 25). При больших N он становится невыносимо мед-
ленным, если только исходные данные не окажутся сразу почти упо-
рядоченными.
3. Сортировка с убывающим шагом.
----------------------------
Алгоритм 5.2.1 D (метод Шелла) также довольно просто програм-
мируется, использует минимальный объем памяти и довольно эффективен
при умеренно больших N (скажем, при N < 1000).

4. Встака в список.
---------------
Алгоритм 5.2.1 L основан на той же идее, что и простые вставки,
и поэтому годится только при небольших N. Как и в других методах сор-
тировки списков в, благодаря операциям со ссылками экономится стои-
мость перемещения длинных записей; это особенно удобно, когда записи
имеют переменную длину или являются частью других структур данных.

5. Сортировка с вычислением адреса.
-------------------------------
Она эффективна, если ключи подчиняются известному (обычно равно-
мерному) закону распределения; важнейшими вариантами этого подхода
являются вставки в несколько списков (алгоритм 5.2.1 M) и комбиниро-
ванная поразрядная сортировка со вставками Макларена (рассмотренная
__
в конце п.5.2.5). Для последнего метода достаточно иметь O(\/ N) до-
полнительных ячеек памяти.

6. Обменная сортировка со слиянием.
-------------------------------
Алгоритм 5.2.2 M (Метод Бэтчера) и родственный ему алгоритм би-
тонной солртировки (упр. 5.3.4-10) полезны, если можно одновременно
выполнить большое число сравнений.

7. Обменная сортировка с разделением (метод Хоара или быстрая
----------------------------------------------------------
сортировка).
-----------
Алгоритм 5.2.2 Q, вероятно, самый полезный универсальный алго-
ритм внутренней сортировки, поскольку он требует очень мало памяти
и опережает своих конкурентов по среднему времени выполнения на боль-
шинстве вычислительных машин. Однако в наихудшем случае он может ра-
ботать очень медленно. Поэтому, если вероятность неслучайных данных
очень велика, приходится тщательно выбирать разделяющий элемент. Ес-
ли выбирается медиана из трех элементов, (как предлагается в упр.
5.2.2-55), то такое поведение, как в наихудшем случае, становится
крайне маловероятным и, кроме того, несколько уменьшается среднее
время работы.

8. Простой выбор.
-------------
Алгоритм 5.2.3 S довольно прост и особенно подходит в случае,
когда имеется специальное оборудование для быстрого поиска наимень-
шего элемента в списке.

9. Пирамидальная сортировка.
------------------------
Алгоритм 5.2.4 H при минимальных требованиях к памяти обеспе-
чивает достаточно высокую скорость сортировки; как среднее время
работы, так и максимальное время примерно вдвое больше среднего
времени быстрой сортировки.

10. Слияние списков.
---------------
Алгоритм 5.2.4 L осуществляет сортировку списков, при которой,
так же как и при пирамидальной сортировке, обеспечивается весьма
высокая скорость даже в наихудшем случае, кроме того, этот метод
устойчив по отношению к равным ключам.

11. Поразрядная сортировка.
----------------------
Алгоритм 5.2.5 R это не что иное, как сортировка списков, ко-
торая приемлема для ключей, либо очень коротких, либо имеющих нео-
бычайный порядок лексикографического сравнения. Вместо ссылок мож-
но применить распределяющий подсчет; такая процедура потребует
пространства для 2N записей и для таблицы счетчиков, но благодаря
простоте внутреннего цикла она особенно хороша для сверхбыстрых
ЭВМ - "пожирательниц чисел", имеющих опережающее управление. (Пре-
достережение: поразрядную сортировку не следует использовать при
малых N !!!).

12. Сортировка вставками и слиянием.
-------------------------------
Этот алгоритм (см п. 5.3.1) наиболее приемлем при очень малых
N в "прямолинейных" программах. Например, этот метод оказался бы
подходящим в тех приложениях, где требуется сортироватьмного групп
из пяти или шести записей.

13. Гибридные методы.
----------------
Могут оказаться полезными и гибридные методы, объединяющие
один или более из приведенных выше методов. Например, короткие
подфайлы, возникающие при быстрой сортировке, можно сортировать
слиянием и вставками.

14. Безымянный метод.
----------------
И наконец, для реализации безымянного метода, встретившегося
в ответе к упр. 5.2.1-3 требуется, по-видимому, кратчайшая из воз-
можных программ сортировки. Но среднее время работы такой програмы
пропорционально N*N*N, т.е. это самая медленная программа сорти-
ровки в книге!

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ ПО ТЕМЕ << СОРТИРОВКА >>
-----------------------------------------------

-------------------------------------------------------------------
N за- ! Название ! Обозна-! Лите-
дания! алгоритма ! чение ! ратура
-------------------------------------------------------------------
1. Сортировка вставками
--------------------
1.1 ! Сортировка простыми вставками ! S ! стр. 102
1.2 ! Бинарные вставки ! - ! стр. 103
1.3 ! Двухпутевые вставки ! - ! стр. 104
1.4 ! Сортировка с убывающим шагом (метод ! !
! Шелла) ! D ! стр. 105
1.5 ! Вставки в список ! L ! стр. 120
1.6* ! Комбинированный метод Уиллера ! - ! стр. 122
1.7 ! Сортировка вставкой в бинарное дерево ! - !
! (Бернес - Ли) ! - ! стр. 122
1.8* ! Метод группировки операций при вставке ! - ! стр. 123
1.9* ! Сортировка с вычислением адреса ! - !
! (вставка в несколько списков) ! M ! стр. 123
-------------------------------------------------------------------
2. Обменная сортировка
-------------------
2.1 ! Метод "пузырька" ("обменная сортировка ! !
! выбором" или метод "распространения" ! B ! стр. 132
2.2 ! "Шейкер - сортировка" ! - ! стр. 135
2.3 ! Параллельная сортировка Бэтчера ! M ! стр. 138
2.4 ! Быстрая сортировка (сорт-ка Хоара) ! - ! стр. 140
2.5 ! Обменная сортировка с разделением ! Q ! стр. 143
2.5 ! Обменная поразрядная сортировка ! R ! стр. 151
-------------------------------------------------------------------
3. Сортировка посредством выбора
-----------------------------
3.1 ! Сортировка посредством простого выбора ! S ! стр. 169
3.2 ! Сортировка посредством квадратичного ! !
! выбора ! - ! стр. 172
3.3 ! Сортировка посредством выбора из дерева ! - ! стр. 173
3.4 ! Сортировка посредством выбора из дерева ! !
! с "заглядыванием вперед" (Айверсон) ! - ! стр. 175
3.5 ! Пирамидальная сортировка ! H ! стр. 177
3.6 ! Использование пирамид для работы с боль-! !
! шими приоритетными очередями ! - ! стр. 182
3.7 ! Представление приоритетных очередей в ! !
! виде связанных бинарных деревьев (Кларк ! !
! Э. Крэйн) ! - ! стр. 183
-------------------------------------------------------------------
4. Сортировка слиянием
-------------------
4.1 ! Сортировка двухпутевым слиянием ! R ! стр. 193
4.2 ! Сортировка естественным двухпутевым ! !
! слиянием ! N ! стр. 195
4.3 ! Сортировка простым двухпутевым слиянием ! S ! стр. 198
4.4 ! Комбинирование алгоритма сортировка ! !
! простым двухпутевым слиянием с простыми ! !
! вставками ! - ! стр. 199
4.5 ! Сортировка посредством слияния списков ! L ! стр. 200
-------------------------------------------------------------------
5. Распределяющая сортировка
-------------------------
5.1 ! Поразрядная сортировка списка ! R и H ! стр. 209
5.2 ! СЦ - поразрядная сортировка ! - ! стр. 214
5.3 ! Комбинация МЦ - метода с методом простых! !
! вставок ! - ! стр. 214
-------------------------------------------------------------------
6. Оптимальная сортировка
----------------------

6.1. Сортировка с минимальным числом сравнений
-----------------------------------------
6.1.1 ! Сортировка вставками и слиянием ! - ! стр. 223

6.2. Слияние с минимальным числом сравнений
--------------------------------------
6.2.1 ! Бинарное слияние ! H ! стр. 246

6.3. Выбор с минимальным числом сравнений - стр. 251
------------------------------------
6.3.1 ! Алгоритм выбора Райвеста и Тарьяна ! - ! стр. 260

6.4. Сети сортировки
---------------

6.4.1. Сети с минимальным числом сравнений
-----------------------------------

6.4.2. Сети с минимальным временем
---------------------------

6.4.3. Сети слияния
------------
6.4.3.1 ! Битонная сортировка ! - ! стр. 279

6.4.4. Сети выбора
-----------
-------------------------------------------------------------------
7. Внешняя сортировка
------------------

7.1. Выбор с замещением R стр. 306
------------------
7.1.1 ! Преобразование отрезков с задержкой ! - ! стр. 308
7.1.2 ! Натуральный выбор ! - ! стр. 310

7.2. Многофазное слияние
-------------------
7.2.1 ! Сортировка многофазным слиянием с ис- ! !
! пользованием "горитзонтального" распре- ! !
! деления ! D ! стр. 322
7.2.2 ! Метод Кэйрона ! - ! стр. 333
7.2.3 ! Расщепление лент ! - ! стр. 335

7.3. Каскадное слияние
-----------------
7.3.1 ! Сортировка каскадным слиянием со специ- ! !
! альным распределением ! C ! стр. 347

7.4. Осциллирующая сортировка
------------------------
7.4.1 ! Осциллирующая сортировка с перекрестным ! !
! распределением ! B ! стр. 373
7.4.2 ! Прогнозирование с плавающими буферами ! F ! стр. 383

7.5. Внешняя поразрядная сортировка
------------------------------
7.5.1 ! Сортировка таблицы цветов ! - ! стр. 95
7.5.2 ! Сортировка ключей ! - ! стр. 95
7.5.3 ! Сортировка списка ! - ! стр. 97
7.5.4 ! Сортировка подсчетом ! !
! Сравнение и подсчет ! C ! стр. 97
7.5.5 ! Распределяющий подсчет ! D ! стр. 100
-------------------------------------------------------------------



Соседние файлы в папке МПХОИ