13 #ifndef MLPACK_CORE_TREE_RECTANGLE_TREE_RECTANGLE_TREE_HPP 14 #define MLPACK_CORE_TREE_RECTANGLE_TREE_RECTANGLE_TREE_HPP 18 #include "../hrectbound.hpp" 19 #include "../statistic.hpp" 47 template<
typename MetricType = metric::EuclideanDistance,
48 typename StatisticType = EmptyStatistic,
49 typename MatType = arma::mat,
50 typename SplitType = RTreeSplit,
51 typename DescentType = RTreeDescentHeuristic,
52 template<
typename>
class AuxiliaryInformationType =
53 NoAuxiliaryInformation>
57 static_assert(std::is_same<MetricType, metric::EuclideanDistance>::value,
58 "RectangleTree: MetricType must be metric::EuclideanDistance.");
69 size_t maxNumChildren;
71 size_t minNumChildren;
75 std::vector<RectangleTree*> children;
87 size_t numDescendants;
97 ElemType parentDistance;
99 const MatType* dataset;
104 std::vector<size_t> points;
106 AuxiliaryInformationType<RectangleTree> auxiliaryInfo;
111 template<
typename RuleType>
114 template<
typename RuleType>
132 const size_t maxLeafSize = 20,
133 const size_t minLeafSize = 8,
134 const size_t maxNumChildren = 5,
135 const size_t minNumChildren = 2,
136 const size_t firstDataIndex = 0);
153 const size_t maxLeafSize = 20,
154 const size_t minLeafSize = 8,
155 const size_t maxNumChildren = 5,
156 const size_t minNumChildren = 2,
157 const size_t firstDataIndex = 0);
168 const size_t numMaxChildren = 0);
179 const bool deepCopy =
true,
206 template<
typename Archive>
209 const typename std::enable_if_t<cereal::is_loading<Archive>()>* = 0);
246 void InsertPoint(
const size_t point, std::vector<bool>& relevels);
261 std::vector<bool>& relevels);
280 bool DeletePoint(
const size_t point, std::vector<bool>& relevels);
320 const StatisticType&
Stat()
const {
return stat; }
322 StatisticType&
Stat() {
return stat; }
326 {
return auxiliaryInfo; }
329 {
return auxiliaryInfo; }
360 const MatType&
Dataset()
const {
return *dataset; }
362 MatType&
Dataset() {
return const_cast<MatType&
>(*dataset); }
365 MetricType
Metric()
const {
return MetricType(); }
379 template<
typename VecType>
381 const VecType& point,
388 template<
typename VecType>
390 const VecType& point,
439 return *children[child];
449 return *children[child];
480 size_t Point(
const size_t index)
const {
return points[index]; }
484 size_t&
Point(
const size_t index) {
return points[index]; }
505 template<
typename VecType>
514 template<
typename VecType>
523 template<
typename VecType>
525 const VecType& point,
543 size_t Begin()
const {
return begin; }
548 size_t Count()
const {
return count; }
558 void SplitNode(std::vector<bool>& relevels);
603 std::vector<bool>& relevels,
604 const bool usePoint);
632 template<
typename Archive>
633 void serialize(Archive& ar,
const uint32_t );
size_t TreeSize() const
Obtains the number of nodes in the tree, starting with this.
Definition: rectangle_tree_impl.hpp:723
const MatType & Dataset() const
Get the dataset which the tree is built on.
Definition: rectangle_tree.hpp:360
math::RangeType< ElemType > RangeDistance(const HRectBound &other) const
Calculates minimum and maximum bound-to-bound distance.
Definition: hrectbound_impl.hpp:391
size_t & Count()
Modify the number of points in this subset.
Definition: rectangle_tree.hpp:550
ElemType FurthestDescendantDistance() const
Return the furthest possible descendant distance.
Definition: rectangle_tree_impl.hpp:931
ElemType MinWidth() const
Get the minimum width of the bound.
Definition: hrectbound.hpp:106
size_t Point(const size_t index) const
Return the index (with reference to the dataset) of a particular point in this node.
Definition: rectangle_tree.hpp:480
void NullifyData()
Nullify the auxiliary information.
Definition: rectangle_tree_impl.hpp:457
void SoftDelete()
Delete this node of the tree, but leave the stuff contained in it intact.
Definition: rectangle_tree_impl.hpp:435
MatType & Dataset()
Modify the dataset which the tree is built on. Be careful!
Definition: rectangle_tree.hpp:362
size_t & MinLeafSize()
Modify the minimum leaf size.
Definition: rectangle_tree.hpp:342
~RectangleTree()
Deletes this node, deallocating the memory for the children and calling their destructors in turn...
Definition: rectangle_tree_impl.hpp:414
size_t & MaxLeafSize()
Modify the maximum leaf size.
Definition: rectangle_tree.hpp:337
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
RectangleTree & Child(const size_t child)
Modify the specified child.
Definition: rectangle_tree.hpp:447
RectangleTree * ExactClone()
Make an exact copy of this node, pointers and everything.
size_t Begin() const
Return the index of the beginning point of this subset.
Definition: rectangle_tree.hpp:543
size_t & MinNumChildren()
Modify the minimum number of children (in a non-leaf node).
Definition: rectangle_tree.hpp:352
const RectangleTree * FindByBeginCount(size_t begin, size_t count) const
Find a node in this tree by its begin and count (const).
ElemType MinDistance(const RectangleTree &other) const
Return the minimum distance to another node.
Definition: rectangle_tree.hpp:487
ElemType FurthestPointDistance() const
Return the furthest distance to a point held in this node.
Definition: rectangle_tree_impl.hpp:905
The core includes that mlpack expects; standard C++ includes and Armadillo.
ElemType MinimumBoundDistance() const
Return the minimum distance from the center to any edge of the bound.
Definition: rectangle_tree.hpp:423
const bound::HRectBound< MetricType > & Bound() const
Return the bound object for this node.
Definition: rectangle_tree.hpp:315
friend AuxiliaryInformation
Give friend access for AuxiliaryInformationType.
Definition: rectangle_tree.hpp:586
bool DeletePoint(const size_t point)
Deletes a point from the treeand, updates the bounding rectangle.
Definition: rectangle_tree_impl.hpp:587
size_t & Point(const size_t index)
Modify the index of a particular point in this node.
Definition: rectangle_tree.hpp:484
bound::HRectBound< MetricType > & Bound()
Modify the bound object for this node.
Definition: rectangle_tree.hpp:317
size_t & NumChildren()
Modify the number of child nodes. Be careful.
Definition: rectangle_tree.hpp:373
size_t NumDescendants() const
Return the number of descendants of this node.
Definition: rectangle_tree_impl.hpp:966
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: rectangle_tree_impl.hpp:777
void serialize(Archive &ar, const uint32_t)
Serialize the tree.
Definition: rectangle_tree_impl.hpp:1395
ElemType MaxDistance(const RectangleTree &other) const
Return the maximum distance to another node.
Definition: rectangle_tree.hpp:493
const AuxiliaryInformationType< RectangleTree > & AuxiliaryInfo() const
Return the auxiliary information object of this node.
Definition: rectangle_tree.hpp:325
size_t NumPoints() const
Return the number of points in this node (returns 0 if this node is not a leaf).
Definition: rectangle_tree_impl.hpp:948
size_t & Begin()
Modify the index of the beginning point of this subset.
Definition: rectangle_tree.hpp:545
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.
Definition: rectangle_tree.hpp:524
bool RemoveNode(const RectangleTree *node, std::vector< bool > &relevels)
Removes a node from the tree.
Definition: rectangle_tree_impl.hpp:684
void Center(arma::vec ¢er)
Get the centroid of the node and store it in the given vector.
Definition: rectangle_tree.hpp:368
friend DescentType
Give friend access for DescentType.
Definition: rectangle_tree.hpp:580
AuxiliaryInformationType< RectangleTree > AuxiliaryInformation
The auxiliary information type held by the tree.
Definition: rectangle_tree.hpp:66
size_t NumChildren() const
Return the number of child nodes. (One level beneath this one only.)
Definition: rectangle_tree.hpp:371
friend SplitType
Give friend access for SplitType.
Definition: rectangle_tree.hpp:583
ElemType MaxDistance(const VecType &point, typename std::enable_if_t< IsVector< VecType >::value > *=0) const
Calculates maximum bound-to-point squared distance.
Definition: hrectbound_impl.hpp:309
MatType::elem_type ElemType
The element type held by the matrix type.
Definition: rectangle_tree.hpp:64
friend class cereal::access
Friend access is given for the default constructor.
Definition: rectangle_tree.hpp:577
size_t MinNumChildren() const
Return the minimum number of children (in a non-leaf node).
Definition: rectangle_tree.hpp:350
void InsertPoint(const size_t point)
Inserts a point into the tree.
Definition: rectangle_tree_impl.hpp:474
ElemType MinDistance(const VecType &point, typename std::enable_if_t< IsVector< VecType >::value > *=0) const
Calculates minimum bound-to-point distance.
Definition: hrectbound_impl.hpp:189
size_t TreeDepth() const
Obtains the number of levels below this node in the tree, starting with this.
Definition: rectangle_tree_impl.hpp:739
MatType Mat
So other classes can use TreeType::Mat.
Definition: rectangle_tree.hpp:58
bool ShrinkBoundForBound(const bound::HRectBound< MetricType > &changedBound)
Shrink the bound object of this node for the removal of a child node.
Definition: rectangle_tree_impl.hpp:1359
A rectangle type tree tree, such as an R-tree or X-tree.
Definition: rectangle_tree.hpp:54
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: rectangle_tree_impl.hpp:810
const StatisticType & Stat() const
Return the statistic object for this node.
Definition: rectangle_tree.hpp:320
RectangleTree & operator=(const RectangleTree &other)
Copy the given rectangle tree.
Definition: rectangle_tree_impl.hpp:278
void Center(arma::Col< ElemType > ¢er) const
Calculates the center of the range, placing it into the given vector.
Definition: hrectbound_impl.hpp:153
size_t MaxLeafSize() const
Return the maximum leaf size.
Definition: rectangle_tree.hpp:335
size_t & MaxNumChildren()
Modify the maximum number of children (in a non-leaf node).
Definition: rectangle_tree.hpp:347
void CondenseTree(const arma::vec &point, std::vector< bool > &relevels, const bool usePoint)
Condense the bounding rectangles for this node based on the removal of the point specified by the arm...
Definition: rectangle_tree_impl.hpp:1077
ElemType MinDistance(const VecType &point, typename std::enable_if_t< IsVector< VecType >::value > *=0) const
Return the minimum distance to another point.
Definition: rectangle_tree.hpp:506
A dual tree traverser for rectangle type trees.
Definition: dual_tree_traverser.hpp:31
RectangleTree()
A default constructor.
Definition: rectangle_tree_impl.hpp:1048
void InsertNode(RectangleTree *node, const size_t level, std::vector< bool > &relevels)
Inserts a node into the tree, tracking which levels have been inserted into.
Definition: rectangle_tree_impl.hpp:551
ElemType MaxDistance(const VecType &point, typename std::enable_if_t< IsVector< VecType >::value > *=0) const
Return the maximum distance to another point.
Definition: rectangle_tree.hpp:515
size_t MaxNumChildren() const
Return the maximum number of children (in a non-leaf node).
Definition: rectangle_tree.hpp:345
A single traverser for rectangle type trees.
Definition: rectangle_tree.hpp:112
bool IsLeaf() const
Return whether or not this node is a leaf (true if it has no children).
Definition: rectangle_tree_impl.hpp:760
math::RangeType< ElemType > RangeDistance(const RectangleTree &other) const
Return the minimum and maximum distance to another node.
Definition: rectangle_tree.hpp:499
RectangleTree & Child(const size_t child) const
Get the specified child.
Definition: rectangle_tree.hpp:437
RectangleTree *& Parent()
Modify the parent of this node.
Definition: rectangle_tree.hpp:357
StatisticType & Stat()
Modify the statistic object for this node.
Definition: rectangle_tree.hpp:322
ElemType ParentDistance() const
Return the distance from the center of this node to the center of the parent node.
Definition: rectangle_tree.hpp:427
AuxiliaryInformationType< RectangleTree > & AuxiliaryInfo()
Modify the split object of this node.
Definition: rectangle_tree.hpp:328
size_t Descendant(const size_t index) const
Return the index (with reference to the dataset) of a particular descendant of this node...
Definition: rectangle_tree_impl.hpp:981
size_t MinLeafSize() const
Return the minimum leaf size.
Definition: rectangle_tree.hpp:340
bool ShrinkBoundForPoint(const arma::vec &point)
Shrink the bound object of this node for the removal of a point.
Definition: rectangle_tree_impl.hpp:1261
ElemType & ParentDistance()
Modify the distance from the center of this node to the center of the parent node.
Definition: rectangle_tree.hpp:430
If value == true, then VecType is some sort of Armadillo vector or subview.
Definition: arma_traits.hpp:35
RectangleTree * Parent() const
Gets the parent of this node.
Definition: rectangle_tree.hpp:355
size_t Count() const
Return the number of points in this subset.
Definition: rectangle_tree.hpp:548
MetricType Metric() const
Get the metric which the tree uses.
Definition: rectangle_tree.hpp:365