|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
#include <random_graph.H>
Public Member Functions | |
| GT | eulerian (const size_t &__num_nodes, const size_t &__num_arcs) |
| Create a random Eulerian graph (sparse version). | |
| GT | eulerian (const size_t &__num_nodes, const double &p) |
| Create a random Eulerian graph (dense version). | |
| GT | sufficient_hamiltonian (const size_t &__num_nodes, const double &p=0.5) |
| Create a random Hamiltonian graph. | |
Protected Types | |
| typedef GT::Node | GT_Node |
| typedef GT::Arc | GT_Arc |
Protected Member Functions | |
| virtual void | update_parity_after_arc_insertion (GT_Node *src, GT_Node *tgt)=0 |
| GT_Arc * | insert_arc (GT_Node *src, GT_Node *tgt) |
| GT_Node * | select_random_node (GT_Node *excluded=nullptr) noexcept |
Select a random node different from excluded. | |
| GT_Node * | select_random_node (DynList< GT_Node * > &list) noexcept |
| Select a random node from the given list. | |
| virtual void | create_nodes_and_initialize_arc_index ()=0 |
| virtual void | connect ()=0 |
| void | initialize_and_create_nodes (const size_t &__num_nodes, const size_t &__num_arcs) |
| Random_Graph_Base (const unsigned long seed, const Init_Node &__init_node, const Init_Arc &__init_arc) | |
| virtual | ~Random_Graph_Base () |
| GT | create (const size_t &__num_nodes, const size_t &__num_arcs, const bool connected) |
| Create a sparse random graph. | |
| virtual GT | create_p (const size_t &__num_nodes, const double &p, bool connected)=0 |
| virtual void | make_eulerian ()=0 |
| virtual void | make_hamiltonian ()=0 |
Protected Attributes | |
| gsl_rng * | r |
| Init_Node & | init_node |
| Init_Arc & | init_arc |
| std::unique_ptr< DynArray< GT_Node * > > | nodes |
| std::unique_ptr< IndexArc< GT > > | idx_arc |
| size_t | num_nodes |
| size_t | num_arcs |
| unsigned long | rand_max |
| GT | g |
| bool | save_parity |
Definition at line 98 of file random_graph.H.
|
protected |
Definition at line 102 of file random_graph.H.
|
protected |
Definition at line 101 of file random_graph.H.
|
inlineprotected |
Definition at line 185 of file random_graph.H.
References ah_bad_alloc_if, Aleph::maps(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::r, and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::rand_max.
|
inlineprotectedvirtual |
Definition at line 199 of file random_graph.H.
References Aleph::maps(), and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::r.
|
protectedpure virtual |
|
inlineprotected |
Create a sparse random graph.
Definition at line 206 of file random_graph.H.
References Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::connect(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::g, Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::idx_arc, Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::initialize_and_create_nodes(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::insert_arc(), Aleph::maps(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::num_arcs, and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::select_random_node().
Referenced by Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::eulerian(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::eulerian(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::operator()(), and Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::operator()().
|
protectedpure virtual |
|
inline |
Create a random Eulerian graph (dense version).
This version builds a random Eulerian graph with probability p of an arc existing between any pair of nodes.
Use this routine to generate dense graphs. In this case, use a value of p greater than or equal to 0.5.
__num_nodes increases.| [in] | __num_nodes | Number of nodes the graph should have. |
| [in] | p | Probability of an arc existing between any pair of nodes. |
| bad_alloc | if there is not enough memory. |
| domain_error | if p is not in the range (0, 1]. |
Definition at line 274 of file random_graph.H.
References Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::g, Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::make_eulerian(), and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::save_parity.
|
inline |
Create a random Eulerian graph (sparse version).
This version builds a sparse random graph that is guaranteed to be Eulerian; that is, it contains Eulerian cycles.
The process first generates a sparse random graph, then examines the result and creates new arcs so that the output contains an Eulerian cycle.
| [in] | __num_nodes | Number of nodes the graph should have. |
| [in] | __num_arcs | Number of arcs the graph should have. |
| bad_alloc | if there is not enough memory. |
Definition at line 248 of file random_graph.H.
References Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::create(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::g, Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::make_eulerian(), Aleph::maps(), and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::save_parity.
|
inlineprotected |
Definition at line 168 of file random_graph.H.
References ah_domain_error_if, Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::g, GraphCommon< GT, Node, Arc >::is_digraph(), Aleph::maps(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::num_arcs, and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::num_nodes.
Referenced by Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::create(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_p(), and Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_p().
|
inlineprotected |
Definition at line 127 of file random_graph.H.
References Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::g, Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::idx_arc, Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::init_arc, Aleph::Dlink::insert(), Aleph::List_Graph< _Graph_Node, _Graph_Arc >::insert_arc(), and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::update_parity_after_arc_insertion().
Referenced by Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::balance_digraph_node(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::balance_digraph_nodes_degree(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::balance_graph_nodes_degree(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::connect(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::connect(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::create(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::make_eulerian(), and Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::make_eulerian().
|
protectedpure virtual |
|
protectedpure virtual |
|
inlineprotectednoexcept |
Select a random node from the given list.
Definition at line 155 of file random_graph.H.
References Aleph::DynList< T >::Iterator::get_curr_ne(), Aleph::maps(), Aleph::HTList::Iterator::next_ne(), and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::r.
|
inlineprotectednoexcept |
Select a random node different from excluded.
Definition at line 136 of file random_graph.H.
References Aleph::maps(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::nodes, Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::num_nodes, and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::r.
Referenced by Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::connect(), and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::create().
|
protected |
Definition at line 118 of file random_graph.H.
Referenced by Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::Random_Digraph(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::Random_Graph(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::Random_Graph(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::~Random_Digraph(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::balance_digraph_node(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::balance_digraph_nodes_degree(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::balance_graph_nodes_degree(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::connect(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::connect(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::create(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::eulerian(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::eulerian(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::eulerian(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::eulerian(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::initialize_and_create_nodes(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::insert_arc(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::make_hamiltonian(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::make_hamiltonian(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::sufficient_hamiltonian(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::sufficient_hamiltonian(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::update_parity_after_arc_insertion(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::update_parity_after_arc_insertion(), and Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::verify_tables().
|
protected |
Definition at line 112 of file random_graph.H.
Referenced by Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::balance_digraph_node(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::balance_digraph_nodes_degree(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::balance_graph_nodes_degree(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::connect(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::create(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::insert_arc(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::make_eulerian(), and Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::make_eulerian().
|
protected |
Definition at line 107 of file random_graph.H.
Referenced by Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::insert_arc().
|
protected |
Definition at line 106 of file random_graph.H.
Referenced by Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), and Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index().
|
protected |
Definition at line 109 of file random_graph.H.
Referenced by Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::balance_digraph_node(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::balance_digraph_nodes_degree(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::balance_graph_nodes_degree(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::make_hamiltonian(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::make_hamiltonian(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::select_random_node(), and Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::verify_tables().
|
mutableprotected |
Definition at line 115 of file random_graph.H.
Referenced by Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::create(), and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::initialize_and_create_nodes().
|
mutableprotected |
Definition at line 114 of file random_graph.H.
Referenced by Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::initialize_and_create_nodes(), and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::select_random_node().
|
protected |
Definition at line 104 of file random_graph.H.
Referenced by Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::Random_Graph_Base(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::~Random_Graph_Base(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::balance_digraph_node(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::balance_digraph_nodes_degree(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::balance_graph_nodes_degree(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_p(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::make_eulerian(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::make_eulerian(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::select_random_node(), and Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::select_random_node().
|
mutableprotected |
Definition at line 116 of file random_graph.H.
Referenced by Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::Random_Graph_Base().
|
protected |
Definition at line 120 of file random_graph.H.
Referenced by Aleph::Random_Graph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::create_nodes_and_initialize_arc_index(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::eulerian(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::eulerian(), Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::eulerian(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::eulerian(), Aleph::Random_Graph< GT, Init_Node, Init_Arc >::update_parity_after_arc_insertion(), and Aleph::Random_Digraph< GT, Init_Node, Init_Arc >::update_parity_after_arc_insertion().