mlpack 3.4.2
nearest_neighbor_sort.hpp
Go to the documentation of this file.
1
13#ifndef MLPACK_METHODS_NEIGHBOR_SEARCH_NEAREST_NEIGHBOR_SORT_HPP
14#define MLPACK_METHODS_NEIGHBOR_SEARCH_NEAREST_NEIGHBOR_SORT_HPP
15
16#include <mlpack/prereqs.hpp>
17
18namespace mlpack {
19namespace neighbor {
20
32{
33 public:
43 static inline bool IsBetter(const double value, const double ref)
44 {
45 return (value <= ref);
46 }
47
53 template<typename TreeType>
54 static double BestNodeToNodeDistance(const TreeType* queryNode,
55 const TreeType* referenceNode);
56
63 template<typename TreeType>
64 static double BestNodeToNodeDistance(const TreeType* queryNode,
65 const TreeType* referenceNode,
66 const double centerToCenterDistance);
67
80 template<typename TreeType>
81 static double BestNodeToNodeDistance(const TreeType* queryNode,
82 const TreeType* referenceNode,
83 const TreeType* referenceChildNode,
84 const double centerToCenterDistance);
85
91 template<typename VecType, typename TreeType>
92 static double BestPointToNodeDistance(const VecType& queryPoint,
93 const TreeType* referenceNode);
94
101 template<typename VecType, typename TreeType>
102 static double BestPointToNodeDistance(const VecType& queryPoint,
103 const TreeType* referenceNode,
104 const double pointToCenterDistance);
105
110 template<typename VecType, typename TreeType>
111 static size_t GetBestChild(const VecType& queryPoint, TreeType& referenceNode)
112 {
113 return referenceNode.GetNearestChild(queryPoint);
114 };
115
120 template<typename TreeType>
121 static size_t GetBestChild(const TreeType& queryNode, TreeType& referenceNode)
122 {
123 return referenceNode.GetNearestChild(queryNode);
124 };
125
133 static inline double WorstDistance() { return DBL_MAX; }
134
142 static inline double BestDistance() { return 0.0; }
143
147 static inline double CombineBest(const double a, const double b)
148 {
149 return std::max(a - b, 0.0);
150 }
151
155 static inline double CombineWorst(const double a, const double b)
156 {
157 if (a == DBL_MAX || b == DBL_MAX)
158 return DBL_MAX;
159 return a + b;
160 }
161
170 static inline double Relax(const double value, const double epsilon)
171 {
172 if (value == DBL_MAX)
173 return DBL_MAX;
174 return (1 / (1 + epsilon)) * value;
175 }
176
182 static inline double ConvertToScore(const double distance)
183 {
184 return distance;
185 }
186
192 static inline double ConvertToDistance(const double score)
193 {
194 return score;
195 }
196};
197
198// Due to an internal MinGW compiler bug (string table overflow) we have to
199// truncate the class name. For backward compatibility we setup an alias here.
201
202} // namespace neighbor
203} // namespace mlpack
204
205// Include implementation of templated functions.
206#include "nearest_neighbor_sort_impl.hpp"
207
208#endif
This class implements the necessary methods for the SortPolicy template parameter of the NeighborSear...
static double ConvertToScore(const double distance)
Convert the given distance into a score.
static double BestNodeToNodeDistance(const TreeType *queryNode, const TreeType *referenceNode, const double centerToCenterDistance)
Return the best possible distance between two nodes, given that the distance between the centers of t...
static double CombineWorst(const double a, const double b)
Return the worst combination of the two distances.
static double BestNodeToNodeDistance(const TreeType *queryNode, const TreeType *referenceNode, const TreeType *referenceChildNode, const double centerToCenterDistance)
Return the best possible distance between the query node and the reference child node given the base ...
static double CombineBest(const double a, const double b)
Return the best combination of the two distances.
static double BestPointToNodeDistance(const VecType &queryPoint, const TreeType *referenceNode)
Return the best possible distance between a node and a point.
static bool IsBetter(const double value, const double ref)
Return whether or not value is "better" than ref.
static size_t GetBestChild(const TreeType &queryNode, TreeType &referenceNode)
Return the best child according to this sort policy.
static double BestDistance()
Return what should represent the best possible distance with this particular sort policy.
static double BestPointToNodeDistance(const VecType &queryPoint, const TreeType *referenceNode, const double pointToCenterDistance)
Return the best possible distance between a point and a node, given that the distance between the poi...
static double ConvertToDistance(const double score)
Convert the given score to a distance.
static double BestNodeToNodeDistance(const TreeType *queryNode, const TreeType *referenceNode)
Return the best possible distance between two nodes.
static double Relax(const double value, const double epsilon)
Return the given value relaxed.
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.
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
The core includes that mlpack expects; standard C++ includes and Armadillo.