ЛОГИКА и ТЕОРИЯ АЛГОРИТМОВ Методические указания к лабораторным работам ЛАБОРАТОРНАЯ РАБОТА № 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/