]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | .. Copyright (C) 2004-2009 The Trustees of Indiana University. |
2 | Use, modification and distribution is subject to the Boost Software | |
3 | License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
4 | http://www.boost.org/LICENSE_1_0.txt) | |
5 | ||
6 | =================================== | |
7 | |Logo| R-MAT generator | |
8 | =================================== | |
9 | ||
10 | :: | |
11 | ||
12 | template<typename RandomGenerator, typename Graph> | |
13 | class rmat_iterator | |
14 | { | |
15 | public: | |
16 | typedef std::input_iterator_tag iterator_category; | |
17 | typedef std::pair<vertices_size_type, vertices_size_type> value_type; | |
18 | typedef const value_type& reference; | |
19 | typedef const value_type* pointer; | |
20 | typedef void difference_type; | |
21 | ||
22 | rmat_iterator(); | |
23 | rmat_iterator(RandomGenerator& gen, vertices_size_type n, | |
24 | edges_size_type m, double a, double b, double c, | |
25 | double d, bool permute_vertices = true); | |
26 | // Iterator operations | |
27 | reference operator*() const; | |
28 | pointer operator->() const; | |
29 | rmat_iterator& operator++(); | |
30 | rmat_iterator operator++(int); | |
31 | bool operator==(const rmat_iterator& other) const; | |
32 | bool operator!=(const rmat_iterator& other) const; | |
33 | }; | |
34 | ||
35 | This class template implements a generator for R-MAT graphs [CZF04]_, | |
36 | suitable for initializing an adjacency_list or other graph structure | |
37 | with iterator-based initialization. An R-MAT graph has a scale-free | |
38 | distribution w.r.t. vertex degree and is implemented using | |
39 | Recursive-MATrix partitioning. | |
40 | ||
41 | Where Defined | |
42 | ------------- | |
43 | <``boost/graph/rmat_graph_generator.hpp``> | |
44 | ||
45 | Constructors | |
46 | ------------ | |
47 | ||
48 | :: | |
49 | ||
50 | rmat_iterator(); | |
51 | ||
52 | Constructs a past-the-end iterator. | |
53 | ||
54 | :: | |
55 | ||
56 | rmat_iterator(RandomGenerator& gen, vertices_size_type n, | |
57 | edges_size_type m, double a, double b, double c, | |
58 | double d, bool permute_vertices = true); | |
59 | ||
60 | Constructs an R-MAT generator iterator that creates a graph with ``n`` | |
61 | vertices and ``m`` edges. ``a``, ``b``, ``c``, and ``d`` represent | |
62 | the probability that a generated edge is placed of each of the 4 | |
63 | quadrants of the partitioned adjacency matrix. Probabilities are | |
64 | drawn from the random number generator gen. Vertex indices are | |
65 | permuted to eliminate locality when ``permute_vertices`` is true. | |
66 | ||
67 | Example | |
68 | ------- | |
69 | ||
70 | :: | |
71 | ||
72 | #include <boost/graph/adjacency_list.hpp> | |
73 | #include <boost/graph/rmat_graph_generator.hpp> | |
74 | #include <boost/random/linear_congruential.hpp> | |
75 | ||
76 | typedef boost::adjacency_list<> Graph; | |
77 | typedef boost::rmat_iterator<boost::minstd_rand, Graph> RMATGen; | |
78 | ||
79 | int main() | |
80 | { | |
81 | boost::minstd_rand gen; | |
82 | // Create graph with 100 nodes and 400 edges | |
83 | Graph g(RMATGen(gen, 100, 400, 0.57, 0.19, 0.19, 0.05), RMATGen(), 100); | |
84 | return 0; | |
85 | } | |
86 | ||
87 | ||
88 | Bibliography | |
89 | ------------ | |
90 | ||
91 | .. [CZF04] D Chakrabarti, Y Zhan, and C Faloutsos. R-MAT: A Recursive | |
92 | Model for Graph Mining. In Proceedings of 4th International Conference | |
93 | on Data Mining, pages 442--446, 2004. | |
94 | ||
95 | ----------------------------------------------------------------------------- | |
96 | ||
97 | Copyright (C) 2009 The Trustees of Indiana University. | |
98 | ||
99 | Authors: Nick Edmonds and Andrew Lumsdaine | |
100 | ||
101 | .. |Logo| image:: pbgl-logo.png | |
102 | :align: middle | |
103 | :alt: Parallel BGL | |
104 | :target: http://www.osl.iu.edu/research/pbgl |