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

📄 cft.java~33~

📁 Birch
💻 JAVA~33~
字号:
/**
 * <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 insert_nonfull(node x,double[] point){
        if(x.leaf){
            for(int i=0;i<x.n;i++){

            }
        }
    }

    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;
        int B_T;
        if(z.leaf){
            B_T=B;
        }
        else{
            B_T=T;
        }
        for(int i= 0;i<B_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];
                this.LS_xTOy(z.LS[y.n],temp.LS[i]);
                y.child[y.n] = temp.child[i];
                y.num[y.n] = temp.num[i];
                renovateLS(x.LS[p],x.num[p], y.LS[y.n],y.num[y.n]);
                renovateSS(x.SS[p],x.num[p], y.SS[y.n],y.num[y.n]);
                x.num[p] += y.num[y.n];
                y.n++;
            } else {
                z.SS[z.n] = temp.SS[i];
                this.LS_xTOy(z.LS[z.n],temp.LS[i]);
                z.child[z.n] = temp.child[i];
                z.num[z.n] = temp.num[i];
                renovateLS(x.LS[x.n-1], x.num[x.n-1],z.LS[z.n],z.num[z.n]);
                renovateSS(x.SS[x.n-1], x.num[x.n-1],z.SS[z.n],z.num[z.n]);
                x.num[x.n-1] += 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 picknearest(double[] point,double[][] LS){
        int pos;
        double distance=999999999;
        double temp;
        for(int i=0;i<LS.length;i++){
                if((temp=MathsExtend.calDistance(point,LS[i]))<distance){
                    distance=temp;
                    pos=i;
                }
        }
        return pos;
    }
    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 + -