The treetraits class provides compile-time information on the characteristics of a given tree type.
static const bool FirstPointIsCentroid = false
This is true if Point(0) is the centroid of the node. static const bool HasOverlappingChildren = true
This is true if the subspaces represented by the children of a node can overlap. static const bool HasSelfChildren = false
This is true if the points contained in the first child of a node (Child(0)) are also contained in that node. static const bool RearrangesDataset = false
This is true if the tree rearranges points in the dataset when it is built.
The TreeTraits class provides compile-time information on the characteristics of a given tree type.
These include traits such as whether or not a node knows the distance to its parent node, or whether or not the subspaces represented by children can overlap.
These traits can be used for static compile-time optimization:
// This if statement will be optimized out at compile time! if (TreeTraits<TreeType>::HasOverlappingChildren == false) { // Do a simpler computation because no children overlap. } else { // Do the full, complex calculation. }
The traits can also be used in conjunction with SFINAE to write specialized versions of functions:
template<typename TreeType> void Compute(TreeType& node, boost::enable_if< TreeTraits<TreeType>::RearrangesDataset>::type*) { // Computation where special dataset-rearranging tree constructor is // called. } template<typename TreeType> void Compute(TreeType& node, boost::enable_if< !TreeTraits<TreeType>::RearrangesDataset>::type*) { // Computation where normal tree constructor is called. }
In those two examples, the boost::enable_if<> class takes a boolean template parameter which allows that function to be called when the boolean is true.
Each trait must be a static const value and not a function; only const values can be used as template parameters (with the exception of constexprs, which are a C++11 feature; but MLPACK is not using C++11). By default (the unspecialized implementation of TreeTraits), each parameter is set to make as few assumptions about the tree as possible; so, even if TreeTraits is not specialized for a particular tree type, tree-based algorithms should still work.
When you write your own tree, you must specialize the TreeTraits class to your tree type and set the corresponding values appropriately. See mlpack/core/tree/binary_space_tree/traits.hpp for an example.
Definition at line 88 of file tree_traits.hpp.
This is true if Point(0) is the centroid of the node.
Definition at line 100 of file tree_traits.hpp.
This is true if the subspaces represented by the children of a node can overlap.
Definition at line 95 of file tree_traits.hpp.
This is true if the points contained in the first child of a node (Child(0)) are also contained in that node.
Definition at line 106 of file tree_traits.hpp.
This is true if the tree rearranges points in the dataset when it is built.
Definition at line 111 of file tree_traits.hpp.
Generated automatically by Doxygen for MLPACK from the source code.