在介绍最小生成树算法(MST)之前,简单说一下平均链接算法(average-link)的实现过程,平均链接聚类算法和单链接类似,多了计算聚类之间距离矩阵的步骤
实现步骤如下:
1,将元素各成一组,把这些组放入容器H
2,循环元素距离数组,根据两层下标得到将要比较的两个元素A,B
3,在H中分别查找含有A,B的组AH,BH。假如AH不等于BH(也就是A,B不同组), AH和BH的距离累加A,B的距离。
4,得到组间距离数组后,循环比较组间距离与阀值,小于阀值,则此两组合并成一组,合并之前把H中的两个作为比较的原始组删除。
MST算法比较有意思点,不仅用于聚类,还可以解决最短铺路成本这类问题。
我们假设一个场景:现在想在多个城市之间铺网络,怎样才是最短距离?每个城市当作一个数据点,每个点间的距离称为一个边,最短距离实际上就是求得每个点都能连成边,但是又不会回路的情况。
实现过程如下:
1,首先建立城市类和边类,如下
01
/**
02
* 城市
03
*
04
* <a href="http://my.oschina.net/arthor" class="referer" target="_blank">@author</a> duyf
05
*
06
*/
07
class City {
08
09
private String name;
10
// 经度
11
private double x;
12
13
// 纬度
14
private double y;
15
16
public double getX() {
17
return x;
18
}
19
20
public void setX(double x) {
21
this.x = x;
22
}
23
24
public double getY() {
25
return y;
26
}
27
28
public void setY(double y) {
29
this.y = y;
30
}
31
32
public String getName() {
33
return name;
34
}
35
36
public void setName(String name) {
37
this.name = name;
38
}<