mlpack  master
dual_tree_traverser.hpp
Go to the documentation of this file.
1 
14 #ifndef MLPACK_CORE_TREE_RECTANGLE_TREE_DUAL_TREE_TRAVERSER_HPP
15 #define MLPACK_CORE_TREE_RECTANGLE_TREE_DUAL_TREE_TRAVERSER_HPP
16 
17 #include <mlpack/prereqs.hpp>
18 
19 #include "rectangle_tree.hpp"
20 
21 namespace mlpack {
22 namespace tree {
23 
24 template<typename MetricType,
25  typename StatisticType,
26  typename MatType,
27  typename SplitType,
28  typename DescentType,
29  template<typename> class AuxiliaryInformationType>
30 template<typename RuleType>
31 class RectangleTree<MetricType, StatisticType, MatType, SplitType,
32  DescentType, AuxiliaryInformationType>::DualTreeTraverser
33 {
34  public:
38  DualTreeTraverser(RuleType& rule);
39 
47  void Traverse(RectangleTree& queryNode, RectangleTree& referenceNode);
48 
50  size_t NumPrunes() const { return numPrunes; }
52  size_t& NumPrunes() { return numPrunes; }
53 
55  size_t NumVisited() const { return numVisited; }
57  size_t& NumVisited() { return numVisited; }
58 
60  size_t NumScores() const { return numScores; }
62  size_t& NumScores() { return numScores; }
63 
65  size_t NumBaseCases() const { return numBaseCases; }
67  size_t& NumBaseCases() { return numBaseCases; }
68 
69  private:
70 
71  // We use this struct and this function to make the sorting and scoring easy
72  // and efficient:
73  struct NodeAndScore
74  {
76  double score;
77  typename RuleType::TraversalInfoType travInfo;
78  };
79 
80  static bool nodeComparator(const NodeAndScore& obj1,
81  const NodeAndScore& obj2)
82  {
83  return obj1.score < obj2.score;
84  }
85 
87  RuleType& rule;
88 
90  size_t numPrunes;
91 
93  size_t numVisited;
94 
96  size_t numScores;
97 
99  size_t numBaseCases;
100 
103  typename RuleType::TraversalInfoType traversalInfo;
104 };
105 
106 } // namespace tree
107 } // namespace mlpack
108 
109 // Include implementation.
110 #include "dual_tree_traverser_impl.hpp"
111 
112 #endif
size_t NumScores() const
Get the number of times a node combination was scored.
size_t & NumVisited()
Modify the number of visited combinations.
size_t NumBaseCases() const
Get the number of times a base case was calculated.
size_t numBaseCases
The number of times a base case was calculated.
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: binarize.hpp:18
The core includes that mlpack expects; standard C++ includes and Armadillo.
size_t & NumScores()
Modify the number of times a node combination was scored.
size_t NumPrunes() const
Get the number of prunes.
A rectangle type tree tree, such as an R-tree or X-tree.
size_t numScores
The number of times a node combination was scored.
size_t & NumPrunes()
Modify the number of prunes.
A dual tree traverser for rectangle type trees.
RuleType::TraversalInfoType traversalInfo
Traversal information, held in the class so that it isn&#39;t continually being reallocated.
static bool nodeComparator(const NodeAndScore &obj1, const NodeAndScore &obj2)
RuleType & rule
Reference to the rules with which the trees will be traversed.
size_t & NumBaseCases()
Modify the number of times a base case was calculated.
size_t NumVisited() const
Get the number of visited combinations.
size_t numVisited
The number of node combinations that have been visited during traversal.