Лес непересекающихся множеств

Лес непересекающихся множеств

Лес непересекающихся множествдревовидная структура данных для непересекающихся множеств.

Содержание

Представление множеств

Каждое множество представляется в виде корневого дерева. В лесу непересекающихся множеств каждый узел содержит один элемент множества и указывает только на свой родительский узел. Корень каждого дерева содержит представителя и является родительским для самого себя.

Операции над лесом непересекающихся множеств выполняются следующим образом:

MAKE_SET - создает дерево с одним узлом.

FIND_SET - передвигаемся по родительским ссылкам до корня дерева.

UNION - устанавливает указатель корня одного дерева на корень другого.

Эвристики для повышения эффективности

Объединение по рангу. Идея эвристики состоит в том, чтобы при выполнении операции UNION высота итогового дерева по возможности не увеличивалась. Для этого используется характеристика ранг для каждого корня, которая представляет собой верхнюю границу высоты узла. Операция MAKE_SET создаёт корень с рангом 0. Операция UNION, которая в этом случае называется объединение по рангу, действует следующим образом:

  • Если ранги корней различны, корень с меньшим рангом указывает на корень с большим рангом. Ранги корней не меняются.
  • Если ранги корней равны, любой из корней указывает на другой. Ранг того корня, на который указывает другой корень, увеличивается на 1.

Сжатие путей. Эвристика в процессе выполнения операции FIND_SET делает каждый узел (которые встретились при передвижении до корня) указывающим непосредственно на корень. Сжатие путей не изменяет ранги узлов.

Псевдокод

Рассмотрим пример реализации леса непересекающихся множеств. В массиве p будем хранить ссылку на родительских узел, а в массиве r ранг вершины.

operation MAKE_SET(x)
   p[x] = x
   r[x] = 0
operation FIND_SET(x)
   if x ≠ p[x] then
       p[x] = FIND_SET(p[x])
   return p[x]
operation UNION(x, y)
   if r[x] > r[y] then
       p[y] = x
   else
       p[x] = y
       if r[x] = r[y] then
           r[y] = r[y] + 1

Время работы

Будучи примененным раздельно, объединение по рангу и сжатие путей приводят к повышению эффективности операций над лесом непересекающихся множеств. Объединение по рангу само по себе дает время работы O(m~\lg{n}), где m — количество общее количетсво операций, а n — количетсво элементов в системе. Сжатие путей само по себе приводит ко времени работы в наихудшем случае O(n + f~\log_{2 + f/n}{n}), где f — количество операций FIND_SET. Применение обеих эвристик дает время работы в наихудшем случае O(m\ \alpha(n, m)), где \alpha(n, m) — обратная функция Аккермана. Эта оценка является нижней границей времени работы с непересекающимися множествами, поэтому лес непересекающихся множеств является оптимальной структурой для непересекающихся множеств.

Ссылки

Литература

  • Томас Кормен и др. Алгоритмы: построение и анализ = INTRODUCTION TO ALGORITHMS. — 2-е изд. — М.: «Вильямс», 2006. — С. 1296. — ISBN 0-07-013151-1

Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Полезное


Смотреть что такое "Лес непересекающихся множеств" в других словарях:

  • Структура данных для непересекающихся множеств — Значимость предмета статьи поставлена под сомнение. Пожалуйста, покажите в статье значимость её предмета, добавив в неё доказательства значимости по частным критериям значимости или, в случае если частные критерии значимости для… …   Википедия

  • Дерево (теория графов) — У этого термина существуют и другие значения, см. Дерево (значения). Дерево  это связный ациклический граф.[1] Связность означает наличие путей между любой парой вершин, ацикличность  отсутствие циклов и то, что между парами вершин… …   Википедия

  • Дерево (граф) — В теории графов, дерево связный (ориентированный или неориентированный) граф, не содержащий циклов (для любой вершины есть один и только один способ добраться до любой другой вершины). Древовидная структура тип организации, в котором каждый… …   Википедия

  • Алгоритм Краскала — алгоритм построения минимального остовного дерева взвешенного связного неориентированного графа. Открыт Джозефом Крускалом в 1956 году. Содержание 1 Реализация 2 Доказательство корректности алгоритма …   Википедия

  • Словарь терминов теории графов — Здесь собраны определения терминов из теории графов. Курсивом выделены ссылки на термины в этом словаре (на этой странице). # А Б В Г Д Е Ё Ж З И К Л М Н О П Р С …   Википедия

  • Глоссарий теории графов — Эта страница глоссарий. См. также основную статью: Теория графов Здесь собраны определения терминов из теории графов. Курсивом выделены ссылки на термины в этом словаре (на этой странице) …   Википедия

  • Вершина (граф) — Здесь собраны определения терминов из теории графов. Курсивом выделены ссылки на термины в этом словаре (на этой странице). # А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф …   Википедия

  • Длина пути в орграфе — Здесь собраны определения терминов из теории графов. Курсивом выделены ссылки на термины в этом словаре (на этой странице). # А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф …   Википедия

  • Дуга (теория графов) — Здесь собраны определения терминов из теории графов. Курсивом выделены ссылки на термины в этом словаре (на этой странице). # А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф …   Википедия

  • Инцидентность — Здесь собраны определения терминов из теории графов. Курсивом выделены ссылки на термины в этом словаре (на этой странице). # А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»