博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Algs4-1.5.23在Erdos-Renyi模型下比较quick-find算法和quick-union算法
阅读量:6045 次
发布时间:2019-06-20

本文共 1825 字,大约阅读时间需要 6 分钟。

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",N,T,QuickFindTime,QuickUnionTime,QuickFindTime/QuickUnionTime);
        }
       
    }
}

转载于:https://www.cnblogs.com/longjin2018/p/9854859.html

你可能感兴趣的文章
[程序猿面试题精选100题]11.求二叉查找树的镜像
查看>>
hdu 5269 ZYB loves Xor I &amp;&amp; BestCoder Round #44
查看>>
最快的方式清除Chrome浏览器DNS缓存
查看>>
信号量Semaphore
查看>>
Libevent使用例子,从简单到复杂
查看>>
PixelUtils:像素转换工具
查看>>
品尝阿里云容器服务:5个2核4G节点使用情况记载
查看>>
一种基于共现的推荐算法
查看>>
Ios导航栏返回到指定的页面
查看>>
bytes,packet区别 字节数据包
查看>>
Android 中间人攻击
查看>>
HTTP服务端JSON服务端
查看>>
PhpSpreadsheet生成Excel时实现单元格自动换行
查看>>
前端编程tips
查看>>
SOLARIS 11G 安装 ORACLE 11G
查看>>
model ,orm,dao,service,持久层 ,mvc 这些名词在java中的概念?
查看>>
Python类和实例方法和属性的动态绑定
查看>>
双网卡配置
查看>>
CF 316div2 E.Pig and Palindromes
查看>>
Spring Remoting: Hessian
查看>>