[mlpack-svn] r13978 - mlpack/trunk/src/mlpack/core/tree/cover_tree

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Wed Dec 5 10:22:38 EST 2012


Author: rcurtin
Date: 2012-12-05 10:22:38 -0500 (Wed, 05 Dec 2012)
New Revision: 13978

Modified:
   mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser.hpp
   mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp
Log:
Try to prune when copying reference maps.


Modified: mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser.hpp
===================================================================
--- mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser.hpp	2012-12-05 04:39:42 UTC (rev 13977)
+++ mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser.hpp	2012-12-05 15:22:38 UTC (rev 13978)
@@ -56,7 +56,8 @@
   size_t numPrunes;
 
   //! Prepare map for recursion.
-  void PruneMap(CoverTree& candidateQueryNode,
+  void PruneMap(CoverTree& queryNode,
+                CoverTree& candidateQueryNode,
                 std::map<int, std::vector<DualCoverTreeMapEntry<
                     MetricType, RootPointPolicy, StatisticType> > >&
                     referenceMap,

Modified: mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp
===================================================================
--- mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp	2012-12-05 04:39:42 UTC (rev 13977)
+++ mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp	2012-12-05 15:22:38 UTC (rev 13978)
@@ -103,7 +103,7 @@
     for (size_t i = 1; i < queryNode.NumChildren(); ++i)
     {
       std::map<int, std::vector<MapEntryType> > childMap;
-      PruneMap(queryNode.Child(i), referenceMap, childMap);
+      PruneMap(queryNode, queryNode.Child(i), referenceMap, childMap);
 
 //      Log::Debug << "Recurse into query child " << i << ": " <<
 //          queryNode.Child(i).Point() << " scale " << queryNode.Child(i).Scale()
@@ -176,6 +176,7 @@
 template<typename RuleType>
 void CoverTree<MetricType, RootPointPolicy, StatisticType>::
 DualTreeTraverser<RuleType>::PruneMap(
+    CoverTree& queryNode,
     CoverTree& candidateQueryNode,
     std::map<int, std::vector<DualCoverTreeMapEntry<MetricType,
         RootPointPolicy, StatisticType> > >& referenceMap,
@@ -209,12 +210,23 @@
           frame.referenceNode;
       const double oldScore = frame.score;
 
+      // Try to prune based on shell().  This is hackish and will need to be
+      // refined or cleaned at some point.
+      double score = rule.PrescoreQ(queryNode, candidateQueryNode, *refNode,
+          frame.baseCase);
+
+      if (score == DBL_MAX)
+      {
+        ++numPrunes;
+        continue;
+      }
+
 //      Log::Debug << "Recheck reference node " << refNode->Point() <<
 //          " scale " << refNode->Scale() << " which has old score " <<
 //          oldScore << " with old reference index " << frame.referenceIndex
 //          << " and old query index " << frame.queryIndex << std::endl;
 
-      double score = rule.Rescore(candidateQueryNode, *refNode, oldScore);
+      score = rule.Rescore(candidateQueryNode, *refNode, oldScore);
 
 //      Log::Debug << "Rescored as " << score << std::endl;
 




More information about the mlpack-svn mailing list