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>
263 const typename std::enable_if_t<cereal::is_loading<Archive>()>* = 0);
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); }
291 size_t NumPoints()
const {
return 1; }
298 CoverTree*& ChildPtr(
const size_t index) {
return children[index]; }
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();
568 template<
typename Archive>
569 void serialize(Archive& ar,
const uint32_t );
571 size_t DistanceComps()
const {
return distanceComps; }
572 size_t& DistanceComps() {
return distanceComps; }
575 size_t distanceComps;
585 #include "../cover_tree.hpp" ElemType & FurthestDescendantDistance()
Modify the distance from the center of the node to the furthest descendant.
Definition: cover_tree.hpp:421
CoverTree()
A default constructor.
Definition: cover_tree_impl.hpp:1702
StatisticType & Stat()
Modify the statistic for this node.
Definition: cover_tree.hpp:327
ElemType ParentDistance() const
Get the distance to the parent.
Definition: cover_tree.hpp:409
std::vector< CoverTree * > & Children()
Modify the children manually (maybe not a great idea).
Definition: cover_tree.hpp:306
const StatisticType & Stat() const
Get the statistic for this node.
Definition: cover_tree.hpp:325
int Scale() const
Get the scale of this node.
Definition: cover_tree.hpp:315
MetricType & Metric() const
Get the instantiated metric.
Definition: cover_tree.hpp:434
A dual-tree cover tree traverser; see dual_tree_traverser.hpp.
Definition: cover_tree.hpp:277
void serialize(Archive &ar, const uint32_t)
Serialize the tree.
Definition: cover_tree_impl.hpp:1729
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
void Center(arma::vec ¢er) const
Get the center of the node and store it in the given vector.
Definition: cover_tree.hpp:428
CoverTree & operator=(const CoverTree &other)
Copy the given Cover Tree.
Definition: cover_tree_impl.hpp:560
The core includes that mlpack expects; standard C++ includes and Armadillo.
MatType::elem_type ElemType
The type held by the matrix type.
Definition: cover_tree.hpp:105
ElemType FurthestPointDistance() const
Get the distance to the furthest point. This is always 0 for cover trees.
Definition: cover_tree.hpp:414
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.
Definition: cover_tree_impl.hpp:814
ElemType & ParentDistance()
Modify the distance to the parent.
Definition: cover_tree.hpp:411
size_t NumDescendants() const
Get the number of descendant points.
Definition: cover_tree_impl.hpp:767
friend class cereal::access
Friend access is given for the default constructor.
Definition: cover_tree.hpp:562
const std::vector< CoverTree * > & Children() const
Get the children.
Definition: cover_tree.hpp:304
const MatType & Dataset() const
Get a reference to the dataset.
Definition: cover_tree.hpp:283
MatType Mat
So that other classes can access the matrix type.
Definition: cover_tree.hpp:103
ElemType FurthestDescendantDistance() const
Get the distance from the center of the node to the furthest descendant.
Definition: cover_tree.hpp:417
ElemType Base() const
Get the base.
Definition: cover_tree.hpp:320
CoverTree *& Parent()
Modify the parent node.
Definition: cover_tree.hpp:406
int & Scale()
Modify the scale of this node. Be careful...
Definition: cover_tree.hpp:317
size_t Point(const size_t) const
For compatibility with other trees; the argument is ignored.
Definition: cover_tree.hpp:288
A single-tree cover tree traverser; see single_tree_traverser.hpp for implementation.
Definition: cover_tree.hpp:273
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.
Definition: cover_tree_impl.hpp:844
size_t Point() const
Get the index of the point which this node represents.
Definition: cover_tree.hpp:286
const CoverTree & Child(const size_t index) const
Get a particular child node.
Definition: cover_tree.hpp:294
ElemType MaxDistance(const CoverTree &other) const
Return the maximum distance to another node.
Definition: cover_tree_impl.hpp:991
ElemType MinDistance(const CoverTree &other) const
Return the minimum distance to another node.
Definition: cover_tree_impl.hpp:929
ElemType MinimumBoundDistance() const
Get the minimum distance from the center to any bound edge (this is the same as furthestDescendantDis...
Definition: cover_tree.hpp:425
Definition of the Range class, which represents a simple range with a lower and upper bound...
math::RangeType< ElemType > RangeDistance(const CoverTree &other) const
Return the minimum and maximum distance to another node.
Definition: cover_tree_impl.hpp:1053
size_t NumChildren() const
Get the number of children.
Definition: cover_tree.hpp:301
ElemType & Base()
Modify the base; don't do this, you'll break everything.
Definition: cover_tree.hpp:322
A cover tree is a tree specifically designed to speed up nearest-neighbor computation in high-dimensi...
Definition: cover_tree.hpp:99
CoverTree & Child(const size_t index)
Modify a particular child node.
Definition: cover_tree.hpp:296
If value == true, then VecType is some sort of Armadillo vector or subview.
Definition: arma_traits.hpp:35
size_t Descendant(const size_t index) const
Get the index of a particular descendant point.
Definition: cover_tree_impl.hpp:780
~CoverTree()
Delete this cover tree node and its children.
Definition: cover_tree_impl.hpp:743
CoverTree * Parent() const
Get the parent node.
Definition: cover_tree.hpp:404