Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
3.4. СОРТДЕРЕВОМ — УПОРЯДОЧЕНИЕ С ПОМОЩЬЮ O(n log n) СРАВНЕНИЙТак как любой сортирующий алгоритм, упорядочивающий с помощью сравнений, затрачивает по необходимости Сортдеревом лучше всего понять в терминах двоичного дерева вроде изображенного на рис. 3.5, у которого каждый лист имеет глубину Пример 3.3. На рис. 3.5 изображено сортирующее дерево. Заметим, что последовательность элементов, лежащих на пути из любого листа в корень, линейно упорядочена и наибольший элемент в поддереве всегда соответствует его корню. На следующем шаге алгоритма Сортдеревом из сортирующего дерева удаляется наибольший элемент — он соответствует корню дерева. Метка некоторого листа переносится в корень, а сам лист удаляется. Затем полученное дерево переделывается в сортирующее, и процесс повторяется. Последовательность элементов, удаленных из сортирующего дерева, упорядочена по невозрастанию. Удобной структурой данных для сортирующего дерева служит такой массив А, что
Рис. 3.5. Сортирующее дерево. элементы в левом и правом сыновьях (если они существуют) того узла, в котором хранится Например, сортирующее дерево на рис. 3.5 можно представить массивом
Заметим, что узлы наименьшей глубины стоят в этом массиве первыми, а узлы равной глубины стоят в порядке слева направо. Не каждое сортирующее дерево можно представить таким способом. На языке представления деревьев можно сказать, что для образования такого массива требуется, чтобы листья самого низкого уровня стояли как можно левее (как, например, на рис. 3.5). Если сортирующее дерево представляется описанным массивом, то некоторые операции из алгоритма Сортдеревом легко выполнить. Например, согласно алгоритму, нужно удалить элемент из корня, где-то запомнить его, переделать оставшееся дерево в сортирующее и удалить непомеченный лист. Можно удалить наибольший элемент из сортирующего дерева и запомнить его, поменяв местами Пример 3.4. Рассмотрим на примере сортирующего дерева рис. 3.5, что происходит, когда мы поменяем местами первый и последний элементы массива, представляющего это дерево. Новый массив
соответствует помеченному дереву на рис. 3.6,а. Элемент 16 исключается из дальнейшего рассмотрения. Чтобы превратить полученное дерево в сортирующее, надо поменять местами элемент 4 с большим из его сыновей, т. е. с элементом 11. В своем новом положении элемент 4 обладает сыновьями 10 и 5. Так как они больше 4, то 4 переставляется с 10, большим сыном. После этого сыновьями элемента 4 в новом положении становятся 1 и 2. Поскольку 4 превосходит их обоих, дальнейшие перестановки не нужны.
Рис. 3.6. а — результат перестановки элементов 4 и 16 в сортирующем дереве рис. 3.5; б - результат перестройки сортирующего дерева и удаления элемента 16. Полученное в результате сортирующее дерево показано на рис. 3.6,6. Заметим, что хотя элемент 16 был удален из сортирующего дерева, он все же присутствует в конце массива Теперь перейдем к формальному описанию алгоритма Сорт-деревом. Пусть Алгоритм 3.3. Построение сортирующего дерева Вход. Массив элементов Выход. Элементы массива Метод. В основе алгоритма лежит рекурсивная процедура ПЕРЕСЫПКА. Ее параметры
Параметр Алгоритм, превращающий весь массив А в сортирующее дерево, выглядит просто:
Покажем, что алгоритм 3.3 преобразует А в сортирующее дерево за линейное время. Лемма 3.2. Если узлы Доказательство. Доказательство проводится возвратной индукцией по Базис, т. е. случай Для шага индукции заметим, что если Аналогично, если узел в Теорема 3.5. Алгоритм 3.3 преобразует А в сортирующее дерево за линейное время. Доказательство. Применяя лемму 3.2, можно с помощью простой возвратной индукции по Пусть Алгоритм 3.3 вызывает процедуру ПЕРЕСЫПКА, если не считать рекурсивных вызовов, один раз для каждого узла. Поэтому время, затрачиваемое на Теперь можно завершить детальное описание алгоритма Алгоритм 3.4. Сортдеревом Вход. Массив элементов Выход. Элементы массива А, расположенные в порядке неубывания. Метод. Применяется процедура
Теорема 3.6. Алгоритм 3.4 упорядочивает последовательность из Доказательство. Корректность алгоритма доказывается индукцией по числу выполнений основного цикла, которое обозначим через Следствие. Алгоритм Сортдеревом имеет временную сложность
|
1 |
Оглавление
|