table of contents
other versions
- jessie 1.0.10-1
| mlpack::tree::TreeTraits< TreeType >(3) | MLPACK | mlpack::tree::TreeTraits< TreeType >(3) |
NAME¶
mlpack::tree::TreeTraits< TreeType > - The TreeTraits class provides compile-time information on the characteristics of a given tree type.SYNOPSIS¶
Static Public Attributes¶
static const bool FirstPointIsCentroid = false
Detailed Description¶
template<typename TreeType>class mlpack::tree::TreeTraits< TreeType >¶
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.
Member Data Documentation¶
template<typename TreeType > const bool mlpack::tree::TreeTraits< TreeType >::FirstPointIsCentroid = false [static]¶
This is true if Point(0) is the centroid of the node. Definition at line 100 of file tree_traits.hpp.template<typename TreeType > const bool mlpack::tree::TreeTraits< TreeType >::HasOverlappingChildren = true [static]¶
This is true if the subspaces represented by the children of a node can overlap. Definition at line 95 of file tree_traits.hpp.template<typename TreeType > const bool mlpack::tree::TreeTraits< TreeType >::HasSelfChildren = false [static]¶
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.template<typename TreeType > const bool mlpack::tree::TreeTraits< TreeType >::RearrangesDataset = false [static]¶
This is true if the tree rearranges points in the dataset when it is built. Definition at line 111 of file tree_traits.hpp.Author¶
Generated automatically by Doxygen for MLPACK from the source code.| Tue Sep 9 2014 | Version 1.0.10 |