📄 densitytreeinternal.cpp
字号:
#include "DensityTreeInternal.hpp"#include "DensityTreeLeaf.hpp"using namespace indii::ml::aux;DensityTreeInternal::DensityTreeInternal() : splitIndex(0), splitValue(0.0), left(NULL), right(NULL) { //}DensityTreeInternal::DensityTreeInternal(const vector& lower, const vector& upper, const unsigned int splitIndex, const double splitValue, DensityTreeNode* left, DensityTreeNode* right) : DensityTreeNode(lower, upper, left->getWeight() + right->getWeight(), left->getVolume() + right->getVolume()), splitIndex(splitIndex), splitValue(splitValue), left(left), right(right) { //}DensityTreeInternal::DensityTreeInternal(const DensityTreeInternal& o) : DensityTreeNode(o), splitIndex(o.splitIndex), splitValue(o.splitValue), left(NULL), right(NULL) { if (o.left != NULL) { if (typeid(*o.left) == typeid(DensityTreeInternal)) { left = new DensityTreeInternal( static_cast<DensityTreeInternal&>(*o.left)); } else if (typeid(*o.left) == typeid(DensityTreeLeaf)) { left = new DensityTreeLeaf( static_cast<DensityTreeLeaf&>(*o.left)); } else { assert(false); } assert (left != NULL); } if (o.right != NULL) { if (typeid(*o.right) == typeid(DensityTreeInternal)) { right = new DensityTreeInternal( static_cast<DensityTreeInternal&>(*o.right)); } else if (typeid(*o.right) == typeid(DensityTreeLeaf)) { right = new DensityTreeLeaf( static_cast<DensityTreeLeaf&>(*o.right)); } else { assert(false); } assert (right != NULL); }}DensityTreeInternal::~DensityTreeInternal() { delete left; delete right;}DensityTreeInternal& DensityTreeInternal::operator=( const DensityTreeInternal& o) { DensityTreeNode::operator=(o); splitIndex = o.splitIndex; splitValue = o.splitValue; if (o.left != NULL) { if (typeid(*o.left) == typeid(DensityTreeInternal)) { left = new DensityTreeInternal( static_cast<DensityTreeInternal&>(*o.left)); } else if (typeid(*o.left) == typeid(DensityTreeLeaf)) { left = new DensityTreeLeaf( static_cast<DensityTreeLeaf&>(*o.left)); } else { assert(false); } assert (left != NULL); } if (o.right != NULL) { if (typeid(*o.right) == typeid(DensityTreeInternal)) { right = new DensityTreeInternal( static_cast<DensityTreeInternal&>(*o.right)); } else if (typeid(*o.right) == typeid(DensityTreeLeaf)) { right = new DensityTreeLeaf( static_cast<DensityTreeLeaf&>(*o.right)); } else { assert(false); } assert (right != NULL); } return *this;}vector DensityTreeInternal::sumExpectation() { return left->sumExpectation() + right->sumExpectation();}symmetric_matrix DensityTreeInternal::sumCovariance() { return left->sumCovariance() + right->sumCovariance();}vector DensityTreeInternal::sample(const double u) { /* pre-condition */ assert (u >= 0.0 && u <= getWeight()); if (u <= left->getWeight()) { return left->sample(u); } else { return right->sample(u - left->getWeight()); }}double DensityTreeInternal::densityAt(const vector& x) { /* pre-condition */ assert (x.size() == getLower().size()); if (x(splitIndex) < splitValue) { return left->densityAt(x); } else { return right->densityAt(x); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -