📄 cure.java
字号:
import java.util.Vector;
public class CURE implements ClusterAlgorithm{
private Cluster[] clusters;
private Vector mDataPoints;
private int mNoOfClusters;
public Heap heap;
public CURE(int k, Vector dataPoints) {
mNoOfClusters=k;
clusters = new Cluster[dataPoints.size()];
for (int i = 0; i < dataPoints.size(); i++)
clusters[i] = new Cluster("Cluster" + i);
mDataPoints = dataPoints;
heap=new Heap(clusters.length);
}
public int getNoOfClusters(){
return mNoOfClusters;
}
public Cluster[] getClusters(){
return clusters;
}
public void startAnalysis() {
// assign DataPoint to clusters
for (int l = 0; l <clusters.length; l++)
clusters[l].addDataPoint1((DataPoint)mDataPoints.elementAt(l));
// find the closest cluster to each cluster
for (int l = 0; l <clusters.length; l++)
clusters[l].mClosest=clusters[l].findClosest(clusters);
// form the min-heap with cluster distances
for( int i=0; i<clusters.length; i++ ){
boolean success=heap.insert(clusters[i].getDistance(), clusters[i].getName());
if( !success ){
System.out.println("Can't insert; heap full");
break;
}
}
// display the closest clusters
/* for(int i=0; i<clusters.length; i++ ){
System.out.println();
System.out.println("Cluster Name is"+clusters[i].getName());
clusters[i].show();
System.out.println("Closest Name is"+(clusters[i].getClosest()).getName());
(clusters[i].getClosest()).show();
}
//display the heap
System.out.println("The HEAP is:");
heap.displayHeap();
*/
while( mNoOfClusters < clusters.length ){
String name=heap.getRootElement();
int i;
for( i=0; i<clusters.length; i++ ){
if( clusters[i].getName() == name )
break;
}
System.out.println("closest is "+clusters[i].getClosest().getName()+"\n*******Before Removing element from heap*******\n");
// heap.displayHeap();
heap.remove(((clusters[i].getClosest()).getName()));
// heap.remove(((clusters[i].getClosest()).getName()),((clusters[i].getClosest()).getDistance()));
System.out.println("\n*******After Removing element from heap*******\n");
// heap.displayHeap();
merge(i);
}
} // end of start Analysis
public void merge(int i){
int m, j;
String cName=clusters[i].getName();
// obtain the closest cluster index into variable j
System.out.println(clusters[i].getClosest().getName()+" this is the closest cluster is to be merged with "+cName);
// heap.displayHeap();
for( j=0; j<clusters.length; j++ ) {
if( clusters[j].getName() == (clusters[i].getClosest().getName()) ){
// System.out.println("j position for sampat is:"+j+"close is "+((clusters[i].getClosest()).getName()));
break;
}
}
// add the datapoints of closest into the cluster
for(m=0; m<clusters[j].getClusterSize(); m++ ){
DataPoint dp=clusters[j].getDataPoint(m);
clusters[i].addDataPoint1(dp);
}
// shift the clusters by removing that closest cluster
Cluster[] temp=new Cluster[ clusters.length-1 ];
int m1;
for(m1=0,m=0; m<clusters.length; m++ )
if(m!=j) { temp[m1++]=clusters[m]; }
clusters=temp;
//display the closest clusters before re-constructing
/* System.out.println("Before: ********");
for(i=0; i<clusters.length; i++ ){
System.out.println();
System.out.println("Cluster Name is"+clusters[i].getName());
clusters[i].show();
System.out.println("Closest Name is"+(clusters[i].getClosest()).getName());
(clusters[i].getClosest()).show();
}
*/
// re-obtain the closest cluster for each cluster
for(m=0; m<clusters.length; m++ )
clusters[m].mClosest=clusters[m].findClosest(clusters);
//display the closest clusters before re-constructing
/* System.out.println("After: ********");
for(i=0; i<clusters.length; i++ ){
System.out.println();
System.out.println("Cluster Name is"+clusters[i].getName());
clusters[i].show();
System.out.println("Closest Name is"+(clusters[i].getClosest()).getName());
(clusters[i].getClosest()).show();
}
*/
System.out.println("New Cluster Size:findclosest@"+clusters.length);
for(j=0; j<clusters.length;j++)
if(clusters[j].getName()==cName)
break;
boolean b=heap.insert(clusters[j].getDistance(),clusters[j].getName());
if(b==false)
System.out.println("Value is Not Inserted");
System.out.println("New Cluster Size:heap-insert@"+clusters.length);
heap.displayHeap();
}// end of merge
public void getClusterOutput() {
int i;
for (i = 0; i < clusters.length; i++) {
System.out.println("-------------CLUSTER "+(i+1)+"----------------");
for( int j=0; j < clusters[i].getClusterSize(); j++){
DataPoint dp=clusters[i].getDataPoint(j);
System.out.println("("+dp.getX()+","+dp.getY()+")");
}
System.out.println("-------------CLUSTER "+(i+1)+" Mean is---("+clusters[i].getMean().getX()+","+clusters[i].getMean().getY()+")SIze is: "+clusters[i].getClusterSize());
}
}
public void getClusterRepOutput() {
int i;
for (i = 0; i < clusters.length; i++) {
System.out.println("-------------CLUSTER "+(i+1)+" Rep Points----------------");
clusters[i].showRepPoints();
System.out.println("-------------CLUSTER "+(i+1)+" Mean ----------------");
DataPoint d=clusters[i].getMean();
System.out.println("Mean of:"+i+" "+d.getX()+" "+d.getY());
}
}
public Cluster getCluster(int pos) {
return clusters[pos];
}
public void showGraph(){
Graph g=new Graph(clusters);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -