📄 bigtree_clustering.java~17~
字号:
package fuzzy_project;class Bigtree_Clustering{ private double Matrix[][]; private int row; private int col; private int x; private int length; private Edges[] Value_Array; //存储边 private Edges[] Bigtree_Array; //存放最大树边 private int[][] Clustering_Matrix; //存储所有可能的分类结果 private int loop[]; private String result; public Bigtree_Clustering(double array[][],int r,int c) { Matrix=array; row=r; col=c; x=0; length=1; Value_Array=new Edges[row*(row-1)/2]; //一个完全无向图的边数有row*(row-1)/2条 Bigtree_Array=new Edges[row-1]; //生成树的边数有row-1条 Clustering_Matrix=new int[row][col]; loop=new int[row*(row-1)/2]; result="#"; for(int i=0;i<row;i++) for(int j=i+1;j<col;j++) { Value_Array[x]=new Edges(i,j,Matrix[i][j]); //把相似矩阵的每条边存储在Edges类型的数组Value_Array中 x++; } for(int x=0;x<row;x++) { Clustering_Matrix[x][0]=x; //给矩阵赋初始值 } quickSort(Value_Array,0,row*(row-1)/2-1); //对数组sort_array中的权值进行排序 Bigtree_exe(); } public void quickSort(Edges array[],int low,int high) //快速排序算法 { int i,j; Edges temp; i=low; j=high; temp=array[low]; while(i<j) { while(array[j].weight>=temp.weight&&i<j) {j--;} array[i]=array[j]; while(array[i].weight<=temp.weight&&i<j) {i++;} array[j]=array[i]; } array[i]=temp; if(i-1>low) {quickSort(array,low,i-1);} if(high>i+1) {quickSort(array,i+1,high);} } public void Bigtree_exe() //生成最大树 { int x=0; int v1,v2; for(int i=row*(row-1)/2-1;i>=0;i--) //判断是否构成回路 { v1=seek(loop,Value_Array[i].start); v2=seek(loop,Value_Array[i].end); if(v1!=v2) { Bigtree_Array[x] = Value_Array[i]; loop[v1]=v2; x++; } if(x==row-1) break; } } public String Clustering_exe(double param) //在最大树基础上进行聚类 { for(int i=0;i<row-1;i++) { if(Bigtree_Array[i].weight>=param) //选取权值大于等于聚类参数的边 { Clustering(Bigtree_Array[i].start,Bigtree_Array[i].end); System.out.println(Bigtree_Array[i].start+","+Bigtree_Array[i].end); } }/////////////////////////////////////////////////////////////////////////////////////////// return result; } private void Clustering(int x,int y) //根据当前最大树边的起点与终点值,合并具有相同元素的分类集合 { } private int seek(int loop[],int v) { int i=v; while(loop[i]>0) {i=loop[i];} return i; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -