package ren;
import tool.*;
public class pro {
String[] data=new String[5000];
int s,datanumber,sx;
double[] point=new double[5000];
double[][] v=new double[500][200];
int[][] gotos=new int[500][200];
double minp,maxp;
double delta;
int[] route=new int[500];
public static void main(String[] args) {
pro test=new pro();
}
pro(){
readfile sub=new readfile();
sub.makedata("data.txt","UTF-8");
data=sub.data;
datanumber=sub.datanumber;
for(s=1;s<datanumber+1;s++){
point[s]=Double.parseDouble(data[s]);
}
minp=999;
maxp=0;
for(s=1;s<datanumber+1;s++){
if(point[s]>maxp)maxp=point[s];
if(point[s]<minp)minp=point[s];
}
System.out.println(maxp+","+minp);
delta=(maxp-minp)/100;
double x1,e1,v1;
int tx;
for(sx=0;sx<101;sx++){
x1=minp+sx*delta;
e1=(x1-point[s])*(x1-point[s]);
v[1][sx]=e1;
}
double minv;
int txs;
for(s=1;s<datanumber+1;s++){
for(sx=0;sx<101;sx++){
x1=minp+sx*delta;
e1=(x1-point[s])*(x1-point[s]);
minv=99999;
txs=0;
for(tx=0;tx<101;tx++){
v1=e1+v[s-1][tx];
if(v1<minv)txs=tx;
if(v1<minv)minv=v1;
}
v[s][sx]=minv;
gotos[s][sx]=txs;
}
}
int sxs;
minv=999;
s=datanumber;
sxs=0;
for(sx=0;sx<101;sx++){
if(v[s][sx]<minv)sxs=sx;
if(v[s][sx]<minv)minv=v[s][sx];
}
System.out.println(sxs+","+minv);
route[datanumber]=sxs;
for(s=1;s<datanumber;s++){
sx=route[datanumber+1-s];
route[datanumber-s]=gotos[datanumber+1-s][sx];
}
double p1;
for(s=1;s<datanumber+1;s++){
sx=route[s];
p1=minp+sx*delta;
System.out.println(point[s]+","+p1);
}
}
}
最終更新:2014年03月06日 07:35