MLPACK  1.0.11
dtb.hpp
Go to the documentation of this file.
1 
35 #ifndef __MLPACK_METHODS_EMST_DTB_HPP
36 #define __MLPACK_METHODS_EMST_DTB_HPP
37 
38 #include "dtb_stat.hpp"
39 #include "edge_pair.hpp"
40 
41 #include <mlpack/core.hpp>
43 
45 
46 namespace mlpack {
47 namespace emst {
48 
87 template<
88  typename MetricType = metric::EuclideanDistance,
90 >
92 {
93  private:
95  typename TreeType::Mat dataCopy;
97  const typename TreeType::Mat& data;
98 
100  TreeType* tree;
102  bool ownTree;
103 
105  bool naive;
106 
108  std::vector<EdgePair> edges; // We must use vector with non-numerical types.
109 
112 
114  std::vector<size_t> oldFromNew;
116  arma::Col<size_t> neighborsInComponent;
118  arma::Col<size_t> neighborsOutComponent;
121 
123  double totalDist;
124 
126  MetricType metric;
127 
130  {
131  bool operator()(const EdgePair& pairA, const EdgePair& pairB)
132  {
133  return (pairA.Distance() < pairB.Distance());
134  }
135  } SortFun;
136 
137  public:
146  DualTreeBoruvka(const typename TreeType::Mat& dataset,
147  const bool naive = false,
148  const MetricType metric = MetricType());
149 
167  DualTreeBoruvka(TreeType* tree,
168  const typename TreeType::Mat& dataset,
169  const MetricType metric = MetricType());
170 
175 
185  void ComputeMST(arma::mat& results);
186 
190  std::string ToString() const;
191 
192  private:
196  void AddEdge(const size_t e1, const size_t e2, const double distance);
197 
201  void AddAllEdges();
202 
206  void EmitResults(arma::mat& results);
207 
212  void CleanupHelper(TreeType* tree);
213 
217  void Cleanup();
218 
219 }; // class DualTreeBoruvka
220 
221 }; // namespace emst
222 }; // namespace mlpack
223 
224 #include "dtb_impl.hpp"
225 
226 #endif // __MLPACK_METHODS_EMST_DTB_HPP