zoukankan      html  css  js  c++  java
  • *Algs4-1.5.14根据高度加权的quick-union算法-(未解决)

    1.5.14根据高度加权的quick-union算法。给出UF的一个实现,使用和加权quick-union算法相同的策略,但记录的是树的高度并不总是将较矮的树连接到较高的树上 。用算法证明N个触点的树的高度不会超过其大小的对数级别。
    答:暂未证明。
    public class E1d5d14
    {
        private int[] id;
        private int[] hi;
        private int count;
        public E1d5d14(int N)
        {
            count=N;
            id=new int[N];
            for (int i=0;i<N;i++)
             {
                id[i]=i;
                StdOut.printf("%3d",i);
             }
             StdOut.println();
            //
            hi=new int[N];
            //
        }
       
         public int count()
         {return count;}
        
          boolean connected(int p,int q)
          {return find(p)==find(q);}
        
          public int find(int p)
          {
              while(p!=id[p]) p=id[p];
              return p;
          }
          
        
          public void union(int p,int q)
          {
              int i=find(p);
              int j=find(q);
              StdOut.printf(" i=%d j=%d ",i,j);
              if(i==j) return;
              if(hi[i]<hi[j])
                  id[i]=j;
              else if(hi[i]>hi[j])
                  id[j]=i;
              else
              {
                  id[j]=i;
                  hi[j]++;
              }
              count--;
              //
              for (int k=0;k<id.length;k++)
                  StdOut.printf("%3d",id[k]);
              StdOut.printf(" ");
              for (int k=0;k<id.length;k++)
                  StdOut.printf("%3d",hi[k]);
              StdOut.printf(" ");
          }
          
           public static void main(String[] qrgs)
           {
               int N=StdIn.readInt();
               E1d5d14 uf=new E1d5d14(N);
               while (!StdIn.isEmpty())
               {
                   int p=StdIn.readInt();
                   int q=StdIn.readInt();
                   if(uf.connected(p,q)) continue;
                    StdOut.printf("p=%d q=%d",p,q);
                   uf.union(p,q);
                }//end while
            }//end main
    }//end class

  • 相关阅读:
    15.[JavaScript]第8章对象和数组[上,下, 中]
    centos 7 firewall(防火墙)开放端口/删除端口/查看端口
    Docker使用docker-compose.yml构建Asp.Net Core和Mysql镜像并与Mysql数据库通信
    Docker使用Dockerfile构建Asp.Net Core镜像
    Docker使用Mysql镜像命令
    指定的 CGI 应用程序遇到错误,服务器终止了该进程。
    常见SMTP发送失败原因列表
    MVC View中获取action、controller、area名称、参数
    status 返回当前请求的http状态码
    asp:GridView控件使用FindControl方法获取控件的问题
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854782.html
Copyright © 2011-2022 走看看