Ice Sheet System Model  4.18
Code documentation
Covertree.h
Go to the documentation of this file.
1 
2 #ifndef _COVERTREE_H
3 #define _COVERTREE_H
4 
5 #include <map>
6 class Observation;
7 
8 class Covertree{
9 
10  /* Cover tree node. Consists of arbitrarily many points P, as long as they
11  * have distance 0 to each other. Keeps track of its children. */
13  private:
14  //_childMap[i] is a vector of the node's children at level i
15  std::map<int,std::vector<CoverTreeNode*> > _childMap;
16  //_observations is all of the points with distance 0 which are not equal.
17  std::vector<Observation> _observations;
18  public:
19  CoverTreeNode(const Observation& o);
27  void addChild(int level, CoverTreeNode* p);
28  void addObservation(const Observation& o);
29  double distance(const CoverTreeNode& p) const;
30  bool isSingle() const;
31  bool hasObservation(const Observation& o) const;
32  std::vector<CoverTreeNode*> getChildren(int level) const;
33  const Observation& getObservation() const;
34  const std::vector<Observation>& getObservations() { return _observations; }
35  void removeChild(int level, CoverTreeNode* p);
36  void removeObservation(const Observation& o);
37 
42  std::vector<CoverTreeNode*> getAllChildren() const;
43  }; // CoverTreeNode class
44  private:
45  typedef std::pair<double, CoverTreeNode*> distNodePair;
46 
48  unsigned int _numNodes;
49  int _maxLevel; //base^_maxLevel should be the max distance
50  //between any 2 points
51  int _minLevel; //A level beneath which there are no more new nodes.
52 
53  /* Finds the node in Q with the minimum distance to p. Returns a pair
54  * consisting of this node and the distance. */
55  distNodePair distance(const Observation& p,const std::vector<CoverTreeNode*>& Q);
59  bool insert_rec(const Observation& p, const std::vector<distNodePair>& Qi,const int& level);
60 
61  std::vector<CoverTreeNode*> kNearestNodes(const Observation& o, const unsigned int& k) const;
62  void remove_rec(const Observation& p, std::map<int,std::vector<distNodePair> >& coverSets, int level, bool& multi);
63 
64  public:
65  double base;
66 
76  Covertree(int maxDist,const std::vector<Observation>& points=std::vector<Observation>());
77  ~Covertree();
78 
86  void insert(const Observation& newObservation);
87 
95  bool isValidTree() const;
96 
97 
103  void remove(const Observation& p);
104 
110  std::vector<Observation> kNearestNeighbors(const Observation& p, const unsigned int& k) const;
111 
112  int get_numberofobs();
113 
114  CoverTreeNode* getRoot() const;
115 
119  void print() const;
120 };
121 #endif //_COVERTREE_H
Covertree::insert
void insert(const Observation &newObservation)
Definition: Covertree.cpp:49
Covertree::CoverTreeNode::addObservation
void addObservation(const Observation &o)
Definition: Covertree.cpp:338
Observation
Definition: Observation.h:10
Covertree::CoverTreeNode::_observations
std::vector< Observation > _observations
Definition: Covertree.h:17
Covertree::CoverTreeNode::distance
double distance(const CoverTreeNode &p) const
Definition: Covertree.cpp:345
Covertree
Definition: Covertree.h:8
Covertree::CoverTreeNode::getObservation
const Observation & getObservation() const
Definition: Covertree.cpp:364
Covertree::getRoot
CoverTreeNode * getRoot() const
Definition: Covertree.cpp:367
Covertree::CoverTreeNode::_childMap
std::map< int, std::vector< CoverTreeNode * > > _childMap
Definition: Covertree.h:15
Covertree::kNearestNodes
std::vector< CoverTreeNode * > kNearestNodes(const Observation &o, const unsigned int &k) const
Definition: Covertree.cpp:108
Covertree::CoverTreeNode::getObservations
const std::vector< Observation > & getObservations()
Definition: Covertree.h:34
Covertree::isValidTree
bool isValidTree() const
Definition: Covertree.cpp:376
Covertree::~Covertree
~Covertree()
Definition: Covertree.cpp:17
Covertree::CoverTreeNode
Definition: Covertree.h:12
Covertree::print
void print() const
Definition: Covertree.cpp:167
Covertree::Covertree
Covertree(int maxDist, const std::vector< Observation > &points=std::vector< Observation >())
Definition: Covertree.cpp:6
Covertree::get_numberofobs
int get_numberofobs()
Definition: Covertree.cpp:46
Covertree::_root
CoverTreeNode * _root
Definition: Covertree.h:47
Covertree::distNodePair
std::pair< double, CoverTreeNode * > distNodePair
Definition: Covertree.h:45
Covertree::remove
void remove(const Observation &p)
Definition: Covertree.cpp:194
Covertree::base
double base
Definition: Covertree.h:65
Covertree::distance
distNodePair distance(const Observation &p, const std::vector< CoverTreeNode * > &Q)
Definition: Covertree.cpp:33
Covertree::CoverTreeNode::isSingle
bool isSingle() const
Definition: Covertree.cpp:373
Covertree::_maxLevel
int _maxLevel
Definition: Covertree.h:49
Covertree::CoverTreeNode::removeChild
void removeChild(int level, CoverTreeNode *p)
Definition: Covertree.cpp:415
Covertree::remove_rec
void remove_rec(const Observation &p, std::map< int, std::vector< distNodePair > > &coverSets, int level, bool &multi)
Definition: Covertree.cpp:232
Covertree::CoverTreeNode::addChild
void addChild(int level, CoverTreeNode *p)
Definition: Covertree.cpp:335
Covertree::_minLevel
int _minLevel
Definition: Covertree.h:51
Covertree::_numNodes
unsigned int _numNodes
Definition: Covertree.h:48
Covertree::kNearestNeighbors
std::vector< Observation > kNearestNeighbors(const Observation &p, const unsigned int &k) const
Definition: Covertree.cpp:155
Covertree::CoverTreeNode::getAllChildren
std::vector< CoverTreeNode * > getAllChildren() const
Definition: Covertree.cpp:348
Covertree::CoverTreeNode::hasObservation
bool hasObservation(const Observation &o) const
Definition: Covertree.cpp:370
Covertree::CoverTreeNode::CoverTreeNode
CoverTreeNode(const Observation &o)
Definition: Covertree.cpp:342
Covertree::CoverTreeNode::getChildren
std::vector< CoverTreeNode * > getChildren(int level) const
Definition: Covertree.cpp:356
Covertree::CoverTreeNode::removeObservation
void removeObservation(const Observation &o)
Definition: Covertree.cpp:425
Covertree::insert_rec
bool insert_rec(const Observation &p, const std::vector< distNodePair > &Qi, const int &level)
Definition: Covertree.cpp:69