Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

Глава 11. Сортировка, наборы и выбор

Изучение сортировки алгоритмической линзы

Резюмируя наши обсуждения сортировки к этому пункту, мы описали несколько денатуратов - отравляется большой дозой наркотика или с худшим случаем или ожидал продолжительность O (n, регистрируют n) на входе se-айва размера n. Эти методы включают вид слияния и быстрый вид, описанный в этой главе, а также виде кучи (Раздел 8.3.5). В этой секции мы изучаем сортировку как алгоритмическую проблему, решая общие проблемы о сортировке алгоритмов.

11.3.1 Более низкое направляющееся в сортировку

Естественный первый вопрос спросить состоит в том, можем ли мы сортировать немного быстрее, чем O (n, регистрируют n),

время. Интересно, если вычислительный примитив, используемый алгоритмом сортировки, является сравнением двух элементов, то это является, фактически, лучшим, мы можем сделать - сравнение - у базируемой сортировки естьW (n, регистрируют n), худший случай ниже привязал свою продолжительность. (Вспомните

примечание W (∙) от Раздела 4.2.3.), Чтобы сосредоточиться на главной стоимости сравнения -

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

Предположим, что нам дают последовательность S = (x0, x1..., xn-1), что мы хотим сортировать, и

предположите, что все элементы S отличны (это не действительно ограничение, так как мы получаем связанное более низкое). Мы не заботимся, осуществлен ли S как множество или связанный список, ради наш ниже связанный, так как мы только считаем сравнения. Каждый раз, когда алгоритм сортировки сравнивает два элемента xi и x j, то есть, это спрашивает, «xi <x j?», есть два результата: «да» или «нет». Основанный на результате этого сравнения, алгоритм сортировки может выполнить некоторые внутренние вычисления (который мы не считаем здесь), и в конечном счете выполняет другое сравнение между двумя другими элементами S, у которого снова есть два результата. Поэтому, мы можем представлять основанный на сравнении алгоритм сортировки с деревом решений T (вспомните Пример 7.8). Таким образом, каждый внутренний узел v в T соответствует сравнению, и края от узла v его детям соответствуют вычислениям, следующим или из «да» или из ответа «нет». Важно отметить, что у гипотетического рассматриваемого алгоритма сортировки, вероятно, нет явного знания дерева T. T просто представляет все возможные последовательности сравнений, которые алгоритм сортировки мог бы сделать, начинающийся с первого сравнения (связанный с корнем) и заканчивающийся последним сравнением (связанный с родителем внешнего узла).

Каждый возможный начальный заказ или перестановка, элементов в S заставляет наш гипотетический алгоритм сортировки выполнять серию сравнений, пересекая путь в T от корня до некоторого внешнего узла. Давайте свяжемся с каждым внешним узлом v в T, тогда, наборе перестановок S, которые заставляют наш алгоритм сортировки заканчиваться в v. Самое важное наблюдение в нашем более низко-направляющемся аргументе состоит в том, что каждый внешний узел v в T может представлять последовательность сравнений для самое большее одной перестановки S. Оправдание за это требование просто: если два различных