From e72ab4c744eb9ade8476a0452b86604c9396ef4e Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Mon, 12 Jan 2015 18:11:30 -0500 Subject: [PATCH] Use ClosestQueryNode() not MaxQueryNodeDistance(). Eventually MaxQueryNodeDistance() will not be reset to DBL_MAX every iteration. --- .../methods/kmeans/dual_tree_kmeans_rules_impl.hpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 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 b13e54425b..34df556a81 100644 --- a/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp +++ b/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp @@ -121,15 +121,19 @@ double DualTreeKMeansRules::Score( distanceCalculations += 2; score = PellegMooreScore(queryNode, referenceNode, minDistance); - if (referenceNode.Stat().MaxQueryNodeDistance() == DBL_MAX && + if (referenceNode.Stat().ClosestQueryNode() == NULL && referenceNode.Parent() != NULL && - referenceNode.Parent()->Stat().MaxQueryNodeDistance() != DBL_MAX) + referenceNode.Parent()->Stat().ClosestQueryNode() != NULL) { referenceNode.Stat().ClosestQueryNode() = referenceNode.Parent()->Stat().ClosestQueryNode(); - referenceNode.Stat().MaxQueryNodeDistance() = - referenceNode.Parent()->Stat().MaxQueryNodeDistance(); + referenceNode.Stat().MaxQueryNodeDistance() = std::min( + referenceNode.Parent()->Stat().MaxQueryNodeDistance(), + referenceNode.Stat().MaxQueryNodeDistance()); } + else if (referenceNode.Parent() != NULL && + referenceNode.Parent()->Stat().ClosestQueryNode() == NULL) + Log::Fatal << "wtf\n"; if (maxDistance < referenceNode.Stat().MaxQueryNodeDistance() || referenceNode.Stat().ClosestQueryNode() == NULL)