mlpack  master
furthest_neighbor_sort.hpp
Go to the documentation of this file.
1 
13 #ifndef MLPACK_METHODS_NEIGHBOR_SEARCH_FURTHEST_NEIGHBOR_SORT_HPP
14 #define MLPACK_METHODS_NEIGHBOR_SEARCH_FURTHEST_NEIGHBOR_SORT_HPP
15 
16 #include <mlpack/prereqs.hpp>
17 
18 namespace mlpack {
19 namespace neighbor {
20 
28 {
29  public:
39  static inline bool IsBetter(const double value, const double ref)
40  {
41  return (value >= ref);
42  }
43 
49  template<typename TreeType>
50  static double BestNodeToNodeDistance(const TreeType* queryNode,
51  const TreeType* referenceNode);
52 
59  template<typename TreeType>
60  static double BestNodeToNodeDistance(const TreeType* queryNode,
61  const TreeType* referenceNode,
62  const double centerToCenterDistance);
63 
76  template<typename TreeType>
77  static double BestNodeToNodeDistance(const TreeType* queryNode,
78  const TreeType* referenceNode,
79  const TreeType* referenceChildNode,
80  const double centerToCenterDistance);
81 
87  template<typename VecType, typename TreeType>
88  static double BestPointToNodeDistance(const VecType& queryPoint,
89  const TreeType* referenceNode);
90 
97  template<typename VecType, typename TreeType>
98  static double BestPointToNodeDistance(const VecType& queryPoint,
99  const TreeType* referenceNode,
100  const double pointToCenterDistance);
101 
106  template<typename VecType, typename TreeType>
107  static size_t GetBestChild(const VecType& queryPoint, TreeType& referenceNode)
108  {
109  return referenceNode.GetFurthestChild(queryPoint);
110  };
111 
116  template<typename TreeType>
117  static size_t GetBestChild(const TreeType& queryNode, TreeType& referenceNode)
118  {
119  return referenceNode.GetFurthestChild(queryNode);
120  };
121 
129  static inline double WorstDistance() { return 0; }
130 
138  static inline double BestDistance() { return DBL_MAX; }
139 
143  static inline double CombineBest(const double a, const double b)
144  {
145  if (a == DBL_MAX || b == DBL_MAX)
146  return DBL_MAX;
147  return a + b;
148  }
149 
153  static inline double CombineWorst(const double a, const double b)
154  { return std::max(a - b, 0.0); }
155 
164  static inline double Relax(const double value, const double epsilon)
165  {
166  if (value == 0)
167  return 0;
168  if (value == DBL_MAX || epsilon >= 1)
169  return DBL_MAX;
170  return (1 / (1 - epsilon)) * value;
171  }
172 
178  static inline double ConvertToScore(const double distance)
179  {
180  if (distance == DBL_MAX)
181  return 0.0;
182  else if (distance == 0.0)
183  return DBL_MAX;
184  else
185  return (1.0 / distance);
186  }
187 
193  static inline double ConvertToDistance(const double score)
194  {
195  return ConvertToScore(score);
196  }
197 };
198 
199 } // namespace neighbor
200 } // namespace mlpack
201 
202 // Include implementation of templated functions.
203 #include "furthest_neighbor_sort_impl.hpp"
204 
205 #endif
static double ConvertToDistance(const double score)
Convert the given score back to a distance.
static double Relax(const double value, const double epsilon)
Return the given value relaxed.
static double ConvertToScore(const double distance)
Convert the given distance to a score.
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: binarize.hpp:18
static double BestDistance()
Return what should represent the best possible distance with this particular sort policy...
The core includes that mlpack expects; standard C++ includes and Armadillo.
static double BestNodeToNodeDistance(const TreeType *queryNode, const TreeType *referenceNode)
Return the best possible distance between two nodes.
static bool IsBetter(const double value, const double ref)
Return whether or not value is "better" than ref.
static double BestPointToNodeDistance(const VecType &queryPoint, const TreeType *referenceNode)
Return the best possible distance between a node and a point.
static double CombineBest(const double a, const double b)
Return the best combination of the two distances.
This class implements the necessary methods for the SortPolicy template parameter of the NeighborSear...
static double CombineWorst(const double a, const double b)
Return the worst combination of the two distances.
static size_t GetBestChild(const TreeType &queryNode, TreeType &referenceNode)
Return the best child according to this sort policy.
static double WorstDistance()
Return what should represent the worst possible distance with this particular sort policy...
static size_t GetBestChild(const VecType &queryPoint, TreeType &referenceNode)
Return the best child according to this sort policy.