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