$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: asutton_at_[hidden]
Date: 2007-08-21 14:02:36
Author: asutton
Date: 2007-08-21 14:02:35 EDT (Tue, 21 Aug 2007)
New Revision: 38829
URL: http://svn.boost.org/trac/boost/changeset/38829
Log:
Finsihed B&K docs.
Rearranged the degree_centrality stuff a bit
Text files modified: 
   sandbox/SOC/2007/graphs/libs/graph/doc/boost_reference.qbk                     |     9 ++                                      
   sandbox/SOC/2007/graphs/libs/graph/doc/reference/bron_kerbosch_all_cliques.qbk |   139 +++++++++++++++++++++++++++++++++----   
   sandbox/SOC/2007/graphs/libs/graph/doc/reference/degree_centrality.qbk         |   144 ++++++++++++++++++++--------------------
   sandbox/SOC/2007/graphs/libs/graph/doc/reference/tiernan_all_cycles.qbk        |     5                                         
   4 files changed, 206 insertions(+), 91 deletions(-)
Modified: sandbox/SOC/2007/graphs/libs/graph/doc/boost_reference.qbk
==============================================================================
--- sandbox/SOC/2007/graphs/libs/graph/doc/boost_reference.qbk	(original)
+++ sandbox/SOC/2007/graphs/libs/graph/doc/boost_reference.qbk	2007-08-21 14:02:35 EDT (Tue, 21 Aug 2007)
@@ -78,6 +78,13 @@
     boost_graph.reference.algorithms.subgraph.tiernan_all_cycles.__tiernan_girth_and_circumference___
     [^tiernan_girth_and_circumference()]]]
 
+[template bron_kerbosch_all_cliques[] [link
+    boost_graph.reference.algorithms.subgraph.bron_kerbosch_all_cliques.__bron_kerbosch_all_cliques___
+    [^bron_kerbosch_all_cliques()]]]
+[template bron_kerbosch_clique_number[] [link
+    boost_graph.reference.algorithms.subgraph.bron_kerbosch_all_cliques.__bron_kerbosch_clique_number___
+    [^bron_kerbosch_clique_number()]]]
+
 
 [/ Measures /]
 [template degree_centrality[] [link
@@ -136,3 +143,5 @@
 [import ../examples/eccentricity.cpp]
 [import ../examples/tiernan_print_cycles.cpp]
 [import ../examples/tiernan_girth_circumference.cpp]
+[import ../examples/bron_kerbosch_print_cliques.cpp]
+[import ../examples/bron_kerbosch_clique_number.cpp]
Modified: sandbox/SOC/2007/graphs/libs/graph/doc/reference/bron_kerbosch_all_cliques.qbk
==============================================================================
--- sandbox/SOC/2007/graphs/libs/graph/doc/reference/bron_kerbosch_all_cliques.qbk	(original)
+++ sandbox/SOC/2007/graphs/libs/graph/doc/reference/bron_kerbosch_all_cliques.qbk	2007-08-21 14:02:35 EDT (Tue, 21 Aug 2007)
@@ -9,24 +9,48 @@
 [template ex_bron_kerbosch_printing_cliques[] [link
     boost_graph.reference.algorithms.subgraph.bron_kerbosch_all_cliques.examples.printing_cliques
     Printing Cliques Example]]
+[template ex_bron_kerbosch_clique_number[] [link
+    boost_graph.reference.algorithms.subgraph.bron_kerbosch_all_cliques.examples.clique_number
+    Clique Number Example]]
 
 [heading Overview]
 This algorithm finds all /cliques/ of the given graph, invoking a visitor when
-each clique is found. A clique is a maximally connected subgraph meaning that
-each pair of vertices in the clique are connected to each other.
+each clique is found. A clique is formally defined as a maxiamally connected
+subgraph of a graph. This means that there are no more (and no fewer) vertices
+in the graph that are connected to all other vertices in the graph. A vertex can
+participate in many cliques. Note that the smallest clique contains two vertices
+since each vertex is connected to the other.
+
+Consider the social network (represented by an undirected graph) in Figure 1.
+
+[figure
+    images/reference/social_network.png
+    *Figure 1.* A network of friends.
+]
 
-For directed graphs, a /directed clique/ is similarly defined. For each pair
-of vertices /u/ and /v/ in a directed clique, there are edges /(u,v)/ and /(v,u)/
-that connect them.
+There are a number of cliques in the graph. We can easily identify the two largest:
 
-The Bron-Kerbosch algorithm was originally developed to operate over adjacency
-matrices of undirected graphs. It will, however, work equally well for directed
-graphs given the previous definition at a constant increase in cost. However,
-using this algorithm with an adjaceny list occurs significant overhead due to
-the use of edge lookups.
+* Scott, Jill, and Mary
+* Frank, Howard, and Anne
+
+There are six other cliques represented by pairs of actors. Note that the Scott,
+Mary, Frank, and Laurie do not form a clique because Mary and Frank are not directly
+connected. See the [ex_bron_kerbosch_printing_cliques] for more details.
+
+The /clique number/ of a graph is defined as the size (the number of vertices) of
+the largest clique in the graph. The social network in Figure 1 has a clique number
+of 3. The [bron_kerbosch_clique_number] implements this measure. See the
+[ex_bron_kerbosch_clique_number] for an example of its use.
 
-The Bron-Kerbosch algorithm was originally developed for undirected graphs, but
-will work for directed graphs as well (possibly at added cost).
+The Bron-Kerbosch algorithm was originally developed to operate over adjacency
+matrices representing /undirected graphs/. The algorithm can also be applied to
+/directed graphs/ using a more restrictive definition of a connected subgraph.
+A /directed clique/ is a maximally connected subgraph in which each pair of vertices
+/u/ and /v/ are connected by the edges /(u, v)/ and /(v, u)/.
+
+Although the algorithm can be used with adjacency list-based graph classes, it
+will perform less efficiently than an adjacency matrix. Also, running this algorithm
+on a directed graph will double the performance penalty (which is generally negligible).
 
 [section [^bron_kerbosch_all_cliques()]]
     #include <boost/graph/bron_kerbosch_all_cliques.hpp>
@@ -62,24 +86,105 @@
             [CliqueVisitor] class.
         ]
     ]
+    [
+        [optional, in] [`std::size_t min`]
+        [
+            The minimum size of a clique to visit.
+
+            *Default:* 2 - the size of the smallest possible clique.
+        ]
+    ]
 ]
 
-[h5 Complexity]
+[heading Complexity]
 This problem has a loose upper bound of ['O(2[super n])] if one considers all possible
 combinations of subsets of vertices as cliques (i.e., the powerset of vertices).
 The original publication, however, approximates the runtime of the algorithm as
 being proportional to ['O(3.14[super n])].
 
 Graphs that do not meet the constant-time requirements of the [AdjacencyMatrix]
-concept will incur additional runtime costs during execution (usually by a small linear
-factor). Examples of such graphs include the [undirected_graph],
-[directed_graph], and the [adjacency_list] classes.
+concept will incur additional runtime costs during execution (usually by a linear
+factor). Examples of such graphs include the [undirected_graph], [directed_graph],
+and the [adjacency_list] classes.
+
+Note that using the Bron-Kerbosch algorithm on directed graphs will doubles the
+amount of time it takes to determine edge connection.
 [endsect]
 
+[section [^bron_kerbosch_clique_number()]]
+    #include <boost/graph/bron_kerbosch_all_cliques.hpp>
+
+    template <typename Graph, typename Visitor>
+    std::size_t bron_kerbosch_clique_number(const Graph& g)
+
+The `bron_kerbosch_clique_number()` function returns the size of the largest
+clique in a graph - its clique number.
+
+[heading Parameters]
+[table
+    [[Type] [Parameter] [Description]]
+    [
+        [required, in] [`const Graph& g`]
+        [
+            The graph for which cliques are being visited.
+
+            *Preconditions:* The indices of vertices in the graph must be
+            in the range \[0, `num_vertices(g)`).
+
+            *Requirements:* The `Graph` type must be a model of the [AdjacencyMatrix],
+            [IncidenceGraph] concept and the [VertexIndexGraph]
+            concepts[footnote Any `Graph` typen that implements the `edge()`
+            function will satisfy the expression requirements for the
+            [AdjacencyMatrix], but may incur additional overhead due non-constant
+            implementations.].
+        ]
+    ]
+]
+
+[heading Return]
+The `bron_kerbosch_clique_number()` function returns the size of the largest
+clique in the the graph `g`.
+
+[heading Complexity]
+The `bron_kerbosch_clique_number()` function has the same complexity as the
+[bron_kerbosch_all_cliques] function.
+[endsect]
 
 [section Examples]
 [heading Printing Cliques]
-Write Me!
+This example demonstrates how to find and print all the cliques in a graph.
+
+[code_bron_kerbosch_print_cliques]
+
+If given the input file `social_network.graph`, which represents the social network
+pictured in Figure 1 of the
+[link boost_graph.reference.algorithms.subgraph.bron_kerbosch_all_cliques.overview Overview],
+the program will produce the following output:
+
+[pre
+Scott Jill Mary
+Scott Bill
+Scott Frank
+Mary Laurie
+Bill Josh
+Josh Frank
+Frank Laurie
+Frank Anne Howard
+]
+
+[heading Clique Number]
+This example demonstrates the use of the [bron_kerbosch_clique_number] example.
+
+[code_bron_kerbosch_clique_number]
+
+If given the input file `social_network.graph`, which represents the social network
+pictured in Figure 1 of the
+[link boost_graph.reference.algorithms.subgraph.bron_kerbosch_all_cliques.overview Overview],
+the program will produce the following output:
+
+[pre
+clique number: 3
+]
 
 [endsect]
 
Modified: sandbox/SOC/2007/graphs/libs/graph/doc/reference/degree_centrality.qbk
==============================================================================
--- sandbox/SOC/2007/graphs/libs/graph/doc/reference/degree_centrality.qbk	(original)
+++ sandbox/SOC/2007/graphs/libs/graph/doc/reference/degree_centrality.qbk	2007-08-21 14:02:35 EDT (Tue, 21 Aug 2007)
@@ -123,20 +123,13 @@
 returns in constant time.
 [endsect]
 
-[section [^all_degree_centralities()]]
-    #include <boost/graph/degree_centrality.hpp>
-
-    template <typename Graph, typename CentralityMap>
-    void all_degree_centralities(const Graph& g, CentralityMap cent);
-
-    template <typename Graph, typename CentralityMap, typename Measure>
-    void all_degree_centralities(const Graph& g, CentralityMap cent, Measure measure);
+[section [^influence()]]
+    template <typename Graph, typename Vertex>
+    typename graph_traits<Graph>::degree_size_type
+    influence(const Graph& g, Vertex v);
 
-The `all_degree_centralities()` computes the degree centrality for each vertex in the
-graph, assigning the values to an output property map. Optionally, a degree measure
-can be given, specializing the computation of degree centrality. See the
-[degree_centrality_measures] section for more details on the influence and
-prestige measures.
+The `influence()` function the influence of the vertex to the caller. The influence
+of a vertex is the same as its out-degree.
 
 [heading Parameters]
 [table
@@ -146,54 +139,37 @@
         [
             The graph object for which the degree centralities will be computed.
 
-            *Requirements:* The `Graph` type must model the [VertexListGraph]
-            and [IncidenceGraph] concepts. If the `Measure` parameter is given
-            as `prestige_measure`, then the graph must be a model of the
-            [BidirectionalGraph] concept.
-        ]
-    ]
-    [
-        [required, out] [`CentralityMap cent`]
-        [
-            The property map that contains the degree centralities of all vertices
-            in a graph after calling the `degree_centrality()` function.
-
-            *Requirements:* The `CentralityMap` type must be a model of the
-            [WritablePropertyMap] concept. The `key_type` of the map must
-            be the same as the `vertex_descriptor` of the `Graph` type. If the
-            `Measure` parameter is given in the call, then the `value_type`
-            of `CentralityMap` must be the same as `Measure::degree_type`.
-            Otherwise, the `value_type` must be the same as the `degree_size_type`
-            of the graph.
+            *Requirements:* The `Graph` type must be a model of the [IncidenceGraph]
+            concept. If the `Measure` parameter is given as `prestige_measure`,
+            then the graph must be a model of the [BidirectionalGraph] concept.
         ]
     ]
     [
-        [optional, in] [`Measure measure`]
+        [required, in] [`Vertex v`]
         [
-            The `measure` parameter allows the caller to override the default
-            computation of degree centrality for a vertex.
+            The vertex descriptor for which the degree centrality is computed.
 
-            *Requirements:* The `Measure` type must be a model of the
-            [DegreeMeasure] concept. The `degree_type` of `Measure` must
-            be the same as the `value_type` of the `CentralityMap` type.
+            *Requirements:* The `Vertex` type must be the same as the `vertex_descriptor`
+            of the `Graph` parameter.
         ]
     ]
 ]
 
+[heading Return Value]
+The `influence()` function returns the influence of the vertex, which is the same
+as its out-degree.
+
 [heading Complexity]
-The `all_degree_centralities()` function returns in /O(n*O(M))/ where /n/ is the
-number of vertices in the graph and /M/ is a measure of a vertex. If the measure
-is not specified or is `influence_measure` or `prestige_measure`, this function
-returns in linear time.
+The `influence()` function returns in constant time.
 [endsect]
 
-[section [^influence()]]
+[section [^prestige()]]
     template <typename Graph, typename Vertex>
     typename graph_traits<Graph>::degree_size_type
-    influence(const Graph& g, Vertex v);
+    prestige(const Graph& g, Vertex v);
 
-The `influence()` function the influence of the vertex to the caller. The influence
-of a vertex is the same as its out-degree.
+The `prestige()` function the prestige of the vertex to the caller. The prestige
+of a vertex is the same as its in-degree.
 
 [heading Parameters]
 [table
@@ -220,22 +196,27 @@
 ]
 
 [heading Return Value]
-The `influence()` function returns the influence of the vertex, which is the same
+The `prestige()` function returns the influence of the vertex, which is the same
 as its out-degree.
 
 [heading Complexity]
-The `influence()` function returns in constant time.
+The `prestige()` returns in constant time.
 [endsect]
 
-[section [^all_influence_values()]]
+[section [^all_degree_centralities()]]
     #include <boost/graph/degree_centrality.hpp>
 
     template <typename Graph, typename CentralityMap>
-    void all_influence_values(const Graph& g, CentralityMap cent);
+    void all_degree_centralities(const Graph& g, CentralityMap cent);
 
+    template <typename Graph, typename CentralityMap, typename Measure>
+    void all_degree_centralities(const Graph& g, CentralityMap cent, Measure measure);
 
-The `all_influence_values()` function computes the influence of each vertex in the
-graph, assigning the values to an output property map.
+The `all_degree_centralities()` computes the degree centrality for each vertex in the
+graph, assigning the values to an output property map. Optionally, a degree measure
+can be given, specializing the computation of degree centrality. See the
+[degree_centrality_measures] section for more details on the influence and
+prestige measures.
 
 [heading Parameters]
 [table
@@ -266,20 +247,35 @@
             of the graph.
         ]
     ]
+    [
+        [optional, in] [`Measure measure`]
+        [
+            The `measure` parameter allows the caller to override the default
+            computation of degree centrality for a vertex.
+
+            *Requirements:* The `Measure` type must be a model of the
+            [DegreeMeasure] concept. The `degree_type` of `Measure` must
+            be the same as the `value_type` of the `CentralityMap` type.
+        ]
+    ]
 ]
 
 [heading Complexity]
-The `all_influence_values()` function returns linear time with respect to the
-number of vertices in the graph.
+The `all_degree_centralities()` function returns in /O(n*O(M))/ where /n/ is the
+number of vertices in the graph and /M/ is a measure of a vertex. If the measure
+is not specified or is `influence_measure` or `prestige_measure`, this function
+returns in linear time.
 [endsect]
 
-[section [^prestige()]]
-    template <typename Graph, typename Vertex>
-    typename graph_traits<Graph>::degree_size_type
-    prestige(const Graph& g, Vertex v);
+[section [^all_influence_values()]]
+    #include <boost/graph/degree_centrality.hpp>
+
+    template <typename Graph, typename CentralityMap>
+    void all_influence_values(const Graph& g, CentralityMap cent);
 
-The `prestige()` function the prestige of the vertex to the caller. The prestige
-of a vertex is the same as its in-degree.
+
+The `all_influence_values()` function computes the influence of each vertex in the
+graph, assigning the values to an output property map.
 
 [heading Parameters]
 [table
@@ -289,28 +285,32 @@
         [
             The graph object for which the degree centralities will be computed.
 
-            *Requirements:* The `Graph` type must be a model of the [IncidenceGraph]
-            concept. If the `Measure` parameter is given as `prestige_measure`,
-            then the graph must be a model of the [BidirectionalGraph] concept.
+            *Requirements:* The `Graph` type must model the [VertexListGraph]
+            and [IncidenceGraph] concepts. If the `Measure` parameter is given
+            as `prestige_measure`, then the graph must be a model of the
+            [BidirectionalGraph] concept.
         ]
     ]
     [
-        [required, in] [`Vertex v`]
+        [required, out] [`CentralityMap cent`]
         [
-            The vertex descriptor for which the degree centrality is computed.
+            The property map that contains the degree centralities of all vertices
+            in a graph after calling the `degree_centrality()` function.
 
-            *Requirements:* The `Vertex` type must be the same as the `vertex_descriptor`
-            of the `Graph` parameter.
+            *Requirements:* The `CentralityMap` type must be a model of the
+            [WritablePropertyMap] concept. The `key_type` of the map must
+            be the same as the `vertex_descriptor` of the `Graph` type. If the
+            `Measure` parameter is given in the call, then the `value_type`
+            of `CentralityMap` must be the same as `Measure::degree_type`.
+            Otherwise, the `value_type` must be the same as the `degree_size_type`
+            of the graph.
         ]
     ]
 ]
 
-[heading Return Value]
-The `prestige()` function returns the influence of the vertex, which is the same
-as its out-degree.
-
 [heading Complexity]
-The `prestige()` returns in constant time.
+The `all_influence_values()` function returns linear time with respect to the
+number of vertices in the graph.
 [endsect]
 
 [section [^all_prestige_values()]]
Modified: sandbox/SOC/2007/graphs/libs/graph/doc/reference/tiernan_all_cycles.qbk
==============================================================================
--- sandbox/SOC/2007/graphs/libs/graph/doc/reference/tiernan_all_cycles.qbk	(original)
+++ sandbox/SOC/2007/graphs/libs/graph/doc/reference/tiernan_all_cycles.qbk	2007-08-21 14:02:35 EDT (Tue, 21 Aug 2007)
@@ -10,8 +10,8 @@
     boost_graph.reference.algorithms.subgraph.tiernan_all_cycles.examples.printing_cycles
     Printing Cycles Example]]
 [template ex_tiernan_girth_circumference[] [link
-    boost_graph.reference.algorithms.subgraph.tiernan_all_cycles.examples.printing_cycles
-    Printing Cycles Example]]
+    boost_graph.reference.algorithms.subgraph.tiernan_all_cycles.examples.girth_and_circumference
+    Girth and Circumference Example]]
 
 [heading Overview]
 This function uses the Tiernan algorithm to find all /cycles/ within a given graph,
@@ -63,6 +63,7 @@
 /girth/ and /circumference/. The girth of a graph is defined as the minimum-length
 cycle in the graph, and the circumference is defined as the largest-length cycle.
 This module provides functions for computing these values using Tiernan's algorithm.
+See the [ex_tiernan_girth_circumference] for details.
 
 [section [^tiernan_all_cycles()]]
     #include <boost/graph/tiernan_all_cycles.hpp>