zoukankan      html  css  js  c++  java
  • Quick Union

    Quick Union

    quick union就是快速连接

    和quick find相同,也是构建一个数组id[],不过存的值换一种理解:

    每个数组内的元素看做一个结点,结点内的值即id[i]看做i的前驱结点.

    初始化时将每个元素的前驱结点赋值为其下标,即id[]={0,1,2,3...,N-1}.

    认为前驱结点和本身相同的结点为根结点,所以以上初始化就是将每个元素的根节点初始化为自己

    对于某个结点,迭代的寻找其前驱结点,最终当某一结点找到的前驱结点和自身相同时,该结点即为以根结点,

    某对结点,若他们的根相同,即认为相连(connnected)

     1 class QuickUnion():
     2     #pre define a array
     3     __id = []
     4     def __init__(self,N):
     5         for i in range(0,N):
     6             #initial the list:
     7             #the __id[i] save i's root
     8             #so, default to itself
     9             self.__id.append(i)
    10     #locate i's root
    11     def root(self,i):
    12         #locate from bottom to top
    13         while i != self.__id[i]:
    14             i = self.__id[i]
    15         return i
    16     def connected(self,p,q):
    17         return self.root(p) == self.root(q)
    18     def union(self,p,q):
    19         i = self.root(p)
    20         j = self.root(q)
    21         self.__id[i] = j
    22     def traversal(self):
    23         for i in self.__id:
    24             print(i,end=' ')
    25 
    26 Qu = QuickUnion(8)
    27 Qu.union(0,1)
    28 Qu.union(2,1)
    29 Qu.union(2,4)
    30 Qu.union(3,7)
    31 print(Qu.connected(0,4))
    32 Qu.traversal()

    实例连接了0-1-2-4 3-7,并调用connected()方法验证0-4是否连接,

    最后遍历一遍,查询所有元素的前驱结点

    以下为输出:

    True
    1 4 1 7 4 5 6 7 

    根据输出可汇出树状图表示:

        4   5  6  7

        |         |

        1         3

       /  

      0    2

  • 相关阅读:
    k8s运行容器之Job应用(6)
    k8s创建资源的两种方式及DaemonSet应用(5)
    kubernetes架构及deployment应用(4)
    docker部署harbor私有镜像库(3)
    k8s集群部署(2)
    kubernetes介绍(1)
    Docker网络(5)
    Docker存储(4)
    Docker镜像的仓库及底层依赖的核心技术(3)
    Docker的镜像及容器常用操作(2)
  • 原文地址:https://www.cnblogs.com/katachi/p/9549663.html
Copyright © 2011-2022 走看看