MLPACK  1.0.4
dual_tree_traverser.hpp
Go to the documentation of this file.
00001 
00022 #ifndef __MLPACK_CORE_TREE_COVER_TREE_DUAL_TREE_TRAVERSER_HPP
00023 #define __MLPACK_CORE_TREE_COVER_TREE_DUAL_TREE_TRAVERSER_HPP
00024 
00025 #include <mlpack/core.hpp>
00026 #include <queue>
00027 
00028 namespace mlpack {
00029 namespace tree {
00030 
00032 template<typename MetricType, typename RootPointPolicy, typename StatisticType>
00033 struct DualCoverTreeMapEntry;
00034 
00035 template<typename MetricType, typename RootPointPolicy, typename StatisticType>
00036 template<typename RuleType>
00037 class CoverTree<MetricType, RootPointPolicy, StatisticType>::DualTreeTraverser
00038 {
00039  public:
00043   DualTreeTraverser(RuleType& rule);
00044 
00051   void Traverse(CoverTree& queryNode, CoverTree& referenceNode);
00052 
00056   void Traverse(CoverTree& queryNode,
00057                 std::map<int, std::vector<DualCoverTreeMapEntry<
00058                     MetricType, RootPointPolicy, StatisticType> > >&
00059                     referenceMap);
00060 
00062   size_t NumPrunes() const { return numPrunes; }
00064   size_t& NumPrunes() { return numPrunes; }
00065 
00066  private:
00068   RuleType& rule;
00069 
00071   size_t numPrunes;
00072 
00074   void PruneMap(CoverTree& candidateQueryNode,
00075                 std::map<int, std::vector<DualCoverTreeMapEntry<
00076                     MetricType, RootPointPolicy, StatisticType> > >&
00077                     referenceMap,
00078                 std::map<int, std::vector<DualCoverTreeMapEntry<
00079                     MetricType, RootPointPolicy, StatisticType> > >& childMap);
00080 
00081   void PruneMapForSelfChild(CoverTree& candidateQueryNode,
00082                             std::map<int, std::vector<DualCoverTreeMapEntry<
00083                                 MetricType, RootPointPolicy, StatisticType> > >&
00084                                 referenceMap);
00085 
00086   void ReferenceRecursion(CoverTree& queryNode,
00087                           std::map<int, std::vector<DualCoverTreeMapEntry<
00088                               MetricType, RootPointPolicy, StatisticType> > >&
00089                               referenceMap);
00090 };
00091 
00092 }; // namespace tree
00093 }; // namespace mlpack
00094 
00095 // Include implementation.
00096 #include "dual_tree_traverser_impl.hpp"
00097 
00098 #endif