当前位置: 首页 > news >正文

合肥做网站哪家公司好/百度爱企查电话人工服务总部

合肥做网站哪家公司好,百度爱企查电话人工服务总部,怎么样在网站上做跳转,杭州设计门户网站并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。常常在使用中以森林来表示。 并查集有三种基本操作,获得根节点,判断两节点是否连通,以及将两不连通的节点相连(相当于将两节点各自的集合合并&am…

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。常常在使用中以森林来表示。

并查集有三种基本操作,获得根节点,判断两节点是否连通,以及将两不连通的节点相连(相当于将两节点各自的集合合并)

用UnionFind类来表示一个并查集,在构造函数中,初始化一个数组parent,parent[i]表示的含义为,索引为i的节点,它的直接父节点为parent[i]。初始化时各个节点都不相连,因此初始化parent[i]=i,让自己成为自己的父节点,从而实现各节点不互连。

    def __init__(self, n):self.parent = list(range(n))

由于parent[i]仅表示自己的直接父节点,查询两个节点是否相交需要比较它们的根节点是否相同。因此要封装一个查询自己根节点的方法。

    def get_root(self, i):while i != self.parent[i]:i = self.parent[i]return i

接下来可以通过来比较根节点是否相同来判断两节点是否连通。

    def is_connected(self, i, j):return self.get_root(i) == self.get_root(j)

当要连通两个节点时,我们要将其中一个节点的根节点的parent,设置为另一个节点的根节点。注意,连通两个节点并非仅仅让两节点自身相连,实际上是让它们所属的集合实现合并。

    def union(self, i, j):i_root = self.get_root(i)j_root = self.get_root(j)self.parent[i_root] = j_root

接下来我们做两个小优化。
由于调用get_root时需要通过不断找自己的直接父节点,来寻找根节点,如果这棵树的层级过深,会导致性能受到严重影响。因此我们需要在union时,尽可能的减小合并后的树的高度。
在构造函数中新建一个数组rank,rank[i]表示节点i所在的集合的树的高度。

因此,当合并树时,分别获得节点i和节点j的root i_root和j_root之后,我们通过访问rank[i_root]和rank[j_root]来比较两棵树的高度,将高度较小的那棵连到高度较高的那棵上。如果高度相等,则可以随便,并将rank值加一。

    def union(self, i, j):i_root = self.get_root(i)j_root = self.get_root(j)if self.rank[i_root] == self.rank[j_root]:self.parent[i_root] = j_rootself.rank[j_root] += 1elif self.rank[i_root] > self.rank[j_root]:self.parent[j_root] = i_rootelse:self.parent[i_root] = j_root

通过对union操作的改良可以防止树的高度过高。我们还可以对get_root操作本身进行优化。
当前每次执行get_root时,需要一层一层的找到自己的父节点,很费时。由于根节点没有父节点,并且文章开始处提到过如果一个节点没有父节点,那么它的父节点就是自己,因此可以说只有根节点的父节点是自己本身。现在我们加上一个判断,判断当前节点的父节点是否为根节点,如果不为根节点,就递归地将自己的父节点设置为根节点,最后返回自己的父节点。

    def get_root(self, i):if self.parent[i] != self.parent[self.parent[i]]:self.parent[i] = self.get_root(self.parent[i])return self.parent[i]

以上是python实现一个简单的并查集的方式。

http://www.jmfq.cn/news/4797577.html

相关文章:

  • 90设计网是干嘛的/长沙seo招聘
  • 如何在阿里巴巴上做网站/html网页制作步骤
  • 深圳网站建设开发/怎么做一个网站页面
  • 深圳设计网站公司网站/小程序源码网
  • 如何做一个网站赚钱/安卓aso优化工具
  • 给老外做兼职的网站/排名优化培训
  • 无锡网站建设多少钱/google海外版入口
  • 医院响应式网站建设方案/优秀网站设计欣赏
  • 导航网站怎么做seo/网络维护公司
  • 网站开源/山东关键词优化联系电话
  • wordpress添加搜索引擎/广州各区正在进一步优化以下措施
  • 阿里巴巴招聘官网/抖音seo排名优化
  • 做二维码的网站/专业软文平台
  • 网站在线报名怎么做/网站seo诊断工具
  • 专注七星彩网站开发/网站建设报价方案
  • 软件开发资源网站/兰州网络推广新手
  • 外贸网站模板建立/域名注册网站系统
  • html演示网站/广西南宁市有公司网站设计
  • 浅谈政府门户网站建设/全媒体广告代理加盟靠谱吗
  • wordpress最好用的编辑器/搜索引擎优化论文
  • 阿里巴巴网站建设的背景/武汉网站seo公司
  • hishop/济南seo整站优化价格
  • 韩国明星都在那个网站做直播/seo综合查询爱站
  • 北京知名的网站建设公司/市场营销教材电子版
  • 建设厅查询网站/sem竞价托管多少钱
  • 动漫做那个视频网站/女生学市场营销好吗
  • 建一个购物网站需要什么条件/什么是百度指数
  • 网站赌博代理怎么做/网络推广公司深圳
  • 直播类型网站开发/新站seo竞价
  • 快手作品推广网站/常州网站建设制作