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

📄 bigtree_clustering.java~18~

📁 分别是模糊识别、模糊聚类、模糊控制的实例代码
💻 JAVA~18~
字号:
package fuzzy_project;

class Bigtree_Clustering
{
  private double Matrix[][];
  private int row;
  private int col;
  private int x;
  private int p;
  private Edges[] Value_Array;            //存储边
  private Edges[] Bigtree_Array;          //存放最大树边
  private int[][] Clustering_Matrix;      //存储所有可能的分类结果
  private int loop[];
  private int Clustering_result[][];
  private int length[];        //记录二维数组Clustering_result中每行非零元素的个数
  private byte visited[];      //标记节点是否被访问

  private String result;

  public Bigtree_Clustering(double array[][],int r,int c)
  {
    Matrix=array;
    row=r;
    col=c;
    x=0;
    p=0;
    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];
    Clustering_result=new int[r][c];
    length=new int[c];
    visited=new byte[r+1];
    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();
    for(int i=0;i<row;i++)
    {
      length[i]=1;
    }
    for(int i=0;i<row;i++)
    {
      Clustering_result[i][0]=i+1;
    }
  }

  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);

      }
    }

/////////////////////////////////////////////
    for(int i=0;i<row;i++)
    {
      for (int j = 0; j < col; j++) {
     System.out.print(Clustering_result[i][j]+",");
      }
      System.out.print("\n");
    }



//////////////////////////////////////////////

   return result;
  }

  private void Clustering(int x,int y)     //根据当前最大树边的起点与终点值,生成聚集结果
  {
    Clustering_result[x][length[x]]=y+1;
    length[x]++;
    Clustering_result[y][length[y]]=x+1;
    length[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 + -