📄 cft.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 + -