• 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

  • 相关阅读:
    Git使用基础介绍
    [SnowflakeIdWorker]雪花Id
    C#[反射 Reflection]
    [.Net Core]Castle DynamicProxy
    [Vue]Vuex
    [Vue] 导航守卫
    [Vue] $route和$router的区别
    Unexpected end of JSON input while parsing near '..."
    推荐一款截图的工具(Snip)
    [Vue] 计算属性Computed与函数function的异同
  • 原文地址:https://www.cnblogs.com/katachi/p/9549663.html
Copyright © 2020-2023  润新知