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

AlgStr / МПХОИ / MPXOI3

.DOC
Скачиваний:
31
Добавлен:
23.03.2015
Размер:
33.28 Кб
Скачать

Ç À Ä À Í È ß

по курсу "Методы представления, хранения и обработки информации"

Ç À Ä À Í È Å 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

-------------------------------------------------------------------

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