アットウィキロゴ

p091401

package p2;
 
 
public class pro {
 
 int[] y=new int[11];
  double[] p=new double[11];
 
  int number_sample,number;
 int[] sample_y=new int[151];   
 double[] sample_p=new double[11];
 
    public static void main(String[] args) {
        pro te=new pro();
    }
 
    pro(){
 
    number=5;
    number_sample=100;  
 
        y[1]=10;
        y[2]=20;
        y[3]=50;
        y[4]=20;
        y[5]=10;
 
        fast();
 
        int s;
 
        for(s=1;s<number_sample+1;s++){
        sample_y[s]=randx();
        }
 
        f();
 
        int tr;
 
     for(tr=1;tr<101;tr++){   
 
         f();
 
         double sig=check();
 
         System.out.println(sig);
 
 
 
    int n1=randx();    
 
    int m1=op(n1);
 
 
  sample_y[m1]=n1;
   }
 
     for(s=1;s<number+1;s++){
     System.out.println(sample_p[s]+","+p[s]);
     }
 
    }
 
    int op(int n){
 
        int m,ms;
        double mins=99999;
        ms=1;
        for(m=1;m<number_sample+1;m++){
      double s1=shuffle(n,m);
       if(s1<mins)ms=m;
       if(s1<mins)mins=s1;
        }
 
 
        return ms;
    }
 
    double shuffle(int n,int m){
 
    int[] yy=new int[151];
    double[] pp=new double[11];
    int s;
 
    for(s=1;s<number_sample+1;s++){
    yy[s]=sample_y[s];
    }
 
 
 
    yy[m]=n;
 
 
      for(s=1;s<number+1;s++){
        pp[s]=0;    
        }
           int[] q=new int[50];
           int sx;
        for(sx=1;sx<number+1;sx++){
        q[sx]=0;    
         }
 
        for(s=1;s<number_sample+1;s++){
        for(sx=1;sx<number+1;sx++){
        if(yy[s]==sx)q[sx]=q[sx]+1;    
        }
        }
 
 
         for(sx=1;sx<number+1;sx++){
        pp[sx]=(double)q[sx]/number_sample;    
         }
 
 
    double sig=0;
        for(s=1;s<number+1;s++){
        sig=sig+(pp[s]-p[s])*(pp[s]-p[s]);    
        }
 
        return sig;
 
 
 
 
 
 
    }
 
 
 
 
    double check(){
 
        int s;
        double sig=0;
        for(s=1;s<number+1;s++){
        sig=sig+(p[s]-sample_p[s])*(p[s]-sample_p[s]);    
        }
 
        return sig;
    } 
 
    void f(){
 
        int s;
        for(s=1;s<number+1;s++){
        sample_p[s]=0;    
        }
           int[] q=new int[50];
           int sx;
        for(sx=1;sx<number+1;sx++){
        q[sx]=0;    
         }
 
        for(s=1;s<number_sample+1;s++){
        for(sx=1;sx<number;sx++){
        if(sample_y[s]==sx)q[sx]=q[sx]+1;    
         }
         }
 
 
         for(sx=1;sx<number+1;sx++){
        sample_p[sx]=(double)q[sx]/number_sample;    
         }
 
 
 
    }
 
    void fast(){
 
        int sx;
 
 
        int y1=0;
 
        for(sx=1;sx<number+1;sx++){
        y1=y1+y[sx];  
         }
 
 
 
         for(sx=1;sx<number+1;sx++){
        p[sx]=(double)y[sx]/y1;    
         }
 
 
 
    }
 
    int randx(){
 
        int s,y1;
        y1=0;
        for(s=1;s<number+1;s++){
        y1=y1+y[s];
        }
 
           int[] q=new int[50];
 
        q[0]=0;
        for(s=1;s<6;s++){
        q[s]=q[s-1]+y[s];
        }
 
        double m=y1*Math.random();
 
        int n=1;
        for(s=1;s<number+1;s++){
        if(m>q[s])n=s+1;
         }
 
 
return n;
}
    }
 
最終更新:2015年09月14日 10:22