⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cure.java

📁 Clustering demo.very good
💻 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 + -