MLPACK
1.0.4
|
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