12 #ifndef MLPACK_CORE_TREE_OCTREE_OCTREE_HPP
13 #define MLPACK_CORE_TREE_OCTREE_OCTREE_HPP
16 #include "../hrectbound.hpp"
17 #include "../statistic.hpp"
23 typename StatisticType = EmptyStatistic,
24 typename MatType = arma::mat>
34 template<
typename RuleType>
38 template<
typename RuleType>
43 std::vector<Octree*> children;
76 Octree(
const MatType& data,
const size_t maxLeafSize = 20);
90 Octree(
const MatType& data,
91 std::vector<size_t>& oldFromNew,
92 const size_t maxLeafSize = 20);
109 Octree(
const MatType& data,
110 std::vector<size_t>& oldFromNew,
111 std::vector<size_t>& newFromOld,
112 const size_t maxLeafSize = 20);
122 Octree(MatType&& data,
const size_t maxLeafSize = 20);
137 std::vector<size_t>& oldFromNew,
138 const size_t maxLeafSize = 20);
156 std::vector<size_t>& oldFromNew,
157 std::vector<size_t>& newFromOld,
158 const size_t maxLeafSize = 20);
176 const arma::vec& center,
178 const size_t maxLeafSize = 20);
203 std::vector<size_t>& oldFromNew,
204 const arma::vec& center,
206 const size_t maxLeafSize = 20);
242 template<
typename Archive>
253 const MatType&
Dataset()
const {
return *dataset; }
266 const StatisticType&
Stat()
const {
return stat; }
268 StatisticType&
Stat() {
return stat; }
274 MetricType
Metric()
const {
return MetricType(); }
280 template<
typename VecType>
282 const VecType& point,
289 template<
typename VecType>
291 const VecType& point,
340 const Octree&
Child(
const size_t child)
const {
return *children[child]; }
371 size_t Point(
const size_t index)
const;
381 template<
typename VecType>
383 const VecType& point,
386 template<
typename VecType>
388 const VecType& point,
391 template<
typename VecType>
393 const VecType& point,
400 template<
typename Archive>
401 void serialize(Archive& ar,
const unsigned int );
413 friend class boost::serialization::access;
424 void SplitNode(
const arma::vec& center,
426 const size_t maxLeafSize);
437 void SplitNode(
const arma::vec& center,
439 std::vector<size_t>& oldFromNew,
440 const size_t maxLeafSize);
458 template<
typename VecType>
459 static bool AssignToLeftNode(
const VecType& point,
const SplitInfo& s)
470 #include "octree_impl.hpp"
ElemType ParentDistance() const
Return the distance from the center of this node to the center of the parent node.
A dual-tree traverser; see dual_tree_traverser.hpp.
Octree()
A default constructor.
MetricType Metric() const
Return the metric that this tree uses.
const MatType & Dataset() const
Return the dataset used by this node.
size_t GetFurthestChild(const VecType &point, typename std::enable_if_t< IsVector< VecType >::value > *=0) const
Return the index of the furthest child node to the given query point.
ElemType FurthestPointDistance() const
Return the furthest distance to a point held in this node.
typename enable_if< B, T >::type enable_if_t
ElemType MinimumBoundDistance() const
Return the minimum distance from the center of the node to any bound edge.
MatType::elem_type ElemType
The type of element held in MatType.
The core includes that mlpack expects; standard C++ includes and Armadillo.
const bound::HRectBound< MetricType > & Bound() const
Return the bound object for this node.
bound::HRectBound< MetricType > & Bound()
Modify the bound object for this node.
const StatisticType & Stat() const
Return the statistic object for this node.
math::RangeType< ElemType > RangeDistance(const Octree &other) const
Return the minimum and maximum distance to another node.
bool IsLeaf() const
Return whether or not the node is a leaf.
Octree * Parent() const
Get the pointer to the parent.
size_t NumChildren() const
Return the number of children in this node.
void Center(arma::Col< ElemType > ¢er) const
Calculates the center of the range, placing it into the given vector.
const Octree & Child(const size_t child) const
Return the specified child.
Octree & operator=(const Octree &other)
Copy the given Octree.
size_t Point(const size_t index) const
Return the index (with reference to the dataset) of a particular point in this node.
void serialize(Archive &ar, const unsigned int)
Serialize the tree.
~Octree()
Destroy the tree.
size_t NumPoints() const
Return the number of points in this node (0 if not a leaf).
A single-tree traverser; see single_tree_traverser.hpp.
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.
void Center(arma::vec ¢er) const
Store the center of the bounding region in the given vector.
SplitInfo(const size_t d, const arma::vec &c)
Create the SplitInfo object.
Octree & Child(const size_t child)
Return the specified child.
StatisticType & Stat()
Modify the statistic object for this node.
ElemType MinDistance(const Octree &other) const
Return the minimum distance to another node.
Octree *& Parent()
Modify the pointer to the parent (be careful!).
const arma::vec & center
The center of the node.
size_t GetNearestChild(const VecType &point, typename std::enable_if_t< IsVector< VecType >::value > *=0) const
Return the index of the nearest child node to the given query point.
size_t Descendant(const size_t index) const
Return the index (with reference to the dataset) of a particular descendant.
MatType Mat
So other classes can use TreeType::Mat.
size_t NumDescendants() const
Return the number of descendants of this node.
LMetric< 2, true > EuclideanDistance
The Euclidean (L2) distance.
Octree *& ChildPtr(const size_t child)
Return the pointer to the given child.
If value == true, then VecType is some sort of Armadillo vector or subview.
size_t d
The dimension we are splitting on.
ElemType MaxDistance(const Octree &other) const
Return the maximum distance to another node.