12 #ifndef MLPACK_CORE_TREE_COVER_TREE_COVER_TREE_HPP 13 #define MLPACK_CORE_TREE_COVER_TREE_COVER_TREE_HPP 18 #include "../statistic.hpp" 95 template<
typename MetricType = metric::LMetric<2, true>,
96 typename StatisticType = EmptyStatistic,
97 typename MatType = arma::mat,
98 typename RootPo
intPolicy = FirstPo
intIsRoot>
119 const ElemType base = 2.0,
120 MetricType* metric = NULL);
133 const ElemType base = 2.0);
143 const ElemType base = 2.0);
155 const ElemType base = 2.0);
191 const size_t pointIndex,
194 const ElemType parentDistance,
195 arma::Col<size_t>& indices,
196 arma::vec& distances,
200 MetricType& metric = NULL);
220 const size_t pointIndex,
223 const ElemType parentDistance,
224 const ElemType furthestDescendantDistance,
225 MetricType* metric = NULL);
260 template<
typename Archive>
272 template<
typename RuleType>
276 template<
typename RuleType>
279 template<
typename RuleType>
283 const MatType&
Dataset()
const {
return *dataset; }
286 size_t Point()
const {
return point; }
288 size_t Point(
const size_t)
const {
return point; }
290 bool IsLeaf()
const {
return (children.size() == 0); }
304 const std::vector<CoverTree*>&
Children()
const {
return children; }
306 std::vector<CoverTree*>&
Children() {
return children; }
320 ElemType
Base()
const {
return base; }
322 ElemType&
Base() {
return base; }
325 const StatisticType&
Stat()
const {
return stat; }
327 StatisticType&
Stat() {
return stat; }
333 template<
typename VecType>
335 const VecType& point,
342 template<
typename VecType>
344 const VecType& point,
367 ElemType
MinDistance(
const arma::vec& other)
const;
371 ElemType
MinDistance(
const arma::vec& other,
const ElemType distance)
const;
381 ElemType
MaxDistance(
const arma::vec& other)
const;
385 ElemType
MaxDistance(
const arma::vec& other,
const ElemType distance)
const;
393 const ElemType distance)
const;
401 const ElemType distance)
const;
418 {
return furthestDescendantDistance; }
430 center = arma::vec(dataset->col(point));
434 MetricType&
Metric()
const {
return *metric; }
438 const MatType* dataset;
442 std::vector<CoverTree*> children;
450 size_t numDescendants;
454 ElemType parentDistance;
456 ElemType furthestDescendantDistance;
467 void CreateChildren(arma::Col<size_t>& indices,
468 arma::vec& distances,
471 size_t& usedSetSize);
484 void ComputeDistances(
const size_t pointIndex,
485 const arma::Col<size_t>& indices,
486 arma::vec& distances,
487 const size_t pointSetSize);
502 size_t SplitNearFar(arma::Col<size_t>& indices,
503 arma::vec& distances,
504 const ElemType bound,
505 const size_t pointSetSize);
526 size_t SortPointSet(arma::Col<size_t>& indices,
527 arma::vec& distances,
528 const size_t childFarSetSize,
529 const size_t childUsedSetSize,
530 const size_t farSetSize);
532 void MoveToUsedSet(arma::Col<size_t>& indices,
533 arma::vec& distances,
537 arma::Col<size_t>& childIndices,
538 const size_t childFarSetSize,
539 const size_t childUsedSetSize);
540 size_t PruneFarSet(arma::Col<size_t>& indices,
541 arma::vec& distances,
542 const ElemType bound,
543 const size_t nearSetSize,
544 const size_t pointSetSize);
550 void RemoveNewImplicitNodes();
562 friend class cereal::access;
568 template<
typename Archive>
569 void serialize(Archive& ar,
const uint32_t );
575 size_t distanceComps;
582 #include "cover_tree_impl.hpp" 585 #include "../cover_tree.hpp" void serialize(Archive &ar, const uint32_t)
Serialize the tree.
size_t GetNearestChild(const VecType &point, typename std::enable_if_t< IsVector< VecType >::value > *=0)
Return the index of the nearest child node to the given query point.
size_t DistanceComps() const
CoverTree & operator=(const CoverTree &other)
Copy the given Cover Tree.
MatType Mat
So that other classes can access the matrix type.
void Center(arma::vec ¢er) const
Get the center of the node and store it in the given vector.
A dual-tree cover tree traverser; see dual_tree_traverser.hpp.
typename enable_if< B, T >::type enable_if_t
ElemType Base() const
Get the base.
Linear algebra utility functions, generally performed on matrices or vectors.
size_t Point() const
Get the index of the point which this node represents.
MatType::elem_type ElemType
The type held by the matrix type.
ElemType MaxDistance(const CoverTree &other) const
Return the maximum distance to another node.
The core includes that mlpack expects; standard C++ includes and Armadillo.
size_t GetFurthestChild(const VecType &point, typename std::enable_if_t< IsVector< VecType >::value > *=0)
Return the index of the furthest child node to the given query point.
ElemType & FurthestDescendantDistance()
Modify the distance from the center of the node to the furthest descendant.
const std::vector< CoverTree * > & Children() const
Get the children.
int & Scale()
Modify the scale of this node. Be careful...
StatisticType & Stat()
Modify the statistic for this node.
CoverTree()
A default constructor.
CoverTree *& Parent()
Modify the parent node.
CoverTree * Parent() const
Get the parent node.
std::vector< CoverTree * > & Children()
Modify the children manually (maybe not a great idea).
int Scale() const
Get the scale of this node.
~CoverTree()
Delete this cover tree node and its children.
const StatisticType & Stat() const
Get the statistic for this node.
CoverTree *& ChildPtr(const size_t index)
A single-tree cover tree traverser; see single_tree_traverser.hpp for implementation.
ElemType ParentDistance() const
Get the distance to the parent.
ElemType MinDistance(const CoverTree &other) const
Return the minimum distance to another node.
size_t Point(const size_t) const
For compatibility with other trees; the argument is ignored.
const MatType & Dataset() const
Get a reference to the dataset.
size_t NumChildren() const
Get the number of children.
ElemType FurthestPointDistance() const
Get the distance to the furthest point. This is always 0 for cover trees.
ElemType & Base()
Modify the base; don't do this, you'll break everything.
Definition of the Range class, which represents a simple range with a lower and upper bound...
CoverTree & Child(const size_t index)
Modify a particular child node.
ElemType MinimumBoundDistance() const
Get the minimum distance from the center to any bound edge (this is the same as furthestDescendantDis...
MetricType & Metric() const
Get the instantiated metric.
size_t Descendant(const size_t index) const
Get the index of a particular descendant point.
ElemType FurthestDescendantDistance() const
Get the distance from the center of the node to the furthest descendant.
math::RangeType< ElemType > RangeDistance(const CoverTree &other) const
Return the minimum and maximum distance to another node.
A cover tree is a tree specifically designed to speed up nearest-neighbor computation in high-dimensi...
ElemType & ParentDistance()
Modify the distance to the parent.
const CoverTree & Child(const size_t index) const
Get a particular child node.
If value == true, then VecType is some sort of Armadillo vector or subview.
size_t NumDescendants() const
Get the number of descendant points.