CluE  1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
completelinkage.h
Go to the documentation of this file.
1 #ifndef COMPLETELINKAGE_H
2 #define COMPLETELINKAGE_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 CompleteLinkage : public ClusterDissimilarityMeasure<T>
17 {
18 public:
20 
23  virtual ~CompleteLinkage();
24 
25  virtual CompleteLinkage<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> CompleteLinkage<T>::CompleteLinkage(const CompleteLinkage<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 
59 {
60  delete this->measure;
61 }
62 
63 template<typename T> CompleteLinkage<T>* CompleteLinkage<T>::clone() const
64 {
65  return new CompleteLinkage<T>(*this);
66 }
67 
68 template<typename T> double CompleteLinkage<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
CompleteLinkage(DissimilarityMeasure< T > const &measure)
virtual CompleteLinkage< T > * clone() const
Abstract base class for cluster dissimilarity measurement.
virtual double dissimilarity(std::vector< T * > const &c1, std::vector< T * > const &c2)
Computes the complete linkage dissimilarity between the two given clusters.
DissimilarityMeasure< T > * measure
CompleteLinkage< T > & operator=(const CompleteLinkage< T > &)
Complete cluster linkage.
Abstract base class for dissimilarity measurement.