![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Boost Disjoint SetsBoost , ,
|
Ранг | Должна быть модельReadWritePropertyMapс целочисленным типом значения и ключевым типом, равным типу элемента набора. |
Родитель | Должна быть модельReadWritePropertyMapи тип ключа и значения такой же, как тип элемента набора. |
FindCompress | должен быть одним из объектов функции нахождения репрезентативного и пути сжатия. |
Типичный шаблон использования дляdisjoint_setsможно увидеть вkruskal_minimum_spanning_tree()алгоритм. В этом примере мы называемссылку().вместоunion_set(), посколькуuиvбыли получены изfind_set()и, следовательно, уже являются представителями для их наборов.
... disjoint_sets<Rank, Parent, FindCompress> dsets(rank, p); for (ui = vertices(G).first; ui != vertices(G).second; ++ui) dsets.make_set(*ui); ... while ( !Q.empty() ) { e = Q.front(); Q.pop(); u = dsets.find_set(source(e)); v = dsets.find_set(target(e)); if ( u != v ) { *out++ = e; dsets.link(u, v); } }
Member | Description |
---|---|
disjoint_sets(Rank r, Parent p) | Конструктор. |
disjoint_sets(const disjoint_sets&x) | Копировать конструктор. |
шаблон void make_set(Element x) |
Создает однотонный набор, содержащий Элементх. |
шаблон void link(Element x, Element y) |
Соединение двух множествпредставленоэлементомxиу. |
шаблон void union_set(Element x, Element y) |
Соедините два множества, которыесодержатэлементыхиу. Это эквивалентноссылке (find_set(x),find_set(y)). |
шаблон<класс Элемент> Элемент find_set(Элемент x) |
Возврат представителя для набора, содержащего элементx. |
шаблон<класс ElementIterator> std::size_t count_sets(ElementIterator first, ElementIterator last) |
Возвращает количество разрозненных наборов. |
шаблон<класс ElementIterator> void compress_sets(ElementIterator first, ElementIterator last) |
Расплющи дерево родителей так, чтобы родитель каждого элемента был его представителем. |
Сложность времениO(m alpha(m,n)), гдеalphaявляется функцией обратного Акермана,m— число операций разъединения (make_set(),find_set()иlink()иn— число элементов. Функцияальфарастет очень медленно, намного медленнее, чем функциялог.
disjoint_sets_with_storage<ID,InverseID,FindCompress>
Этот класс управляет хранением ранга и родительских свойств внутри. Хранилище находится в массивах, которые индексируются идентификатором элемента, следовательно, требование дляидентификатораифункторов InverseID. Ранговые и родительские свойства инициализируются во время строительства таким образом, что каждый элемент находится в наборе сам по себе (так что нет необходимости инициализировать объекты этого класса с функциейinitialize_incremental_components()). Этот класс особенно полезен при вычислении (динамических) связанных компонентов графаedge_list, который не обеспечивает место для хранения вершинных свойств.
Parameter | Description | Default |
---|---|---|
ID | Должна быть модельReadablePropertyMap, которая отображает элементы в целые числа между 0 и N, общее количество элементов в наборах. | boost::identity_property_map |
Инверсид | Должна быть модельReadablePropertyMap, которая отображает целые числа на элементы. | boost::identity_property_map |
FindCompress | должен быть одним из объектов функции нахождения репрезентативного и пути сжатия. | representative_with_full_path_compression |
У этого класса есть все члены вdisjoint_sets, а также следующие члены.
disjoint_sets_with_storage(size_type n = 0, ID id = ID(), InverseID inv = InverseID())Constructor.
template <class ElementIterator> void disjoint_sets_with_storage:: normalize_sets(ElementIterator first, ElementIterator last)This rearranges the representatives such that the representative of each set is the element with the smallest ID.
representative_with_path_halving<Parent>
Это функтор, который находит репрезентативную вершину для того же компонента, что и элементx. Во время прохождения по репрезентативному дереву, функтор также применяет технику сокращения пути вдвое, чтобы сократить высоту дерева.
Element operator()(Parent p, Element x)
representative_with_full_path_compression<Parent>
Это функтор, который находит репрезентативный элемент для множества, к которому принадлежит элементх.
Element operator()(Parent p, Element x)
Пересмотрено01 Декабря 200601 December, 2006[ORIG_END] -->
Copyright © 2000 | Джереми Сик, Univ.of Notre Damejsiek@lsc.nd.edu] Ли-Куан Ли, Univ.of Notre Damellee1@lsc.nd.edu] Эндрю Лумсдейн, Univ.of Notre Damelums@lsc.nd.edu |
Распространяется по лицензии Boost Software License, версия 1.0. (См. сопроводительный файлLICENSE_1_0.txtили копию на) http://www.boost.org/LICENSE_1_0.txt)
Статья Boost Disjoint Sets раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |