package neko;
import java.io.*;
public class pro {
double[] y=new double[101];
double[] ys=new double[101];
double[][] v=new double[101][101];
double[] pol=new double[101];
int[][] gotox=new int[101][101];
int number;
String[] data=new String[6000];
int s,datanumber;
double[] yy=new double[500];
public static void main(String[] args) {
pro te=new pro();
}
pro(){
readx("a.csv");
for(s=2;s<datanumber+1;s++){
data[s]=rev_csv(data[s]);
String[] x=data[s].split(",");
y[s-1]=num(x[1]);
}
number=datanumber-1;
double miny=999999999;
double maxy=0;
for(s=1;s<number+1;s++){
if(y[s]>maxy)maxy=y[s];
if(y[s]<miny)miny=y[s];
}
double delta=(maxy-miny)/100;
for(s=1;s<number+1;s++){
int n1=(int)((y[s]-miny)/delta);
yy[s]=n1;
ys[s]=n1;
}
int tr;
for(tr=1;tr<11;tr++){
optimal sub=new optimal();
sub.y=yy;
sub.ys=ys;
sub.number=number;
sub.makedata();
ys=sub.ys;
}
for(s=1;s<number+1;s++){
System.out.println((y[s]));
}
}
void readx(String file){
String str;
BufferedReader br;
int s;
s=0;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
while((str = br.readLine()) != null) {
s=s+1;
data[s]=str;
}
br.close();
} catch (IOException e) {System.out.println(e);}
datanumber=s;
}
String rev_csv(String str){
String str5=str;
int px=str5.indexOf("\"");
while(px>-1){
str5=rev(str5);
px=str5.indexOf("\"");
}
return str5;
}
String rev(String str){
int p1=str.indexOf("\"");
int p2=str.indexOf("\"",p1+1);
String str1=str.substring(0,p1);
String str2=str.substring(p1+1,p2);
String str3=str.substring(p2+1,str.length());
str2=str2.replace(",","");
return str1+str2+str3;
}
double num(String str){
double nx;
nx=0;
try{
nx=Double.parseDouble(str);
}catch (Exception e) {}
return nx;
}
}
package neko;
public class optimal {
double[] y=new double[501];
double[] ys=new double[501];
double[][] v=new double[501][101];
double[] pol=new double[101];
int[][] gotox=new int[501][101];
int number;
int[] op=new int[501];
void makedata(){
int s,sx;
for(sx=1;sx<101;sx++){
pol[sx]=sx;
}
s=1;
for(sx=1;sx<101;sx++){
v[s][sx]=(y[s]-pol[sx])*(y[s]-pol[sx]);
}
double lam=1600;
int tx;
for(s=2;s<number;s++){
for(sx=1;sx<101;sx++){
double u1=(y[s]-pol[sx])*(y[s]-pol[sx]);
double minv=9999988;
int txs=0;
for(tx=1;tx<101;tx++){
double e1=(ys[s+1]-pol[sx])-(pol[sx]-pol[tx]);
double v1=u1+lam*e1*e1+v[s-1][tx];
if(v1<minv)txs=tx;
if(v1<minv)minv=v1;
}
gotox[s][sx]=txs;
v[s][sx]=minv;
}
}
s=number;
for(sx=1;sx<101;sx++){
double u1=(y[s]-pol[sx])*(y[s]-pol[sx]);
double minv=9999999;
int txs=0;
for(tx=1;tx<101;tx++){
double v1=u1+v[s-1][tx];
if(v1<minv)txs=tx;
if(v1<minv)minv=v1;
}
gotox[s][sx]=txs;
v[s][sx]=minv;
}
double minv=900000000;
int sxs=0;
for(sx=1;sx<101;sx++){
if(v[number][sx]<minv)sxs=sx;
if(v[number][sx]<minv)minv= v[number][sx];
}
op[number]=sxs;
for(s=1;s<number;s++){
sx=number+1-s;
int s1=op[sx];
op[sx-1]=gotox[sx][s1];
}
for(s=1;s<number+1;s++){
sx=op[s];
ys[s]=pol[sx];
}
}
}
最終更新:2016年10月24日 17:27