• Algs4-1.5.22Erods-renyi模型的倍率实验


    1.5.22Erods-renyi模型的倍率实验。开发一个性能测试用例 ,从命令行接受一个int值T并进行T次以下实验:使用练习1.5.17的用例生成随机连接,和我们的开发用例一样使用UnionFind来检查触点的连通性,不断循环直到所有触点均相互连通。对于每个N,0打印出N值和平均所需的连接数以及前后两次运行时间的比值。使用你的程序验证正文中的猜想:quick-find算法和quick-union算法的运行时间是平方级别的,加权quick-union算法则接近线性级别。
    答:
    图片
    public class E1d5d22
    {
        public static int countOfQuickFind(int N)
        {
            int Times=0;
            QuickFindUF uf=new QuickFindUF(N);
             while (uf.count()>1)
               {
                   int p=StdRandom.uniform(N);
                   int q=StdRandom.uniform(N);
                   Times++;
                   uf.union(p,q);
                }//end while
            return Times;
        }
       
         public static int countOfQuickUnion(int N)
        {
            int Times=0;
            QuickUnionUF uf=new QuickUnionUF(N);
            while (uf.count()>1)
               {
                   int p=StdRandom.uniform(N);
                   int q=StdRandom.uniform(N);
                   Times++;
                   uf.union(p,q);
                }//end while
            return Times;
        }
        
       public static int countOfWeightedQuickUnion(int N)
        {
            int Times=0;
            WeightedQuickUnionUF uf=new WeightedQuickUnionUF(N);
            while (uf.count()>1)
               {
                   int p=StdRandom.uniform(N);
                   int q=StdRandom.uniform(N);
                   Times++;
                   uf.union(p,q);
                }//end while
            return Times;
        }
             

       public static void DoubleTestQuickFind(int T)
       {
            int totalConnections=0;
            double lastElapsedTime=0;
            double currentElapsedTime=0;
            StdOut.println("---QuickFind---");
            for(int N=2;N<=Math.pow(2,15);N=N+N)
                {
                   Stopwatch timer=new Stopwatch();
                   totalConnections=0;
                   for (int t=1;t<=T;t++)
                     {
                       totalConnections=totalConnections+countOfQuickFind(N);
                     }
                  currentElapsedTime=timer.elapsedTime();
                  StdOut.printf("N=%6d  avg Connection=%8d  time=%8.2f   Rate=%5.2f ",N,totalConnections/T,currentElapsedTime,currentElapsedTime/lastElapsedTime);
                  lastElapsedTime=currentElapsedTime;
                }
       }
      
      
       public static void DoubleTestQuickUnion(int T)
       {
            int totalConnections=0;
            double lastElapsedTime=0;
            double currentElapsedTime=0;
            StdOut.println("---QuickUnion---");
            for(int N=2;N<=Math.pow(2,15);N=N+N)
                {
                   Stopwatch timer=new Stopwatch();
                   totalConnections=0;
                   for (int t=1;t<=T;t++)
                     {
                       totalConnections=totalConnections+countOfQuickUnion(N);
                     }
                  currentElapsedTime=timer.elapsedTime();
                  StdOut.printf("N=%6d  avg Connection=%8d  time=%8.2f   Rate=%5.2f ",N,totalConnections/T,currentElapsedTime,currentElapsedTime/lastElapsedTime);
                  lastElapsedTime=currentElapsedTime;
                }
       }
      
       public static void DoubleTestWeightedQuickUnion(int T)
       {
            int totalConnections=0;
            double lastElapsedTime=0;
            double currentElapsedTime=0;
            StdOut.println("---WeightedQuickUnion---");
            for(int N=2;N<=Math.pow(2,15);N=N+N)
                {
                   Stopwatch timer=new Stopwatch();
                   totalConnections=0;
                   for (int t=1;t<=T;t++)
                     {
                       totalConnections=totalConnections+countOfWeightedQuickUnion(N);
                     }
                  currentElapsedTime=timer.elapsedTime();
                  StdOut.printf("N=%6d  avg Connection=%8d  time=%8.2f   Rate=%5.2f ",N,totalConnections/T,currentElapsedTime,currentElapsedTime/lastElapsedTime);
                  lastElapsedTime=currentElapsedTime;
                }
       }
      
        public static void main(String[] args)
        {
            int T=Integer.parseInt(args[0]);
           DoubleTestQuickFind(T);
           DoubleTestQuickUnion(T);
           DoubleTestWeightedQuickUnion(T);
        }
    }

  • 相关阅读:
    《Dotnet9》系列-开源C# WPF控件库强力推荐
    《Dotnet9》系列-开源C# WPF控件库3《HandyControl》强力推荐
    《Dotnet9》系列-开源C# WPF控件库2《Panuon.UI.Silver》强力推荐
    《Dotnet9》系列-开源C# WPF控件库1《MaterialDesignInXAML》强力推荐
    《Dotnet9》系列-FluentValidation在C# WPF中的应用
    《Dotnet9》建站-本站使用的什么主题?
    结对作业——第二次作业
    团队第一次作业——团队展示
    结队项目——第一次作业
    软件工程实践2017第二次作业
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854853.html
Copyright © 2020-2023  润新知