ЛАБОРАТОРНАЯ РАБОТА № 9x

advertisement
ЛОГИКА и ТЕОРИЯ АЛГОРИТМОВ
Методические указания к лабораторным работам
ЛАБОРАТОРНАЯ РАБОТА № 9
АНАЛИЗ АЛГОРИТМОВ СОРТИРОВКИ И ПОИСКА
Цель работы: изучение описания и разработка алгоритмов, анализ сложности алгоритмов
через подсчет элементарных операций и разработка программ сортировки.
1. Теоретические сведения
Для получения функции трудоемкости алгоритма, выраженной в элементарных операциях,
используем следующие элементарные операции:
1) Простое присваивание: а  b
2) Одномерная индексация a[i]
3) Арифметические операции: *
/-+
4) Операции сравнения: a < b
5) Логические операции {or, and, not}
Алгоритм сортировки — это алгоритм для упорядочения элементов в списке. В случае, когда
элемент списка имеет несколько полей, поле, служащее критерием порядка, называется ключом
сортировки. На практике в качестве ключа часто выступает число, а в остальных полях хранятся какие-либо
данные, никак не влияющие на работу алгоритма. Устойчивая сортировка не меняет взаимного
расположения элементов с одинаковыми ключами.
2. Варианты алгоритмов сортировки
Здесь n — это количество записей, которые необходимо упорядочить.
Алгоритмы устойчивой сортировки
1)
Сортировка выбором (англ. Selection sort) — Сложность алгоритма: O(n2); поиск
наименьшего или наибольшего элемента и помещение его в начало или конец упорядоченного
списка
2)
Сортировка пузырьком (англ. Bubble sort ) — сложность алгоритма: O(n2); для каждой пары
индексов производится обмен, если элементы расположены не по порядку.
3)
Сортировка перемешиванием (Шейкерная, Cocktail sort, bidirectional bubble sort) —
Сложность алгоритма: O(n2)
4)
Гномья сортировка — имеет общее с сортировкой пузырьком и сортировкой вставками.
Сложность алгоритма — O(n2).
5)
Сортировка вставками (Insertion sort) — Сложность алгоритма: O(n2); определяем, где
текущий элемент должен находиться в упорядоченном списке и вставляем его туда.
6)
Сортировка слиянием (Merge sort) — Сложность алгоритма: O(n log n); требуется O(n)
дополнительной памяти; выстраиваем первую и вторую половину списка отдельно, а затем —
сливаем упорядоченные списки.
7)
Сортировка с помощью двоичного дерева (англ. Tree sort) — Сложность алгоритма:
O(n log n); требуется O(n) дополнительной памяти.
ЛОГИКА и ТЕОРИЯ АЛГОРИТМОВ
Методические указания к лабораторным работам
8)
Алгоритм сортировки Timsort (англ. Timsort) — Сложность алгоритма: O(n log n); требуется
O(n) дополнительной памяти; Комбинированный алгоритм (используется сортировка
вставками и сортировка слиянием. Разработан для использования в языке Python..
Алгоритмы неустойчивой сортировки
9)
Сортировка Шелла (Shell sort) — сложность алгоритма:
сортировку вставками.
; попытка улучшить
10)
Сортировка расчёской (Comb sort) — сложность алгоритма:
11)
Пирамидальная сортировка (сортировка кучи, Heapsort) — сложность
алгоритма:
в конец списка.
; превращаем список в кучу, берём наибольший элемент и добавляем его
12)
Плавная сортировка (Smoothsort) — сложность алгоритма:
13)
Быстрая сортировка (Quicksort), в варианте с минимальными затратами памяти —
сложность алгоритма:
— среднее время,
— худший случай; широко
известен как быстрейший из известных для упорядочения больших случайных списков; с
разбиением исходного набора данных на две половины так, что любой элемент первой половины
упорядочен относительно любого элемента второй половины; затем алгоритм применяется
рекурсивно к каждой половине. При использовании
сделать сортировку устойчивой.
дополнительной памяти, можно
14)
Introsort — сложность алгоритма:
, сочетание быстрой и пирамидальной
сортировки. Пирамидальная сортировка применяется в случае, если глубина рекурсии
превышает
15)
.
Patience sorting — сложность алгоритма:
— наихудший случай, требует
дополнительно
памяти, также находит самую длинную увеличивающуюся
подпоследовательность
16)
Stooge sort — рекурсивный алгоритм сортировки с временной
сложностью
.
3. Содержание задания:
Ознакомиться в предложенной литературе с описанием алгоритма генерации
подмножества заданного типа и составить программу, реализующую формулу вычисления
количества вариантов генерации, а также дающую возможность, при желании пользователя,
обозреть полученные результаты и сравнить количественные характеристики.
4. Последовательность выполнения работы:
- изучение описания и анализ сложности алгоритма;
- составление тестов и спецификаций данных;
- разработка интерфейса пользователя;
- отладка программы;
- оформление отчета по установленной форме.
ЛОГИКА и ТЕОРИЯ АЛГОРИТМОВ
Методические указания к лабораторным работам
5. Применяемые оборудование и программные средства:
персональный компьютер, операционная система, система программирования и языковые
программные средства, изученные ранее.
6. Литература:
1.
Кормен. Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. – М.
Издательский дом “Вильямс”, 2005 г.
2.
Дж. Макконнелл. Анализ алгоритмов. Активный обучающий подход. – М.:
Техносфера, 2009 – 416 с.
3.
Лавров В.И., Максимова Л.Л. Задачи по теории множеств, математической логики и
теории алгоритмов. – М.: Наука, 2008 – 223с.
4.
Гаврилов Г.П., Сапоженко А.А. Сборник задач по дискретной математике. – М.:
Наука, 1997 – 367с.
5.
Андерсон, Джеймс А. Дискретная математика и комбинаторика. - Пер. с англ. —
М. : Издатель- Издательский дом "Вильямс", 2004. — 960 с.
6.
http://www.intuit.ru/
7.
http://www.edu.ru/
Download