zoukankan      html  css  js  c++  java
  • Algs4-1.5.23在Erdos-Renyi模型下比较quick-find算法和quick-union算法

    1.5.23在Erdos-Renyi模型下比较quick-find算法和quick-union算法。开发一个性能测试用例,从命令行接受一个int值T并进行T次以下实验:使用练习1.5.17的用例生成随机连接。保存这些连接并和我们的开发用例一样分别用quikc-find算法和quick-union算法检查触点的连通性,不断循环直到所有触点均相互连通。对于每个N,打印出N值和两种算法的运行时间的比值。
    答:
    图片
    public class E1d5d23
    {
         public static class Connection
        {
            int p;
            int q;
            public Connection(int p,int q)
            {this.p=p; this.q=q;}
           
            public int P()
            {return p;}
       
            public int Q()
            {return q;}
        }
            //
        public static int[][]  Generate(int N)
        {
            Queue<Connection> cnns=new Queue();
            WeightedQuickUnionUF uf=new WeightedQuickUnionUF(N);
             while (uf.count()>1)
               {
                   int p=StdRandom.uniform(N);
                   int q=StdRandom.uniform(N);
                   uf.union(p,q);
                   cnns.enqueue(new Connection(p,q));
                }//end while
           //
             int[][] cnnsOfArray=new int[cnns.size()][2];
             int i=0;
             while(!cnns.isEmpty())
             {
                 Connection item=cnns.dequeue();
                 cnnsOfArray[i][0]=item.P();
                 cnnsOfArray[i][1]=item.Q();
                 i++;
             }
             return cnnsOfArray;
        }
       

       public static double QuickFindElapsedTime(int[][] cnns,int T,int N)
       {
            Stopwatch timer=new Stopwatch();
            for (int t=1;t<=T;t++)
            {
                 QuickFindUF uf=new QuickFindUF(N);
                 int i=0;
                 while(uf.count()>1)
                 {
                     uf.union(cnns[i][0],cnns[i][1]);
                     i++;
                 }
            }
             return timer.elapsedTime();
       }
         
         
      public static double QuickUnionElapsedTime(int[][] cnns,int T,int N)
       {
            Stopwatch timer=new Stopwatch();
            for (int t=1;t<=T;t++)
            {
                 QuickUnionUF uf=new QuickUnionUF(N);
                 int i=0;
                 while(uf.count()>1)
                 {
                     uf.union(cnns[i][0],cnns[i][1]);
                     i++;
                 }
            }
             return timer.elapsedTime();
       }
       

          
        public static void main(String[] args)
        {
            int T=Integer.parseInt(args[0]);
            for (int N=2;N<=Math.pow(2,32);N=N+N)
            {
                int[][] cnns=Generate(N);
                double QuickFindTime=QuickFindElapsedTime(cnns,T,N);
                double QuickUnionTime= QuickUnionElapsedTime(cnns,T,N);
               
                StdOut.printf("N=%6d T=%3d  QF=%7.2f QU=%7.2f   QF/QU=%5.2f ",N,T,QuickFindTime,QuickUnionTime,QuickFindTime/QuickUnionTime);
            }
           
        }
    }

  • 相关阅读:
    在windows下安装环回适配器(Microsoft Loopback Adapter)
    c#中的 ? 与 ??
    MVC中提交包含HTML代码的页面处理方法
    Linux(CentOS)日常操作命令
    MySql命令行下导出、导入数据
    NHibernate中text类型字段太长时被截断解决办法
    windows7下修改hosts文件无效解决办法
    IIS与Apache同时使用80端口
    因为数据库正在使用,所以无法获得对数据库的独占访问权 SQL 2005 / SQL 2008
    在windows64位服务器上运行windows32位机器上开发的asp.net应用程序
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854859.html
Copyright © 2011-2022 走看看