mlpack  2.0.1
dual_tree_traverser.hpp
Go to the documentation of this file.
1 
16 #ifndef __MLPACK_CORE_TREE_RECTANGLE_TREE_DUAL_TREE_TRAVERSER_HPP
17 #define __MLPACK_CORE_TREE_RECTANGLE_TREE_DUAL_TREE_TRAVERSER_HPP
18 
19 #include <mlpack/core.hpp>
20 
21 #include "rectangle_tree.hpp"
22 
23 namespace mlpack {
24 namespace tree {
25 
26 template<typename MetricType,
27  typename StatisticType,
28  typename MatType,
29  typename SplitType,
30  typename DescentType>
31 template<typename RuleType>
32 class RectangleTree<MetricType, StatisticType, MatType, SplitType,
33  DescentType>::DualTreeTraverser
34 {
35  public:
39  DualTreeTraverser(RuleType& rule);
40 
48  void Traverse(RectangleTree& queryNode, RectangleTree& referenceNode);
49 
51  size_t NumPrunes() const { return numPrunes; }
53  size_t& NumPrunes() { return numPrunes; }
54 
56  size_t NumVisited() const { return numVisited; }
58  size_t& NumVisited() { return numVisited; }
59 
61  size_t NumScores() const { return numScores; }
63  size_t& NumScores() { return numScores; }
64 
66  size_t NumBaseCases() const { return numBaseCases; }
68  size_t& NumBaseCases() { return numBaseCases; }
69 
70  private:
71 
72  // We use this struct and this function to make the sorting and scoring easy
73  // and efficient:
74  struct NodeAndScore
75  {
77  double score;
78  typename RuleType::TraversalInfoType travInfo;
79  };
80 
81  static bool nodeComparator(const NodeAndScore& obj1,
82  const NodeAndScore& obj2)
83  {
84  return obj1.score < obj2.score;
85  }
86 
88  RuleType& rule;
89 
91  size_t numPrunes;
92 
94  size_t numVisited;
95 
97  size_t numScores;
98 
100  size_t numBaseCases;
101 
104  typename RuleType::TraversalInfoType traversalInfo;
105 };
106 
107 } // namespace tree
108 } // namespace mlpack
109 
110 // Include implementation.
111 #include "dual_tree_traverser_impl.hpp"
112 
113 #endif
size_t NumScores() const
Get the number of times a node combination was scored.
RuleType & rule
Reference to the rules with which the trees will be traversed.
size_t NumPrunes() const
Get the number of prunes.
size_t & NumScores()
Modify the number of times a node combination was scored.
size_t NumVisited() const
Get the number of visited combinations.
Linear algebra utility functions, generally performed on matrices or vectors.
size_t & NumPrunes()
Modify the number of prunes.
size_t & NumBaseCases()
Modify the number of times a base case was calculated.
size_t numVisited
The number of node combinations that have been visited during traversal.
size_t NumBaseCases() const
Get the number of times a base case was calculated.
RuleType::TraversalInfoType traversalInfo
Traversal information, held in the class so that it isn't continually being reallocated.
static bool nodeComparator(const NodeAndScore &obj1, const NodeAndScore &obj2)
A rectangle type tree tree, such as an R-tree or X-tree.
Include all of the base components required to write MLPACK methods, and the main MLPACK Doxygen docu...
size_t numBaseCases
The number of times a base case was calculated.
size_t numScores
The number of times a node combination was scored.
A dual tree traverser for rectangle type trees.
size_t & NumVisited()
Modify the number of visited combinations.