package k3;
import tool.*;
public class pro {
String[] data=new String[6000];
int s,datanumber;
String file;
double[] point=new double[600];
double[] px=new double[600];
double[] m=new double[700];
double[] v=new double[700];
int k;
double v1,minv;
int[] gotom=new int[700];
int[] gotov=new int[700];
int ks;
int[] m2=new int[700];
int[] v2=new int[700];
int number;
int peak[]=new int[100];
int pk2[]=new int[100];
int sx;
int mou[]=new int[100];
int mou2[]=new int[100];
int ups[]=new int[600];
public static void main(String[] args) {
pro test=new pro();
}
pro(){
file="data4.txt";
readfile sub=new readfile();
sub.makedata(file,"UTF-8");
data=sub.data;
datanumber=sub.datanumber;
for(s=1;s<datanumber+1;s++){
point[s]=Double.parseDouble(data[s]);
}
for(s=2;s<10;s++){
m[s]=mfast(s);
v[s]=vfast(s);
}
for(s=10;s<datanumber+1;s++){
minv=mfast(s);
ks=0;
for(k=2;k<s-10;k++){
v1=seekm(s,k);
if(v1<minv)ks=k;
if(v1<minv)minv=v1;
}
m[s]=minv;
gotom[s]=ks;
minv=vfast(s);
ks=0;
for(k=2;k<s-10;k++){
v1=seekv(s,k);
if(v1<minv)ks=k;
if(v1<minv)minv=v1;
}
v[s]=minv;
gotov[s]=ks;
}
int sxs;
s=1;
sx=datanumber;
peak[s]=sx;
pk2[s]=1;
if(m[sx]>v[sx])pk2[s]=2;
sxs=0;
if(pk2[s]==1)sxs=gotom[sx];
if(pk2[s]==2)sxs=gotov[sx];
int mode=0;
mode=0;
while(mode<50){
s=s+1;
peak[s]=sxs;
if(pk2[s-1]==1)pk2[s]=2;
if(pk2[s-1]==2)pk2[s]=1;
sx=sxs;
sxs=0;
if(pk2[s]==1)sxs=gotom[sx];
if(pk2[s]==2)sxs=gotov[sx];
if(sxs<10)mode=100;
}
number=s;
for(s=1;s<number+1;s++){
mou[s]=peak[number+1-s];
mou2[s]=pk2[number+1-s];
}
for(sx=1;sx<mou[1]+1;sx++){
ups[sx]=1;
if(mou2[1]==1)ups[sx]=2;
if(mou2[1]==2)ups[sx]=1;
}
for(s=1;s<number;s++){
for(sx=mou[s]+1;sx<mou[s+1]+1;sx++){
ups[sx]=1;
if(mou2[s]==1)ups[sx]=2;
if(mou2[s]==2)ups[sx]=1;
}
}
s=number;
for(sx=mou[s]+1;sx<datanumber+1;sx++){
ups[sx]=1;
if(mou2[s]==1)ups[sx]=2;
if(mou2[s]==2)ups[sx]=1;
}
int h;
System.out.println(point[1]+","+point[1]);
px[1]=point[1];
for(s=2;s<datanumber;s++){
px[s]=point[s];
h=0;
if(point[s]>px[s-1])h=h+1;
if(ups[s]==2)h=h+1;
if(h==2)px[s]=px[s-1];
h=0;
if(point[s]<px[s-1])h=h+1;
if(ups[s]==1)h=h+1;
if(h==2)px[s]=px[s-1];
System.out.println(point[s]+","+px[s]);
}
}
double seekm(int s,int k){
int sx;
double e1;
double[] p=new double[600];
p[k]=point[k];
for(sx=k+1;sx<s+1;sx++){
p[sx]=point[sx];
if(p[sx-1]>point[sx])p[sx]=p[sx-1];
}
e1=0;
for(sx=k+1;sx<s+1;sx++){
e1=e1+(point[sx]-p[sx])*(point[sx]-p[sx]);
}
e1=e1+v[k];
return e1;
}
double seekv(int s,int k){
int sx;
double e1;
double[] p=new double[600];
p[k]=point[k];
for(sx=k+1;sx<s+1;sx++){
p[sx]=point[sx];
if(p[sx-1]<point[sx])p[sx]=p[sx-1];
}
e1=0;
for(sx=k+1;sx<s+1;sx++){
e1=e1+(point[sx]-p[sx])*(point[sx]-p[sx]);
}
e1=e1+m[k];
return e1;
}
double mfast(int s){
int sx;
double e1;
double[] p=new double[600];
p[1]=point[1];
for(sx=2;sx<s+1;sx++){
p[sx]=point[sx];
if(p[sx-1]>point[sx])p[sx]=p[sx-1];
}
e1=0;
for(sx=1;sx<s+1;sx++){
e1=e1+(point[sx]-p[sx])*(point[sx]-p[sx]);
}
return e1;
}
double vfast(int s){
int sx;
double e1;
double[] p=new double[600];
p[1]=point[1];
for(sx=2;sx<s+1;sx++){
p[sx]=point[sx];
if(p[sx-1]<point[sx])p[sx]=p[sx-1];
}
e1=0;
for(sx=1;sx<s+1;sx++){
e1=e1+(point[sx]-p[sx])*(point[sx]-p[sx]);
}
return e1;
}
}
最終更新:2014年03月01日 05:29