• 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

  • 相关阅读:
    内网邮件服务器搭建
    solr的命令
    solr的post.jar
    Java IO(四--字符流基本使用
    Java IO(三)--字节流基本使用
    Java IO(二)--RandomAccessFile基本使用
    Java集合(三)--Collection、Collections和Arrays
    Java集合(二)--Iterator和Iterable
    Java IO(一)--File类
    Java基础(十四)--装箱、拆箱详解
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854761.html
Copyright © 2020-2023  润新知