template<typename RandomGenerator, typename Graph> class erdos_renyi_iterator { public: typedef std::input_iterator_tag iterator_category; typedef std::pair<vertices_size_type, vertices_size_type> value_type; typedef const value_type& reference; typedef const value_type* pointer; typedef void difference_type; erdos_renyi_iterator(); erdos_renyi_iterator(RandomGenerator& gen, vertices_size_type n, double fraction = 0.0, bool allow_self_loops = false); erdos_renyi_iterator(RandomGenerator& gen, vertices_size_type n, edges_size_type m, bool allow_self_loops = false); // Iterator operations reference operator*() const; pointer operator->() const; erdos_renyi_iterator& operator++(); erdos_renyi_iterator operator++(int); bool operator==(const erdos_renyi_iterator& other) const; bool operator!=(const erdos_renyi_iterator& other) const; };
这个类模板实现了一个 Erdös-Renyi 图的生成器,适用于使用迭代器初始化来初始化 adjacency_list 或其他图形结构。一个 Erdös-Renyi 图 G = (n, p) 是一个具有 n 个顶点的图。在 G 中,任意顶点 u 和 v 之间存在边 (u, v) 的概率为 p。通常情况下,没有自环,但生成器可以选择性地以概率 p 引入自环。此生成器不会生成任何平行边,并将以排序顺序生成边(例如,compressed_sparse_row_graph 所要求的)。
Erdös-Renyi 图通常表现出很少的结构。因此,它们在现实世界问题建模中很少有用。然而,它们通常用于确定复杂图算法的理论复杂度。
如果您希望有可能生成平行边并且不关心排序顺序,请使用 erdos_renyi_iterator。
erdos_renyi_iterator();
构造一个超出末尾迭代器。
erdos_renyi_iterator(RandomGenerator& gen, vertices_size_type n, double fraction = 0.0, bool allow_self_loops = false);
构造一个 Erdös-Renyi 生成器迭代器,它创建一个具有以下项的图n个顶点和一个给定的fraction,即简单图可能具有的总边数的比例。probability。 随机顶点和边是使用随机数生成器选择的gen。 仅当allow_self_loops为true.
erdos_renyi_iterator(RandomGenerator& gen, vertices_size_type n, edges_size_type m, bool allow_self_loops = false);
构造一个 Erdös-Renyi 生成器迭代器,它创建一个具有以下项的图n个顶点和m条边时,才允许自环。probability。 随机顶点和边是使用随机数生成器选择的gen。 仅当allow_self_loops为true.
#include <boost/graph/adjacency_list.hpp> #include <boost/graph/erdos_renyi_generator.hpp> #include <boost/random/linear_congruential.hpp> typedef boost::adjacency_list<> Graph; typedef boost::erdos_renyi_iterator<boost::minstd_rand, Graph> ERGen; int main() { boost::minstd_rand gen; // Create graph with 100 nodes and edges with probability 0.05 Graph g(ERGen(gen, 100, 0.05), ERGen(), 100); return 0; }
版权所有 © 2005 |
Doug Gregor,印第安纳大学() Andrew Lumsdaine,印第安纳大学() |