public Dendrogram cluster() { Dendrogram dnd = new Dendrogram("Distance"); double d = 0.0; // initially load all elements as individual clusters for (DataPoint e : elements) { Cluster c = new Cluster(e); allClusters.add(c); } dnd.addLevel(String.valueOf(d), allClusters.getAllClusters()); d = 1.0; while (allClusters.size() > 1) { int K = allClusters.size(); mergeClusters(d); // it is possible that there were no clusters to merge for current // d. if (K > allClusters.size()) { dnd.addLevel(String.valueOf(d), allClusters.getAllClusters()); K = allClusters.size(); } d = d + 0.5; } return dnd; }