13#ifndef MLPACK_CORE_TREE_RECTANGLE_TREE_DISCRETE_HILBERT_VALUE_HPP
14#define MLPACK_CORE_TREE_RECTANGLE_TREE_DISCRETE_HILBERT_VALUE_HPP
28template<
typename TreeElemType>
34 typedef typename std::conditional<
sizeof(TreeElemType) * CHAR_BIT <= 32,
36 uint64_t>::type HilbertElemType;
47 template<
typename TreeType>
57 template<
typename TreeType>
81 template<
typename VecType1,
typename VecType2>
82 static int ComparePoints(
118 template<
typename VecType>
133 template<
typename VecType>
134 int CompareWithCachedPoint(
145 template<
typename TreeType,
typename VecType>
146 size_t InsertPoint(TreeType *node,
155 template<
typename TreeType>
156 void InsertNode(TreeType* node);
165 template<
typename TreeType>
166 void DeletePoint(TreeType* node,
const size_t localIndex);
174 template<
typename TreeType>
175 void RemoveNode(TreeType* node,
const size_t nodeIndex);
197 template<
typename TreeType>
198 void UpdateLargestValue(TreeType* node);
209 template<
typename TreeType>
210 void RedistributeHilbertValues(TreeType* parent,
211 const size_t firstSibling,
212 const size_t lastSibling);
219 template<
typename VecType>
220 static arma::Col<HilbertElemType> CalculateValue(
232 static int CompareValues(
const arma::Col<HilbertElemType>& value1,
233 const arma::Col<HilbertElemType>& value2);
236 size_t NumValues()
const {
return numValues; }
238 size_t& NumValues() {
return numValues; }
241 const arma::Mat<HilbertElemType>* LocalHilbertValues()
const
242 {
return localHilbertValues; }
244 arma::Mat<HilbertElemType>*& LocalHilbertValues()
245 {
return localHilbertValues; }
248 bool OwnsLocalHilbertValues()
const {
return ownsLocalHilbertValues; }
250 bool& OwnsLocalHilbertValues() {
return ownsLocalHilbertValues; }
253 const arma::Col<HilbertElemType>* ValueToInsert()
const
254 {
return valueToInsert; }
256 arma::Col<HilbertElemType>* ValueToInsert() {
return valueToInsert; }
259 bool OwnsValueToInsert()
const {
return ownsValueToInsert; }
261 bool& OwnsValueToInsert() {
return ownsValueToInsert; }
264 static constexpr size_t order =
sizeof(HilbertElemType) * CHAR_BIT;
266 arma::Mat<HilbertElemType>* localHilbertValues;
268 bool ownsLocalHilbertValues;
277 arma::Col<HilbertElemType>* valueToInsert;
279 bool ownsValueToInsert;
282 template<
typename Archive>
283 void serialize(Archive& ar,
const unsigned int );
290#include "discrete_hilbert_value_impl.hpp"
The DiscreteHilbertValue class stores Hilbert values for all of the points in a RectangleTree node,...
Linear algebra utility functions, generally performed on matrices or vectors.
typename enable_if< B, T >::type enable_if_t
The core includes that mlpack expects; standard C++ includes and Armadillo.
If value == true, then VecType is some sort of Armadillo vector or subview.