
- •Факультет вычислительной математики и кибернетики
- •Описание алгоритмов
- •Постановка задачи
- •Алгоритм построение выпуклой оболочки с помощью сортировки
- •Алгоритм сортировки с использованиемd-куч.
- •Псевдокод операций используемых надd-кучей и некоторые оценки сложности.
- •Алгоритм сортировкиk-слиянием.
- •Алгоритм сортировки вставками.
- •Обоснование теоретических оценок временной сложности алгоритмов.
- •Сложность сортировки с помощьюd-куч:
- •Сложность сортировки с помощью сортировкиk-слиянием:
- •Описание программы.
- •Проведенные эксперименты.
- •Сравнение алгоритмов
Обоснование теоретических оценок временной сложности алгоритмов.
Временная сложность алгоритма построения выпуклой оболочки складывается из сложностей реализации каждого шага алгоритма. Таким образом, необходимо оценить сложность отдельных этапов:
Поиск лексикографического минимума с=lexmin{a1,…,an} осуществляется в 2 этапа.
На 1 этапе однократным просмотром массива ищутся точки с минимальной первой координатой. Сложность такой операции составляет О(n), где n – число элементов массива.
На 2 этапе поиск точки с минимальной второй координатой среди подмножества точек с минимальной первой координатой также выполняется посредством однократного просмотра массива. В худшем случае количество точек с минимальной первой координатой совпадает с размерностью исходного массива (случай, когда все точки имеют одинаковую первую координату). Поэтому сложность такой операции поиска не превышает О(n).
Перенос системы координат в точку с=lexmin{a1,…,an} осуществляется проходом по всему массиву с вычитанием соответствующих пар координат. Таким образом, сложность выполнения данного этапа порядка О(n).
Сортировка осуществляется с помощью 52-куч и сортируется алгоритмом сортировки 50-слиянием.
Сложность сортировки с помощьюd-куч:
Рассмотрим оценку для сортировки с помощью d-куч.
Для этого нужно оценить сложность следующих этапов:
Окучивание
В цикле по количеству элементов в массиве операция удаления минимального (DeleteMin) из d-кучи.
Сложность операции окучивания:
Теорема.
Вычислительная сложность операции окучивания равна О(n).
Доказательство:
Операция окучивания заключается в последовательном погружении элементов, начиная с последнего элемента дерева.
Сложность погружения с высоты i составляет O(d(h-i)). Псевдокод операции погружения (Diving) описан в предыдущем разделе. Сложность этой операции определяется:
сложностью операции поиска потомка с минимальным ключом (MinChild). Так как у каждого не листового узла, за исключением одного, ровно d потомков, то сложность операции MinChild порядка О(d).
числом итераций цикла, в котором эта операция выполняется. В самом худшем случае, число итераций будет равно h.
Следовательно, для узла с произвольного уровня оценка погружения будет равна O(dh), а для узла с высоты i - O(d(h-i)).
В любом завершенном
d-арном
дереве с n
узлами и высотой h
имеется не более чем
.
Совокупная сложность окучивания дерева высоты h:
Пусть h-i=j, то
получим:
Так как при
это ряд сходится равномерно, то получим:
ч.т.д.
Сложность операции удаления минимального (DeleteMin):
Фактически, данная операция включает в себя 2 операции:
swap
diving
Операция Swap выполняется за время О(1). И как было показано выше, операция погружения (diving) одного элемента выполняется за время О(dh). Оценим высоту дерева.
Теорема.
Высота h
завершенного
-арного
дерева удовлетворяет следующему
неравенству
.
Доказательство:
Минимальное число
узлов в дереве высоты
определяется следующим соотношением
,
т.к. в завершенном
-арном
дереве каждый узел, за исключением, быть
может, одного узла, содержит ровно
-потомков.
Тогда минимальное количество узлов
будет, когда этот один узел имеет одного
потомка.
Максимальное
количество узлов в дереве высоты
определяется следующим соотношением
.
Тогда максимальное количество узлов
будет, когда все узлы имеют ровно
-потомков.
Таким образом,
число узлов
в дереве высоты
удовлетворяет неравенству:
.
Логарифмируем левую и правую части данного неравенства:
Отсюда получаем,
,
ч.т.д.
Таким образом, верхняя оценка сложности операции погружения всех n элементов (трудоемкость второго этапа сортировки) составляет
Итак,
сложность сортировки с помощью d-куч
равна
=O(n*logn)