[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