CluE  1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
singlelinkage.h
Go to the documentation of this file.
1 #ifndef SINGLELINKAGE_H
2 #define SINGLELINKAGE_H
3 
4 #include "../base/dissimilaritymeasure.h"
5 #include "../base/clusterdissimilaritymeasure.h"
6 
7 #include <vector>
8 #include <limits>
9 
10 namespace CluE
11 {
12 
16 template<typename T> class SingleLinkage : public ClusterDissimilarityMeasure<T>
17 {
18 public:
20 
23  virtual ~SingleLinkage();
24 
25  virtual SingleLinkage<T>* clone() const;
26 
33  virtual double dissimilarity(std::vector<T*> const& c1, std::vector<T*> const& c2);
34 
35 private:
37 };
38 
40  measure(m.clone())
41 {
42 }
43 
44 template<typename T> SingleLinkage<T>::SingleLinkage(const SingleLinkage<T>& rhs) :
45  ClusterDissimilarityMeasure<T>(rhs), measure(rhs.measure->clone())
46 {
47 }
48 
50 {
52  DissimilarityMeasure<T>* dm = rhs.measure->clone();
53  delete this->measure;
54  this->measure = dm;
55  return *this;
56 }
57 
58 template<typename T> SingleLinkage<T>::~SingleLinkage()
59 {
60  delete this->measure;
61 }
62 
63 template<typename T> SingleLinkage<T>* SingleLinkage<T>::clone() const
64 {
65  return new SingleLinkage<T>(*this);
66 }
67 
68 template<typename T> double SingleLinkage<T>::dissimilarity(std::vector<T*> const& c1,
69  std::vector<T*> const& c2)
70 {
71  double max = std::numeric_limits<double>::infinity();
72  for (unsigned int i=0; i<c1.size(); i++)
73  for (unsigned int j=0; j<c2.size(); j++)
74  {
75  double cost = this->measure->dissimilarity(*c1[i], *c2[j]);
76  if (cost < max)
77  max = cost;
78  cost = this->measure->dissimilarity(*c2[j], *c1[i]);
79  if (cost < max)
80  max = cost;
81  }
82  return max;
83 }
84 
85 }
86 
87 #endif
Abstract base class for cluster dissimilarity measurement.
virtual ~SingleLinkage()
Definition: singlelinkage.h:58
DissimilarityMeasure< T > * measure
Definition: singlelinkage.h:36
virtual double dissimilarity(std::vector< T * > const &c1, std::vector< T * > const &c2)
Computes the single linkage dissimilarity between the two given clusters.
Definition: singlelinkage.h:68
SingleLinkage(const DissimilarityMeasure< T > &measure)
Definition: singlelinkage.h:39
Single cluster linkage.
Definition: singlelinkage.h:16
SingleLinkage< T > & operator=(const SingleLinkage< T > &)
Definition: singlelinkage.h:49
Abstract base class for dissimilarity measurement.
virtual SingleLinkage< T > * clone() const
Definition: singlelinkage.h:63