на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно... |
Разделенные множества
Представление разделенных множеств с использованием рангов вершин и сжатия путей
Предыдущий способ реализации разделенных множеств можно еще улучшить за счет усовершенствования реализации операции НАЙТИ,( ). Она теперь будет выполняться в два прохода. При первом проходе находится корень того дерева, которому принадлежит . При втором проходе из в все встреченные узлы делаются непосредственными потомками узла . Этот прием, как мы увидим ниже, намного уменьшает время выполнения последующих операций НАЙТИ.
Реализация операций. Рассматриваемая реализация не требует новых полей данных по сравнению с предыдущим случаем. Как и прежде, для каждого узла будем хранить указатель на его родителя и ранг , который теперь не обязательно будет равен высоте дерева с корнем . Он будет равен этой высоте, если не использовать операцию НАЙТИ.
Операция СОЗДАТЬ ( ) выполняется с помощью операторов
В качестве родителя узла берется тот же самый , а его рангом считаем . Таким образом, время выполнения операции есть константа.
Операция ОБЪЕДИНИТЬ ( ) выполняется как и прежде, разница лишь в том, что вместо массива используется массив . Время выполнения операции — константа.
Операция НАЙТИ , как уже говорилось, выполняется в два прохода. При первом проходе мы идем от узла к его родителю, потом к родителю его родителя и так далее, пока не достигнем корня у дерева, содержащего узел . При втором проходе из в все встреченные на этом пути узлы делаются непосредственными потомками узла . Будем называть это "сжатием путей". Очевидно, как и раньше, время выполнения одной такой операции есть . Но ниже будет доказано, что время выполнения таких операций на самом деле меньше, чем . Заметим, что при выполнении этой операции ранги узлов не изменяются.
Анализ трудоемкости
Для анализа трудоемкости выполнения операций нам потребуются две функции. Одна из них, , является суперэкспонентой и определяется следующим образом:
Вторая — суперлогарифм , по основанию 2, определяемая соотношением
Суперлогарифм является в некотором смысле обратной функцией к суперэкспоненте, . Значения функций и при нескольких значениях аргументов приведены в следующих таблицах:
Ребро при текущем состоянии коллекции назовем корневым, если — корень и (петля); назовем его прикорневым, если — корень и , в противном случае — внутренним.
Отметим следующие свойства коллекции на множестве из элементов. Прикорневое ребро может превратиться во внутреннее, а корневое — в прикорневое только при выполнении операции ОБЪЕДИНИТЬ.
Внутреннее ребро при первом же выполнении операции НАЙТИ, "проходящей через него", исчезает, но вместо него появляется прикорневое ребро , при этом , следовательно, внутреннее ребро "участвует в поиске" не более одного раза.
Если при выполнении очередной операции ОБЪЕДИНИТЬ узел становится родителем узла , то после ее выполнения справедливо неравенство .
При выполнении операции НАЙТИ ранги узлов не изменяются, но узлы могут менять своих родителей, то есть меняется структура леса.
Если перед выполнением операции НАЙТИ узел был родителем узла , а после выполнения этой операции родителем узла стал узел , то выполняется неравенство . Следовательно, даже после изменения леса в результате выполнения операции НАЙТИ ранги вдоль любого пути от листа к корню будут строго возрастать.
При выполнении операции ОБЪЕДИНИТЬ ранг любого некорневого элемента не изменяется, а ранг корня либо сохраняется, либо увеличивается на 1.