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

📄 cft.java~28~

📁 Birch
💻 JAVA~28~
字号:
/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class CFT {
    private int B;
    private int T;
    private int r;//半径
    private int vector;
    public void split(node x,int p,node y){ //p是从0开始计的
        int[] pos=new int[2];
        node z=new node();
        z.leaf=y.leaf;
        z.n=0;

        x.n++;
        this.ls_0(x.LS[p]);
        x.SS[p]=0;
        x.num[p]=0;
        this.ls_0(x.LS[x.n]);
        x.SS[x.n]=0;
        x.num[x.n]=0;

        pos=pickfarthest(y);
        y.n=0;
        if(!z.leaf){
            z. value_B_or_T_and_vector(vector, B);
        }
        else{
            z.value_B_or_T_and_vector(vector, T);
            z.child_(B);
        }
        node temp=(node)y.clone();

        y.SS[0]=temp.SS[pos[0]];
        this.LS_xTOy(y.LS[0],temp.LS[pos[0]]);
        y.child[0]=temp.child[pos[0]];
        y.n++;
        y.num[0]=temp.num[pos[0]];

        renovateLS(x.LS[p],0,y.LS[0],y.num[0]);
        renovateSS(x.SS[p],0,y.SS[0],y.num[0]);
        x.num[p]+= y.num[0];

        z.SS[0]=temp.SS[pos[1]];
        this.LS_xTOy(z.LS[0],temp.LS[pos[1]]);
        z.child[0]=temp.child[pos[1]];
        z.n++;
        z.num[0]=temp.num[pos[1]];

        renovateLS(x.LS[x.n-1],0,z.LS[0],z.num[0]);
        renovateSS(x.SS[x.n-1], 0,z.SS[0],z.num[0]);
        x.num[x.n]+= z.num[0];

        int indicator;
        if(z.leaf){
                for(int i= 0;i<T;i++) //except //pos[0] et pos[1]{
                        {
                        if(i==pos[0]||i==pos[1]){
                            continue;
                        }
                        indicator = MathsExtend.compareDistance(temp.LS[i],temp.LS[pos[0]],temp.LS[pos[1]]);
                        if (indicator==0) {
                            y.SS[y.n] = temp.SS[i];
                            y.LS[y.n] = temp.LS[pos[i]];
                            y.child[y.n] = temp.child[[pos[i]];
                            y.num[y.n] = temp.num[[pos[i]];
                            renovateLS(x.ls[p][vector], y.ls[vector][y.n]);
                            renovateSS(x.ss[p], y.ss[y.n]);
                            x.num[p] += y.num[y.n];
                            y.n++;
                        } else {
                            z.ss[z.n] = temp.ss[pos[i]];
                            z.ls[vector][z.n] = temp.ls[vector][pos[i]];
                            z.child[z.n] = temp.child[[pos[i]];
                            z.num[z.n] = temp.num[[pos[i]];
                            renovateLS(x.ls[vector][n], z.ls[vector][z.n]);
                            renovateSS(x.ss[n], z.ss[z.n]);
                            x.num[n] += z.num[z.n];
                            z.n++;
                        }
                        }
                    }
      }
    private void renovateLS(double[] LSx,int numx,double[] LSy,int numy){//修改x中的LS
        for(int i=0;i<LSx.length;i++){
            LSx[i]=((double)numx/(numx+numy))*LSx[i]+((double)numy/(numx+numy))*LSy[i];
        }
    }

    private void renovateSS(double SSx,int numx,double SSy,int numy){
        SSx=((double)numx/(numx+numy))*SSx+((double)numy/(numx+numy))*SSy;
    }

    private void LS_xTOy(double[] LSx,double[] LSy){
        for(int i=0;i<LSx.length;i++){
            LSy[i]=LSx[i];
        }
    }
    private int[] pickfarthest(node y){
        int[] pos=new int[2];
        double distance=999999999;
        double temp;
        pos[0]=0;
        pos[1]=1;
        for(int i=0;i<y.n-1;i++){
            for(int j=i+1;j<y.n;j++){
                if((temp=MathsExtend.calDistance(y.LS[i],y.LS[j]))<distance){
                    distance=temp;
                    pos[0]=i;
                    pos[1]=j;
                }
            }
        }
        return pos;
    }
    public CFT(int B,int T,int r,int vector) {
        this.B=B;
        this.T=T;
        this.r=r;
        this.vector=vector;
    }
    private void ls_0(double[] ls){
        for(int i=0;i<ls.length;i++){
            ls[i]=0;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -