Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / LAB1_New.doc
Скачиваний:
36
Добавлен:
23.03.2015
Размер:
1.32 Mб
Скачать
  1. Сортировка вставками

    1. Простые вставки (Алгоритм S)

Последовательно чередуются операции сравнения и перемещения. Проникновение записи Rj на положенное ей место часто называют просеиванием или погружением.

    1. Бинарные вставки

При поиске места вставки можно не последовательно просматривать элементы, а использовать для этого идею бинарного поиска.

      1. Двухпутевые вставки

Идея метода: сократить число необходимых перемещений. Суть метода: первый элемент помещается в середину области вывода и место для последующих элементов освобождается с помощью сдвигов влево или вправо, туда, куда удобнее. На этом можно сэкономить примерно половину времени работы по сравнению с простыми вставками за счет некоторого усложнения программы. Можно реализовать этот метод используя дополнительно памяти не более, чем для N записей.

1.3. Сортировка с убывающим шагом (метод Шелла, алгоритм d)

Сначала, например, делим 16 записей на 8 групп (R1, R9) (R2, R10) … (R8, R16) и сортируем внутри групп. Затем делим на 4 группы (R1, R5, R9, R13) … (R4, R8, R12, R16) и опять сортируем каждую группу по отдельности и т.д. Процесс завершается, когда группа содержит все записи файла. В каждом из этих промежуточных процессов сортировки участвуют либо сравнительно короткие файлы, либо уже сравнительно хорошо упорядоченные. Потому на каждом этапе можно пользоваться простыми вставками. Записи довольно быстро достигают своего конечного положения. Последовательность расстояний между элементами одной группы ht, ht-1, …, h1 может быть любой (h1 обязательно должна быть 1).

    1. Вставка в список

В методе вставок чередуются две операции:

а) просмотр упорядоченного файла для нахождения наибольшего ключа меньшего или равного данному;

б) вставка новой записи в определенное место.

Среди общих способов улучшения алгоритма один из самых важных основывается на тщательном анализе структур. Часто реорганизация структур данных позволяет избежать ненужных операций, что дает существенный эффект. Для повышения эффективности операции б) правильной структурой для данного метода будет линейный однонаправленный список.

Анализ временной сложности алгоритмов

    1. Простые вставки (Алгоритм S)

Алгоритм требует 1/4 N^2 сравнений и 1/4 N^2 перемещений.

    1. Бинарные вставки

Алгоритм требует N log2N сравнений и 1/4 N^2 перемещений.

      1. Двухпутевые вставки

Алгоритм позволяет сократить число перемещений до 1/8 N^2.

    1. Сортировка с убывающим шагом (метод Шелла, алгоритм D)

Алгоритм позволяет сократить число сравнений и перемещений до N^1.3 для значений N встречающихся на практике. При N - ∞ это число можно сократить до N(log2N)^2.

    1. Вставка в список

Алгоритм требует 1/4 N^2 сравнений и 0 перемещений и 2N изменений связей.

Замечание. Можно ли соединить лучшие свойства этих методов, сократив число сравнений до порядка N log2N как при бинарных вставках, и исключив при этом перемещения данных как при вставках в список? Ответ: да.

    1. Комбинация методов

      1. Метод Уиллера

Это достигается переходом к древовидной структуре. Дж. Уиллер предложил использовать двухпутевые вставки до тех пор, пока не появится необходимость перемещать данные. Тогда вместо того, чтобы их перемещать, вставляется указатель на новую область памяти и тот же самый метод рекуррентно применяется ко всем элементам, которые нужно вставить в эту новую память.

      1. Сортировка вставкой в бинарное дерево (метод Бернес-Ли)

Аналогичная, но более простая схема вставки в дерево с использованием бинарных деревьев предложена Бернес-Ли. Этот метод и его модернизации очень важны как для сортировок, так и для поиска.

      1. “Группировка” операций

Еще один путь улучшить простые вставки – попытаться вставлять несколько элементов одновременно. Если довести эту идею до ее естественного завершения, то мы заново откроем для себя сортировку посредством слияния.

      1. Сортировка с вычислением адреса (вставка в несколько списков)

Основная идея – так обобщить метод вставок в список, чтобы располагать не одним списком, а несколькими. При этом, каждый список будет содержать ключи из определенного диапазона.

Важное предположение: ключи должны быть распределены довольно равномерно.

Множество всех возможных значений ключей разбивается на M отрезков и предположим, что данный ключ попадает в данный отрезок с вероятностью1/M. Отводим дополнительную память под головы M списков, а каждый список строим, как при простых вставках в список.

Благодаря применению связанной памяти не возникает проблемы распределения памяти при использовании списков переменной длины.

Если M не слишком велико, то среднее время работы сокращается в M раз. Однако максимальное время работы гораздо больше среднего.

При M=N среднее время работы ≈ 34,36 N.

При M=N/2 среднее время работы ≈ 34,52 N.

При M=N/10 среднее время работы ≈ 48,04 N.

Итак, мы получили метод сортировки с временем порядка N при условии, что ключи равномерно распределены в области изменения.

Соседние файлы в папке AlgStr