• Algs4-2.1.36不均匀的数据


    2.1.36不均匀的数据。编写一个测试用例,生成不均匀的测试数据,包括:
    1)一半数据是0,一半是1;
    2)一半数据是0,1/4是1,1/4是2,以此类推;
    3)一半数据是0,一半是随机int值。
    评估并验证这些输入数据对本节讨论的算法的性能的影响。
    1)打乱次序后的结果:
    一百万个数10次运行的平均时间。选择排序性能最差。希尔排序性能最好。
    图片

    2)未打乱次序后的结果:
    一百万个数10次运行的平均时间。选择排序性能最差。希尔排序整体性能最好,对于数据情况1,2
    时希尔排序的性能比插入排序优势不明显。
    图片
    以下是未打乱的代码,打乱的代码只需去掉打代码的注释即可。
    public class E2d1d36
    {
        public static double time (String alg,Integer[] a)
        {
            Stopwatch timer =new Stopwatch();
            if(alg.equals("Insertion")) Insertion.sort(a);
            if(alg.equals("Selection")) Selection.sort(a);
            if(alg.equals("Shell")) Shell.sort(a);
          // if(alg.equals("Merge")) Merge.sort(a);
          //  if(alg.equals("Quick")) Quick.sort(a);
          //  if(alg.equals("Heap")) Heap.sort(a);
            return timer.elapsedTime();
        }
       
        public static double timeRandomInput(String alg,int N,int T,int probabilityTYPE)
        {
            double total =0.0;
            Integer[] a=new Integer[N];

            if (probabilityTYPE==0)
            {
                for (int t=0;t<T;t++)
                {
                    generateHalf0Half1(a);
                    total+=time(alg,a);
                }
            }
            //probabilityTYPE=1 Poisson distribution
            if (probabilityTYPE==1)
            {
                for (int t=0;t<T;t++)
                {
                    generateHalf012(a);
                    total+=time(alg,a);
                }
            }
            //probabilityTYPE=2 Geometric distribution
            if (probabilityTYPE==2)
            {
                for (int t=0;t<T;t++)
                {
                    generateHalf0HalfRandom(a);
                    total+=time(alg,a);
                }
            }
           return total;
        }//end timeRandomInput

        public static void generateHalf0Half1(Integer[] a)
        {
            int half=a.length/2;
            for (int i=0;i<half;i++)
                        a[i]=0;
            for (int i=half;i<a.length;i++)
                        a[i]=1;
            //StdRandom.shuffle(a);
        }
       
         public static void generateHalf012(Integer[] a)
        {
             int half=a.length/2;
             int over14=a.length/4;
            for (int i=0;i<half;i++)
                        a[i]=0;
            for (int i=half;i<half+over14;i++)
                        a[i]=1;
            for (int i=half+over14;i<a.length;i++)
                        a[i]=2;
            //StdRandom.shuffle(a);
        }
        
         public static void generateHalf0HalfRandom(Integer[] a)
        {
            int half=a.length/2;
            for (int i=0;i<half;i++)
                        a[i]=0;
            for (int i=half;i<a.length;i++)
                        a[i]=StdRandom.uniform(10*a.length);
            //StdRandom.shuffle(a);
        }
       
        public static void main(String[] args)
        {
         
            Integer N=Integer.parseInt(args[0]);
            Integer T=Integer.parseInt(args[1]);
                   
            String[] CASEmem=new String[4];
            CASEmem[0]="1/2 0,1/2 1";
            CASEmem[1]="1/2 0,1/4 1,1/4 2";
            CASEmem[2]="1/2 0,1/2 random";


             Double time;
             StdOut.printf("---Insertion--- ");
              time=timeRandomInput("Insertion",N,T,0);
             StdOut.printf("For %d  int with case %s,spend time=%.2f ",N,CASEmem[0],time);
             time =timeRandomInput("Insertion",N,T,1);
             StdOut.printf("For %d  int with case %s,spend time=%.2f ",N,CASEmem[1],time);
             time =timeRandomInput("Insertion",N,T,2);
             StdOut.printf("For %d  int with case %s,spend time=%.2f ",N,CASEmem[2],time);


             StdOut.printf("---Selection--- ");
             time =timeRandomInput("Selection",N,T,0);
             StdOut.printf("For %d  int with case %s,spend time=%.2f ",N,CASEmem[0],time);
             time =timeRandomInput("Selection",N,T,1);
             StdOut.printf("For %d  int with case %s,spend time=%.2f ",N,CASEmem[1],time);
             time =timeRandomInput("Selection",N,T,2);
             StdOut.printf("For %d  int with case %s,spend time=%.2f ",N,CASEmem[2],time);

            
             StdOut.printf("---Shell--- ");
             time =timeRandomInput("Shell",N,T,0);
             StdOut.printf("For %d  intuble with case %s,spend time=%.2f ",N,CASEmem[0],time);
             time =timeRandomInput("Shell",N,T,1);
             StdOut.printf("For %d  int with case %s,spend time=%.2f ",N,CASEmem[1],time);
             time =timeRandomInput("Shell",N,T,2);
             StdOut.printf("For %d  int with case %s,spend time=%.2f ",N,CASEmem[2],time);

        }
    }
  • 相关阅读:
    C语言学生管理系统(原版本)(自编)
    【JavaScript】解构赋值
    【JavaScript】箭头函数
    【JavaScript】typeof 和 instanceof
    【JavaScript】Proxy 实例方法(二)
    【JavaScript】Proxy 实例方法(一)
    【JavaScript】Reflect 静态方法(二)
    【JavaScript】Reflect 静态方法(一)
    【JavaScript】async function
    开发系统关键字(例子)
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9860068.html
Copyright © 2020-2023  润新知