Reverted BipartiteGraph::isConnected to old implementation
authorJoris Mooij <joris.mooij@tuebingen.mpg.de>
Wed, 13 Jan 2010 16:11:02 +0000 (17:11 +0100)
committerJoris Mooij <joris.mooij@tuebingen.mpg.de>
Wed, 13 Jan 2010 16:11:02 +0000 (17:11 +0100)
(because it the BGL implementation turned out to be slower)

ChangeLog
src/bipgraph.cpp
src/bp.cpp

index 1e3ea1a..47164e1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,7 +7,6 @@
     erase2() -> eraseNode2()
     nr2() -> nrNodes2()
 * Added examples example_sprinkler_gibbs and example_sprinkler_em
-* Optimized BipartiteGraph::isConnected() by using Boost Graph Library implementation
 * Strengthened convergence criteria of various algorithms
 * Implemented FBP::logZ()
 * Fixed bug in HAK for trivial region graphs (with only one outer region
index 30b8927..a6f1e6f 100644 (file)
@@ -10,8 +10,6 @@
 
 
 #include <dai/bipgraph.h>
-#include <boost/graph/adjacency_list.hpp>
-#include <boost/graph/connected_components.hpp>
 
 
 namespace dai {
@@ -158,6 +156,8 @@ bool BipartiteGraph::isConnected() const {
     if( nrNodes1() == 0 ) {
         return true;
     } else {
+        /*
+        // The BGL implementation is significantly slower...
         using namespace boost;
         typedef adjacency_list< vecS, vecS, undirectedS, property<vertex_distance_t, int> > boostGraph;
         typedef pair<size_t, size_t> E;
@@ -176,7 +176,8 @@ bool BipartiteGraph::isConnected() const {
         int num_comp = connected_components( g, make_iterator_property_map(component.begin(), get(vertex_index, g)) );
 
         return (num_comp == 1);
-        /*
+        */
+
         std::vector<bool> incomponent1( nrNodes1(), false );
         std::vector<bool> incomponent2( nrNodes2(), false );
 
@@ -219,7 +220,7 @@ bool BipartiteGraph::isConnected() const {
             if( !incomponent2[n2] )
                 all_connected = false;
 
-        return all_connected;*/
+        return all_connected;
     }
 }
 
index 2d6fd12..5d4a79a 100644 (file)
@@ -251,10 +251,9 @@ Real BP::run() {
                 calcNewMessage( i, I.iter );
     } else {
         update_seq.reserve( nredges );
-        /// \todo Investigate whether performance increases by switching the order of the following two loops:
-        for( size_t i = 0; i < nrVars(); ++i )
-            foreach( const Neighbor &I, nbV(i) )
-                update_seq.push_back( Edge( i, I.iter ) );
+        for( size_t I = 0; I < nrFactors(); I++ )
+            foreach( const Neighbor &i, nbF(I) )
+                update_seq.push_back( Edge( i, i.dual ) );
     }
 
     // do several passes over the network until maximum number of iterations has