|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
Extract tree topology: node indexing, adjacency, parent, order. More...
#include <Tree_DP.H>
Public Types | |
| using | Node = typename GT::Node |
| Node type. | |
| using | Arc = typename GT::Arc |
| Arc type. | |
Public Member Functions | |
| Tree_Topology (const GT &g, Node *root, SA sa=SA()) | |
| Preprocess tree topology. | |
| size_t | size () const noexcept |
| Returns number of nodes. | |
| Node * | root () const noexcept |
| Returns root node pointer. | |
| size_t | id_of (Node *node) const |
| Returns internal ID of a node. | |
| Node * | node_of (size_t id) const |
| Returns node pointer for a given ID. | |
| const Array< size_t > & | children (size_t id) const |
| Returns children IDs of a node. | |
| size_t | parent (size_t id) const noexcept |
| Returns parent ID of a node. | |
| const Array< size_t > & | post_order () const noexcept |
| Returns post-order traversal (leaves first, root last). | |
| const Array< Node * > & | nodes () const noexcept |
| Returns all node pointers indexed by ID. | |
Static Public Attributes | |
| static constexpr size_t | NONE = std::numeric_limits<size_t>::max() |
| Sentinel for null/none parent or id. | |
Private Member Functions | |
| void | index_nodes () |
| Assign unique IDs to nodes and validate the root. | |
| void | build_adjacency () |
| Build undirected adjacency list and verify tree properties. | |
| void | build_order () |
| BFS/DFS traversal to establish parent-child relations and order. | |
Private Attributes | |
| const GT * | graph_ = nullptr |
| Source graph. | |
| SA | sa_ |
| Arc filter. | |
| Node * | root_ = nullptr |
| Tree root. | |
| size_t | n_ = 0 |
| Number of nodes. | |
| Array< Node * > | id_to_node_ |
| Mapping from id to node pointer. | |
| MapOLhash< Node *, size_t > | node_to_id_ |
| Mapping from node pointer to id. | |
| Array< Array< size_t > > | children_ |
| Children list in the rooted tree. | |
| Array< size_t > | parent_ |
| Parent id for each node. | |
| Array< size_t > | order_ |
| Post-order traversal (leaves first). | |
Extract tree topology: node indexing, adjacency, parent, order.
This class preprocesses a graph tree to provide efficient access to parent-child relations and traversal orders.
| GT | Graph type. |
| SA | Arc filter. |
|
inline |
Preprocess tree topology.
| [in] | g | The graph tree. |
| [in] | root | The root node. |
| [in] | sa | The arc filter. |
| ah_domain_error | if not a tree or root not in graph. |
Definition at line 251 of file Tree_DP.H.
References Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_adjacency(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_order(), and Aleph::tree_dp_detail::Tree_Topology< GT, SA >::index_nodes().
|
inlineprivate |
Build undirected adjacency list and verify tree properties.
Definition at line 131 of file Tree_DP.H.
References ah_domain_error_if, ah_runtime_error_unless, Aleph::and, Aleph::tree_dp_detail::Tree_Topology< GT, SA >::children_, Aleph::divide_and_conquer_partition_dp(), GraphCommon< GT, Node, Arc >::get_src_node(), GraphCommon< GT, Node, Arc >::get_tgt_node(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::graph_, Aleph::tree_dp_detail::Tree_Topology< GT, SA >::n_, Aleph::Filter_Iterator< Container, It, Show_Item >::next_ne(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::node_to_id_, Aleph::tree_dp_detail::Tree_Topology< GT, SA >::sa_, and Aleph::MapOpenHash< Key, Data, Cmp, HashTable >::search().
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::Tree_Topology().
|
inlineprivate |
BFS/DFS traversal to establish parent-child relations and order.
Definition at line 183 of file Tree_DP.H.
References ah_domain_error_if, Aleph::Array< T >::append(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::children(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::children_, Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), Aleph::MapOpenHash< Key, Data, Cmp, HashTable >::find(), Aleph::DynListStack< T >::is_empty(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::n_, Aleph::tree_dp_detail::Tree_Topology< GT, SA >::node_to_id_, Aleph::tree_dp_detail::Tree_Topology< GT, SA >::NONE, Aleph::tree_dp_detail::Tree_Topology< GT, SA >::order_, Aleph::tree_dp_detail::Tree_Topology< GT, SA >::parent_, Aleph::DynListStack< T >::pop(), Aleph::DynListStack< T >::push(), Aleph::Array< T >::reserve(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::root_, Aleph::Array< T >::size(), and Aleph::DynListStack< T >::top().
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::Tree_Topology().
|
inline |
Returns children IDs of a node.
Definition at line 283 of file Tree_DP.H.
References Aleph::tree_dp_detail::Tree_Topology< GT, SA >::children_.
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_order().
|
inline |
Returns internal ID of a node.
Definition at line 266 of file Tree_DP.H.
References ah_domain_error_if, Aleph::tree_dp_detail::Tree_Topology< GT, SA >::node_to_id_, and Aleph::MapOpenHash< Key, Data, Cmp, HashTable >::search().
|
inlineprivate |
Assign unique IDs to nodes and validate the root.
Definition at line 99 of file Tree_DP.H.
References ah_domain_error_if, Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), GraphCommon< GT, Node, Arc >::get_num_nodes(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::graph_, Aleph::tree_dp_detail::Tree_Topology< GT, SA >::id_to_node_, Aleph::MapOpenHash< Key, Data, Cmp, HashTable >::insert(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::n_, Aleph::Filter_Iterator< Container, It, Show_Item >::next_ne(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::node_to_id_, Aleph::tree_dp_detail::Tree_Topology< GT, SA >::root_, and Aleph::MapOpenHash< Key, Data, Cmp, HashTable >::search().
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::Tree_Topology().
|
inline |
Returns node pointer for a given ID.
Definition at line 275 of file Tree_DP.H.
References ah_out_of_range_error_if, Aleph::tree_dp_detail::Tree_Topology< GT, SA >::id_to_node_, and Aleph::tree_dp_detail::Tree_Topology< GT, SA >::n_.
|
inlinenoexcept |
Returns all node pointers indexed by ID.
Definition at line 301 of file Tree_DP.H.
References Aleph::tree_dp_detail::Tree_Topology< GT, SA >::id_to_node_.
|
inlinenoexcept |
Returns parent ID of a node.
Definition at line 289 of file Tree_DP.H.
References Aleph::tree_dp_detail::Tree_Topology< GT, SA >::parent_.
|
inlinenoexcept |
Returns post-order traversal (leaves first, root last).
Definition at line 295 of file Tree_DP.H.
References Aleph::tree_dp_detail::Tree_Topology< GT, SA >::order_.
|
inlinenoexcept |
Returns root node pointer.
Definition at line 263 of file Tree_DP.H.
References Aleph::tree_dp_detail::Tree_Topology< GT, SA >::root_.
|
inlinenoexcept |
Returns number of nodes.
Definition at line 260 of file Tree_DP.H.
References Aleph::tree_dp_detail::Tree_Topology< GT, SA >::n_.
|
private |
Children list in the rooted tree.
Definition at line 94 of file Tree_DP.H.
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_adjacency(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_order(), and Aleph::tree_dp_detail::Tree_Topology< GT, SA >::children().
Source graph.
Definition at line 87 of file Tree_DP.H.
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_adjacency(), and Aleph::tree_dp_detail::Tree_Topology< GT, SA >::index_nodes().
|
private |
Mapping from id to node pointer.
Definition at line 92 of file Tree_DP.H.
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::index_nodes(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::node_of(), and Aleph::tree_dp_detail::Tree_Topology< GT, SA >::nodes().
|
private |
Number of nodes.
Definition at line 90 of file Tree_DP.H.
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_adjacency(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_order(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::index_nodes(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::node_of(), and Aleph::tree_dp_detail::Tree_Topology< GT, SA >::size().
|
private |
Mapping from node pointer to id.
Definition at line 93 of file Tree_DP.H.
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_adjacency(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_order(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::id_of(), and Aleph::tree_dp_detail::Tree_Topology< GT, SA >::index_nodes().
|
staticconstexpr |
Sentinel for null/none parent or id.
Definition at line 84 of file Tree_DP.H.
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_order().
|
private |
Post-order traversal (leaves first).
Definition at line 96 of file Tree_DP.H.
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_order(), and Aleph::tree_dp_detail::Tree_Topology< GT, SA >::post_order().
|
private |
Parent id for each node.
Definition at line 95 of file Tree_DP.H.
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_order(), and Aleph::tree_dp_detail::Tree_Topology< GT, SA >::parent().
|
private |
Tree root.
Definition at line 89 of file Tree_DP.H.
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_order(), Aleph::tree_dp_detail::Tree_Topology< GT, SA >::index_nodes(), and Aleph::tree_dp_detail::Tree_Topology< GT, SA >::root().
Arc filter.
Definition at line 88 of file Tree_DP.H.
Referenced by Aleph::tree_dp_detail::Tree_Topology< GT, SA >::build_adjacency().