Go to the documentation of this file.
11 #ifndef MLPACK_CORE_TREE_BINARY_SPACE_TREE_BINARY_SPACE_TREE_HPP
12 #define MLPACK_CORE_TREE_BINARY_SPACE_TREE_BINARY_SPACE_TREE_HPP
16 #include "../statistic.hpp"
47 template<
typename MetricType,
49 typename MatType = arma::mat,
50 template<
typename BoundMetricType,
typename...>
class BoundType =
52 template<
typename SplitBoundType,
typename SplitMatType>
62 typedef SplitType<BoundType<MetricType>, MatType>
Split;
78 BoundType<MetricType> bound;
95 template<
typename RuleType>
99 template<
typename RuleType>
102 template<
typename RuleType>
128 std::vector<size_t>& oldFromNew,
129 const size_t maxLeafSize = 20);
147 std::vector<size_t>& oldFromNew,
148 std::vector<size_t>& newFromOld,
149 const size_t maxLeafSize = 20);
161 const size_t maxLeafSize = 20);
176 std::vector<size_t>& oldFromNew,
177 const size_t maxLeafSize = 20);
195 std::vector<size_t>& oldFromNew,
196 std::vector<size_t>& newFromOld,
197 const size_t maxLeafSize = 20);
214 SplitType<BoundType<MetricType>, MatType>& splitter,
215 const size_t maxLeafSize = 20);
239 std::vector<size_t>& oldFromNew,
240 SplitType<BoundType<MetricType>, MatType>& splitter,
241 const size_t maxLeafSize = 20);
268 std::vector<size_t>& oldFromNew,
269 std::vector<size_t>& newFromOld,
270 SplitType<BoundType<MetricType>, MatType>& splitter,
271 const size_t maxLeafSize = 20);
306 template<
typename Archive>
319 const BoundType<MetricType>&
Bound()
const {
return bound; }
321 BoundType<MetricType>&
Bound() {
return bound; }
324 const StatisticType&
Stat()
const {
return stat; }
326 StatisticType&
Stat() {
return stat; }
347 const MatType&
Dataset()
const {
return *dataset; }
352 MetricType
Metric()
const {
return MetricType(); }
361 template<
typename VecType>
363 const VecType& point,
370 template<
typename VecType>
372 const VecType& point,
421 {
return (child == 0) ? left : right; }
450 size_t Point(
const size_t index)
const;
455 return bound.MinDistance(other.
Bound());
461 return bound.MaxDistance(other.
Bound());
467 return bound.RangeDistance(other.
Bound());
471 template<
typename VecType>
476 return bound.MinDistance(point);
480 template<
typename VecType>
485 return bound.MaxDistance(point);
489 template<
typename VecType>
494 return bound.RangeDistance(point);
498 size_t Begin()
const {
return begin; }
503 size_t Count()
const {
return count; }
508 void Center(arma::vec& center)
const { bound.Center(center); }
517 void SplitNode(
const size_t maxLeafSize,
518 SplitType<BoundType<MetricType>, MatType>& splitter);
528 void SplitNode(std::vector<size_t>& oldFromNew,
529 const size_t maxLeafSize,
530 SplitType<BoundType<MetricType>, MatType>& splitter);
538 template<
typename BoundType2>
539 void UpdateBound(BoundType2& boundToUpdate);
559 friend class boost::serialization::access;
565 template<
typename Archive>
566 void serialize(Archive& ar,
const unsigned int version);
573 #include "binary_space_tree_impl.hpp"
576 #include "../binary_space_tree.hpp"
BinarySpaceTree(BinarySpaceTree *parent, const size_t begin, const size_t count, std::vector< size_t > &oldFromNew, std::vector< size_t > &newFromOld, SplitType< BoundType< MetricType >, MatType > &splitter, const size_t maxLeafSize=20)
Construct this node as a child of the given parent, starting at column begin and using count points.
BinarySpaceTree(const MatType &data, std::vector< size_t > &oldFromNew, const size_t maxLeafSize=20)
Construct this as the root node of a binary space tree using the given dataset.
size_t Count() const
Return the number of points in this subset.
size_t GetFurthestChild(const BinarySpaceTree &queryNode)
Return the index of the furthest child node to the given query node.
size_t & Count()
Modify the number of points in this subset.
BinarySpaceTree(const BinarySpaceTree &other)
Create a binary space tree by copying the other tree.
BinarySpaceTree * Parent() const
Gets the parent of this node.
ElemType MinDistance(const BinarySpaceTree &other) const
Return the minimum distance to another node.
The core includes that mlpack expects; standard C++ includes and Armadillo.
BinarySpaceTree & Child(const size_t child) const
Return the specified child (0 will be left, 1 will be right).
size_t Begin() const
Return the index of the beginning point of this subset.
ElemType & ParentDistance()
Modify the distance from the center of this node to the center of the parent node.
ElemType FurthestDescendantDistance() const
Return the furthest possible descendant distance.
BinarySpaceTree(MatType &&data, std::vector< size_t > &oldFromNew, const size_t maxLeafSize=20)
Construct this as the root node of a binary space tree using the given dataset.
BinarySpaceTree(BinarySpaceTree &&other)
Move constructor for a BinarySpaceTree; possess all the members of the given tree.
size_t NumChildren() const
Return the number of children in this node.
MetricType Metric() const
Get the metric that the tree uses.
MatType Mat
So other classes can use TreeType::Mat.
A binary space partitioning tree, such as a KD-tree or a ball tree.
math::RangeType< ElemType > RangeDistance(const BinarySpaceTree &other) const
Return the minimum and maximum distance to another node.
BinarySpaceTree(const MatType &data, std::vector< size_t > &oldFromNew, std::vector< size_t > &newFromOld, const size_t maxLeafSize=20)
Construct this as the root node of a binary space tree using the given dataset.
ElemType FurthestPointDistance() const
Return the furthest distance to a point held in this node.
BinarySpaceTree()
A default constructor.
A dual-tree traverser for binary space trees; see dual_tree_traverser.hpp.
BinarySpaceTree * Right() const
Gets the right child of this node.
~BinarySpaceTree()
Deletes this node, deallocating the memory for the children and calling their destructors in turn.
BinarySpaceTree * Left() const
Gets the left child of this node.
size_t NumDescendants() const
Return the number of descendants of this node.
Hyper-rectangle bound for an L-metric.
Linear algebra utility functions, generally performed on matrices or vectors.
typename enable_if< B, T >::type enable_if_t
MatType::elem_type ElemType
The type of element held in MatType.
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.
SplitType< BoundType< MetricType >, MatType > Split
size_t GetNearestChild(const BinarySpaceTree &queryNode)
Return the index of the nearest child node to the given query node.
const StatisticType & Stat() const
Return the statistic object for this node.
StatisticType & Stat()
Return the statistic object for this node.
ElemType MinDistance(const VecType &point, typename std::enable_if_t< IsVector< VecType >::value > *=0) const
Return the minimum distance to another point.
MatType & Dataset()
Modify the dataset which the tree is built on. Be careful!
void serialize(Archive &ar, const unsigned int version)
Serialize the tree.
size_t Descendant(const size_t index) const
Return the index (with reference to the dataset) of a particular descendant of this node.
Hollow ball bound encloses a set of points at a specific distance (radius) from a specific point (cen...
BinarySpaceTree(BinarySpaceTree *parent, const size_t begin, const size_t count, SplitType< BoundType< MetricType >, MatType > &splitter, const size_t maxLeafSize=20)
Construct this node as a child of the given parent, starting at column begin and using count points.
BinarySpaceTree *& Parent()
Modify the parent of this node.
BinarySpaceTree(MatType &&data, std::vector< size_t > &oldFromNew, std::vector< size_t > &newFromOld, const size_t maxLeafSize=20)
Construct this as the root node of a binary space tree using the given dataset.
math::RangeType< ElemType > RangeDistance(const VecType &point, typename std::enable_if_t< IsVector< VecType >::value > *=0) const
Return the minimum and maximum distance to another point.
void Center(arma::vec ¢er) const
Store the center of the bounding region in the given vector.
A binary space partitioning tree node is split into its left and right child.
bool IsLeaf() const
Return whether or not this node is a leaf (true if it has no children).
BinarySpaceTree & operator=(const BinarySpaceTree &other)
Copy the given BinarySaceTree.
BinarySpaceTree(MatType &&data, const size_t maxLeafSize=20)
Construct this as the root node of a binary space tree using the given dataset.
ElemType MinimumBoundDistance() const
Return the minimum distance from the center of the node to any bound edge.
BinarySpaceTree(const MatType &data, const size_t maxLeafSize=20)
Construct this as the root node of a binary space tree using the given dataset.
const BoundType< MetricType > & Bound() const
Return the bound object for this node.
BinarySpaceTree & operator=(BinarySpaceTree &&other)
Take ownership of the given BinarySpaceTree.
size_t Point(const size_t index) const
Return the index (with reference to the dataset) of a particular point in this node.
A single-tree traverser for binary space trees; see single_tree_traverser.hpp for implementation.
ElemType MaxDistance(const VecType &point, typename std::enable_if_t< IsVector< VecType >::value > *=0) const
Return the maximum distance to another point.
BinarySpaceTree(Archive &ar, const typename std::enable_if_t< Archive::is_loading::value > *=0)
Initialize the tree from a boost::serialization archive.
BinarySpaceTree *& ChildPtr(const size_t child)
BinarySpaceTree *& Right()
Modify the right child of this node.
const MatType & Dataset() const
Get the dataset which the tree is built on.
BinarySpaceTree(BinarySpaceTree *parent, const size_t begin, const size_t count, std::vector< size_t > &oldFromNew, SplitType< BoundType< MetricType >, MatType > &splitter, const size_t maxLeafSize=20)
Construct this node as a child of the given parent, starting at column begin and using count points.
BinarySpaceTree *& Left()
Modify the left child of this node.
BoundType< MetricType > & Bound()
Return the bound object for this node.
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 NumPoints() const
Return the number of points in this node (0 if not a leaf).
size_t & Begin()
Modify the index of the beginning point of this subset.
ElemType ParentDistance() const
Return the distance from the center of this node to the center of the parent node.
Empty statistic if you are not interested in storing statistics in your tree.
ElemType MaxDistance(const BinarySpaceTree &other) const
Return the maximum distance to another node.
If value == true, then VecType is some sort of Armadillo vector or subview.