[mlpack-git] master: Don't calculate MaxDistance() unless we have to. Fairly significant time savings on this one. (61f6552)

gitdub at big.cc.gt.atl.ga.us gitdub at big.cc.gt.atl.ga.us
Thu Mar 12 16:02:57 EDT 2015


Repository : https://github.com/mlpack/mlpack

On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/eddd7167d69b6c88b271ef2e51d1c20e13f1acd8...70342dd8e5c17e0c164cfb8189748671e9c0dd44

>---------------------------------------------------------------

commit 61f65523b831b11f8791103c427fced458387f99
Author: Ryan Curtin <ryan at ratml.org>
Date:   Tue Jan 13 16:07:56 2015 -0500

    Don't calculate MaxDistance() unless we have to. Fairly significant time savings on this one.


>---------------------------------------------------------------

61f65523b831b11f8791103c427fced458387f99
 src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp b/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp
index 8608c03..a3236d8 100644
--- a/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp
+++ b/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp
@@ -132,13 +132,14 @@ double DualTreeKMeansRules<MetricType, TreeType>::Score(
     // We also have to update things if the closest query node is null.  This
     // can probably be improved.
     const double minDistance = referenceNode.MinDistance(&queryNode);
-    const double maxDistance = referenceNode.MaxDistance(&queryNode);
-    distanceCalculations += 2;
+    ++distanceCalculations;
     score = PellegMooreScore(queryNode, referenceNode, minDistance);
 
-    if (maxDistance < referenceNode.Stat().MaxQueryNodeDistance() ||
+    if (minDistance < referenceNode.Stat().MinQueryNodeDistance() ||
         referenceNode.Stat().ClosestQueryNode() == NULL)
     {
+      const double maxDistance = referenceNode.MaxDistance(&queryNode);
+      ++distanceCalculations;
       referenceNode.Stat().ClosestQueryNode() = (void*) &queryNode;
       referenceNode.Stat().MinQueryNodeDistance() = minDistance;
       referenceNode.Stat().MaxQueryNodeDistance() = maxDistance;
@@ -146,6 +147,8 @@ double DualTreeKMeansRules<MetricType, TreeType>::Score(
     else if (IsDescendantOf(*((TreeType*)
         referenceNode.Stat().ClosestQueryNode()), queryNode))
     {
+      const double maxDistance = referenceNode.MaxDistance(&queryNode);
+      ++distanceCalculations;
       referenceNode.Stat().ClosestQueryNode() == (void*) &queryNode;
       referenceNode.Stat().MinQueryNodeDistance() = minDistance;
       referenceNode.Stat().MaxQueryNodeDistance() = maxDistance;



More information about the mlpack-git mailing list