⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 densitytreeinternal.cpp

📁 dysii是一款非常出色的滤波函数库
💻 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 + -