アットウィキロゴ

uyoo

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