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

11.4. Наборы и Структуры Союза/Находить 539

Выполнение внедрения последовательности

Внедрение последовательности выше просто, но это также эффективно как следование - шоу теоремы луга.

Суждение 11.9: Выполнение серии n makeSet, союза, и находит, что операции, используя основанное на последовательности внедрение выше, начинаясь с первоначально пустого разделения берут O (n, регистрируют n), время.

Оправдание: Мы используем бухгалтерский метод и предполагаем, что один кибердоллар может заплатить в течение времени, чтобы выполнить операцию по находке, makeSet операцию или движение - ment объекта положения от одной последовательности до другого в операции союза. В случае находки или makeSet операции, мы взимаем с самой операции 1 кибердоллар. В случае операции союза, однако, мы взимаем 1 кибердоллар к каждому положению, которое мы перемещаем от одного набора до другого. Обратите внимание на то, что мы ничего не заряжаем к самим операциям союза. Ясно, полные обвинения, чтобы найти и makeSet операции составляют в целом O (n).

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

Амортизируемая продолжительность операции в серии makeSet, союза, и

найдите операции, полное время, потраченное для ряда, разделенного на число oper-ations. Мы завершаем от суждения выше этого для разделения, осуществленного, используя последовательности, амортизируемая продолжительность каждой операции - O (зарегистрируйте n). Таким образом мы можем суммировать выполнение нашего простого основанного на последовательности разделения imple-процесс мышления следующим образом.

Суждение 11.10: Используя основанное на последовательности внедрение разделения, в серии n makeSet, союза, и находят операции, начинающиеся с первоначально пустого разделения, амортизируемая продолжительность каждой операции - O (зарегистрируйте n).

Обратите внимание на то, что в этом основанном на последовательности внедрении разделения, каждый находит, что oper-ation берет худший случай O (1) время. Это - продолжительность операций союза, которая является вычислительным узким местом.

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

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

Основанное на дереве внедрение разделения

Альтернативная структура данных использует коллекцию деревьев, чтобы сохранить n элементы в наборах, где каждое дерево связано с различным набором. (См. рисунок 11.17.) В частности мы осуществляем каждое дерево со связанной структурой данных, узлы которой - самостоятельно объекты положения набора. Мы все еще рассматриваем каждое положение p, как являющееся узлом, имеющим переменную, элемент, обращаясь к его элементу x и переменной, устанавливаем, обращаясь к набору, содержащему x, как прежде. Но теперь мы также рассматриваем каждое положение p, как являющееся типа данных «набора». Таким образом ссылка набора каждого положения p может указать на положение, которое могло даже быть самим p. Кроме того, мы осуществляем этот подход так, чтобы все положения и их соответствующие ссылки набора вместе определили коллекцию деревьев.

Мы связываем каждое дерево с набором. Для любого положения p, если ориентиры набора p назад к p, то p - корень своего дерева и название набора, содержащего p, «p» (то есть, мы используем имена положения в качестве определенных имен в этом случае). Иначе, ссылка набора для p указывает родителю p в его дереве. В любом случае набор, содержащий p, является тем, связанным с корнем дерева, содержащего p.

Рисунок 11.17: основанное на дереве внедрение разделения, состоящего из трех несвязных

наборы: =1, 4, 7, B =2, 3, 6, 9, и C =5, 8, 10, 11, 12.

С этой структурой данных разделения операционный союз (A, B) называют с положением

аргументы p и q, которые соответственно представляют наборы A и B (то есть, = p и B = q). Мы выполняем эту операцию, делая одно из деревьев поддеревом другого (рисунок 11.18b), который может быть сделан в O (1) время, установив ссылку набора корня одного дерева указать на корень другого дерева. Операция находит для положения p, выполнен, приблизившись к корню дерева, содержащего положение p (рисунок 11.18a), который берет O (n) время в худшем случае.

Сначала, это внедрение, может казаться, не лучше, чем основанная на последовательности структура данных, но мы добавляем следующие две простых эвристики, чтобы заставить его бежать быстрее.

Союз размером: Магазин, с каждым узлом положения p, размер поддерева укоренился

в p. В операции союза заставьте дерево меньшего набора стать поддеревом другого дерева и обновить поле размера корня получающегося дерева.