mergeCluster method

Level mergeCluster()

Merging two clusters.

This is a process done for every hierarchical clustering level.

Implementation

Level mergeCluster() {
  MinLinkage? min;
  for (int i = 0; i < _cluster.length; i++) {
    for (int j = 0; j < i; j++) {
      double linkage = getLinkage(_cluster[i], _cluster[j]);

      if (min == null || linkage < min.linkage) {
        min = MinLinkage(i: i, j: j, linkage: linkage);
      }
    }
  }

  //create new cluster from old cluster (deep copy)
  List<List<int>> cluster = _cluster
      .map((oneClus) => oneClus.map((index) => index).toList())
      .toList();
  //join cluster index j into i
  cluster[min!.i].addAll(cluster[min.j]);
  //and remove cluster index j
  cluster.removeAt(min.j);
  Level currentLevel = Level(
      linkage: min.linkage, cluster: cluster, joinFrom: min.j, joinTo: min.i);

  _level.add(currentLevel);
  _cluster = cluster;

  return currentLevel;
}