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

  • 相关阅读:
    How do I change a .txt file to a .c file?
    [CQOI2007]余数求和
    CSP-J总结&题解
    【CSP游记S】
    [LuoguP1462]通往奥格瑞玛的道路
    归并排序——逆序对
    [NOIP 2011]选择客栈
    [二分图初步]【模板】二分图匹配,匈牙利算法
    [NOIP 2018]旅行
    黑魔法师之门 (magician)-并查集
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854761.html
Copyright © 2011-2022 走看看