LAL: Linear Arrangement Library 24.10.00
A library focused on algorithms on linear arrangements of graphs.
|
Exhaustive enumeration of labelled free trees. More...
#include <all_lab_free_trees.hpp>
Public Member Functions | |
all_lab_free_trees () noexcept | |
Empty constructor. | |
all_lab_free_trees (const uint64_t n) noexcept | |
Constructor with number of nodes. | |
all_lab_free_trees (const all_lab_free_trees &Gen) noexcept=default | |
Copy constructor. | |
all_lab_free_trees (all_lab_free_trees &&Gen) noexcept=default | |
Move constructor. | |
~all_lab_free_trees ()=default | |
Default destructor. | |
all_lab_free_trees & | operator= (const all_lab_free_trees &g) noexcept=default |
Copy assignment operator. | |
all_lab_free_trees & | operator= (all_lab_free_trees &&g) noexcept=default |
Move assignment operator. | |
void | init (const uint64_t n) noexcept |
Initializes the generator with a given number of vertices. | |
void | clear () noexcept |
Clears the memory used. | |
bool | end () const noexcept |
Returns true if the end of the iteration was reached. | |
void | next () noexcept |
Generates next tree. | |
void | reset () noexcept |
Sets the generator to its initial state. | |
graphs::free_tree | yield_tree () noexcept |
Yields a tree, advancing the generator if necessary. | |
graphs::free_tree | get_tree () noexcept |
Retrieve the generated tree. | |
void | activate_all_postprocessing_actions () noexcept |
Activates all postprocessing actions. | |
void | deactivate_all_postprocessing_actions () noexcept |
Deactivates all postprocessing actions. | |
void | set_normalize_tree (const bool v) noexcept |
Should trees be normalized? | |
void | set_calculate_size_subtrees (const bool v) noexcept |
Should the size of the subtrees be calculated? | |
void | set_calculate_tree_type (const bool v) noexcept |
Should the tree be classified into types? | |
Protected Member Functions | |
graphs::free_tree | __get_tree () noexcept |
Constructs the current tree. | |
void | __reset () noexcept |
Sets the generator to its initial state. | |
bool | has_next () const noexcept |
Returns whether there are more trees to generate. | |
Private Attributes | |
uint64_t | m_it |
Iterator on the sequence. | |
uint64_t | m_L |
Left-most position with value \(n-1\). | |
detail::array< uint64_t > | m_Prufer_seq |
Prüfer sequence. | |
detail::array< char > | m_sm |
If sm[i] = true iff sm[0..i-1] = true and seq[0..i] = n-2. | |
bool | m_reached_end = false |
Has the end of the generation been reached? | |
Static Private Attributes | |
static constexpr bool | is_free |
Helpful Boolean value to compact 'if constexpr' expressions. | |
Exhaustive enumeration of labelled free trees.
Generates all the labelled free trees of a given number of nodes. The algorithm implemented uses Prüfer sequences (see [41]) and decodes them in \(O(n)\).
In order to use this class, users must provide the size \(n\) of the tree (number of nodes) in the constructor. Trees are generated internally, i.e., trees are encoded in the internal state of the generator. Said state is updated using method next(), which updates it to encode the next tree in the generation. In order to retrieve the tree, use method get_tree(). Upon initialisation, the generator encodes the first tree, which has to be retrieved using method get_tree().
All the labelled free trees will have been generated when method end() returns true. At this point, method get_tree() will always construct the last tree in the enumeration, whichever tree it is. In order to restart the generation of these trees, call method reset(). It is allowed to call this method at any time.
A possible usage of this class is the following:
Alternatively, this class can be used in a for loop:
Equivalently,
|
inlinenoexcept |
Constructor with number of nodes.
n | Number of nodes. |
|
defaultnoexcept |
Copy constructor.
Gen | Exhaustive labelled free tree generator. |
|
defaultnoexcept |
Move constructor.
Gen | Exhaustive labelled free tree generator. |
|
protectedvirtualnoexcept |
Constructs the current tree.
Implements lal::generate::_tree_generator< graphs::free_tree >.
|
inlinenoexceptinherited |
Activates all postprocessing actions.
The full list of postprocessing actions can be found in the documentation of this class.
|
inlinenoexcept |
|
inlinenoexceptinherited |
Deactivates all postprocessing actions.
The full list of postprocessing actions can be found in the documentation of this class.
|
inlinenodiscardnoexceptinherited |
Retrieve the generated tree.
This function first calls __get_tree and then modifies the generated tree according to the values:
|
inlinenoexcept |
Initializes the generator with a given number of vertices.
n | Number of vertices. |
|
inlinenoexcept |
Generates next tree.
Modifies the internal state so that the next tree can be retrieved using method get_tree().
|
inlinenoexceptinherited |
Should the size of the subtrees be calculated?
v | Boolean value. |
|
inlinenoexceptinherited |
Should the tree be classified into types?
See lal::graphs::tree_type for details on the classification.
v | Boolean value. |
|
inlinenoexceptinherited |
Should trees be normalized?
v | Boolean value. |
|
inlinenodiscardvirtualnoexcept |
Yields a tree, advancing the generator if necessary.
In case the class that inherits from this one is exhaustive then this function also moves the generator forward with its appropriate method. If the class is random, then it just calls get_tree().
Implements lal::generate::_tree_generator< graphs::free_tree >.