zoukankan      html  css  js  c++  java
  • Algs4-1.5.11实现加权quick-find算法

    1.5.11实现加权quick-find算法,其中我们总是将较小的分量重命名为较大的分量的标识符。这种改变会对性能产生怎样的影响?
    答:每次union需要多访问N次id数组进行判断,同时还需要对两个分量的触点个数的sz赋新值,也会增加数组的访问,性能将会降低。
    public class E1d5d11
    {
        private int[] id;
        private int[] sz;
        private int count;
        public E1d5d11(int N)
        {
            count=N;
            id=new int[N];
            for (int i=0;i<N;i++)
                 id[i]=i;
            //
            sz=new int[N];
            for (int i=0;i<N;i++)
                sz[i]=1;
        }
       
        public int count()
        {return count;}
        
         boolean connected(int p,int q)
         {return find(p)==find(q);}

         public int find(int p)
         {return id[p];}
          
          public  void union(int p,int q)
           {
              int pID=find(p);
              int qID=find(q);
              if (pID==qID) return;
              int totalSize=sz[p]+sz[q];
              int oldID;
              int newID;
              if(sz[p]<sz[q])
                {
                  oldID=pID;
                  newID=qID;
               }
              else
               {
                  oldID=qID;
                  newID=pID;
              }
             for (int i=0;i<id.length;i++)
                 {
                     if(id[i]==oldID) id[i]=newID;
                     if(id[i]==newID) sz[i]=totalSize;
                  }
               count--;
          }
             //

           public static void main(String[] qrgs)
           {
               int N=StdIn.readInt();
               E1d5d11 uf=new E1d5d11(N);
               while (!StdIn.isEmpty())
               {
                   int p=StdIn.readInt();
                   int q=StdIn.readInt();
                   if(uf.connected(p,q)) continue;
                   StdOut.println(p+ " " +q);
                   uf.union(p,q);
                }//end while
            }//end main
    }//end class

  • 相关阅读:
    MySQL 替换和截取指定位置字符串
    notepad++安装XML格式化插件
    个人信用报告,长啥样?怎么查?
    MySQL 查询decimal字段去除自动补零
    mapstruct使用详解
    电商物流行业中的RDC、FDC和TDC分别表示什么意思?发网详解
    借助Proxifier实现内网访问
    C++源码流程图分析!
    FFmpeg中AVPacket处理函数av_free_packet()和av_packet_free()的区别以及用法
    fopen 和它的读写标识 r、r+、rb+、rt+、w+.....
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854761.html
Copyright © 2011-2022 走看看