Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc > Class Template Referenceabstract

#include <random_graph.H>

Inheritance diagram for Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >:
[legend]
Collaboration diagram for Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >:
[legend]

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_Arcinsert_arc (GT_Node *src, GT_Node *tgt)
 
GT_Nodeselect_random_node (GT_Node *excluded=nullptr) noexcept
 Select a random node different from excluded.
 
GT_Nodeselect_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_rngr
 
Init_Node & init_node
 
Init_Arcinit_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
 

Detailed Description

template<class GT, class Init_Node, class Init_Arc>
class Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >

Definition at line 98 of file random_graph.H.

Member Typedef Documentation

◆ GT_Arc

template<class GT , class Init_Node , class Init_Arc >
typedef GT::Arc Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::GT_Arc
protected

Definition at line 102 of file random_graph.H.

◆ GT_Node

template<class GT , class Init_Node , class Init_Arc >
typedef GT::Node Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::GT_Node
protected

Definition at line 101 of file random_graph.H.

Constructor & Destructor Documentation

◆ Random_Graph_Base()

◆ ~Random_Graph_Base()

template<class GT , class Init_Node , class Init_Arc >
virtual Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::~Random_Graph_Base ( )
inlineprotectedvirtual

Member Function Documentation

◆ connect()

◆ create()

◆ create_nodes_and_initialize_arc_index()

◆ create_p()

◆ eulerian() [1/2]

template<class GT , class Init_Node , class Init_Arc >
GT Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::eulerian ( const size_t __num_nodes,
const double p 
)
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.

Warning
The procedure can be extremely slow and memory-intensive as __num_nodes increases.
Parameters
[in]__num_nodesNumber of nodes the graph should have.
[in]pProbability of an arc existing between any pair of nodes.
Returns
The randomly created graph.
Exceptions
bad_allocif there is not enough memory.
domain_errorif 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.

◆ eulerian() [2/2]

template<class GT , class Init_Node , class Init_Arc >
GT Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::eulerian ( const size_t __num_nodes,
const size_t __num_arcs 
)
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.

Parameters
[in]__num_nodesNumber of nodes the graph should have.
[in]__num_arcsNumber of arcs the graph should have.
Returns
The randomly created graph.
Exceptions
bad_allocif 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.

◆ initialize_and_create_nodes()

◆ insert_arc()

◆ make_eulerian()

◆ make_hamiltonian()

◆ select_random_node() [1/2]

template<class GT , class Init_Node , class Init_Arc >
GT_Node * Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::select_random_node ( DynList< GT_Node * > &  list)
inlineprotectednoexcept

◆ select_random_node() [2/2]

◆ update_parity_after_arc_insertion()

template<class GT , class Init_Node , class Init_Arc >
virtual void Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::update_parity_after_arc_insertion ( GT_Node src,
GT_Node tgt 
)
protectedpure virtual

Member Data Documentation

◆ g

template<class GT , class Init_Node , class Init_Arc >
GT Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::g
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().

◆ idx_arc

◆ init_arc

template<class GT , class Init_Node , class Init_Arc >
Init_Arc& Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::init_arc
protected

◆ init_node

◆ nodes

◆ num_arcs

◆ num_nodes

◆ r

◆ rand_max

template<class GT , class Init_Node , class Init_Arc >
unsigned long Aleph::Random_Graph_Base< GT, Init_Node, Init_Arc >::rand_max
mutableprotected

◆ save_parity


The documentation for this class was generated from the following file: