首页 > 其他 > 详细

Algs4-1.1.37糟糕的打乱

时间:2018-10-25 11:45:02      阅读:196      评论:0      收藏:0      [点我收藏+]

1.1.37糟糕的打乱。假设在我们的乱序代码中你选择的是一个0到N-1而非i到N-1之间的随机整数。证明得到的结果并非均匀地分布在N!种可能性之间。用上一题中的测试检验这个版本。


public class ShuffleTest
{
    public static void main(String[] args)
    {
       int M=Integer.parseInt(args[0]);
       int N=Integer.parseInt(args[1]);
       int[] a=new int[M];
       int[][] Info=new int[M][M];
       //N次打乱
       for(int k=0;k<N;k++)
       {
            //每次打乱前数组重新初始化为a[i]=i
           for(int i=0;i<M;i++)
           a[i]=i;
            //打乱
           shuffle(a);
           //打乱后i行的值落到j列的次数增1
           for(int i=0;i<a.length;i++)
               Info[a[i]][i]++;
       }
       //打印M*M数组
       printArray(Info);
      
   }

    //打乱数组
    public static void shuffle(int[] a)
    {
        int N=a.length;
        for (int i=0;i<N;i++)
        {
          int r=i+StdRandom.uniform(N-i);
          int temp=a[i];
          a[i]=a[r];
          a[r]=temp;
        }
    }//结束打乱
   

    //打印数组
    private static void printArray(int[][] array)
    {
      int rowLen=array.length;
      int colLen=array[0].length;
      StdOut.printf(" ");
      for (int col=0;col<colLen;col++)
          StdOut.printf("%5d",col);
      StdOut.printf("\n");
      //
      for (int row=0;row<rowLen;row++)
      {
          StdOut.printf("%d",row);
          for (int col=0;col<colLen;col++)
                StdOut.printf("%5d",array[row][col]);
          StdOut.printf("\n");
      }
    }
}
技术分享图片

Algs4-1.1.37糟糕的打乱

原文:https://www.cnblogs.com/longjin2018/p/9848747.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!