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

凯叔讲故事网站谁做的福州 建站 软件

凯叔讲故事网站谁做的,福州 建站 软件,做网站湘潭,成品网站免费模板Disjoint Sets意思是一系列没有重复元素的集合。一种常见的实现叫做,Disjoint-set Forest可以以接近常数的时间复杂度查询元素所属集合,用来确定两个元素是否同属一个集合等,是效率最高的常见数据结构之一。 Wiki链接:https://en…

Disjoint Sets意思是一系列没有重复元素的集合。一种常见的实现叫做,Disjoint-set Forest可以以接近常数的时间复杂度查询元素所属集合,用来确定两个元素是否同属一个集合等,是效率最高的常见数据结构之一。

Wiki链接:https://en.wikipedia.org/wiki/Disjoint-set_data_structure

最近工作中制作一个模拟城市类型的游戏Demo,其中工业区和居民区之间需要有道路连通,两个区域才能发展,进行数值计算。使用Disjoint Set进行连通性测试,实现简单,性能绝佳。

结构实现

主要有三个操作:添加、合并、查询。用图形表示,数据结构大致逻辑为:

在这里插入图片描述

添加8个元素,他们分别在自己的集合中。

在这里插入图片描述

经过几次合并操作后,变成这样的集合状态。此时:1和2就在同一集合;1和7在不同集合。

表示

把每一个集合以一棵树表示,每一个节点即是一个元素。节点保存着到它的父节点的引用,树的根节点则保存一个空引用或者到自身的引用或者其他无效值,以表示自身为根节点。

添加

添加操作MakeSet(x)添加一个元素x,这个元素单独属于一个仅有它自己的集合。添加操作仅需将元素标记为根节点。

查询

在不交集森林中,每个集合的代表即是集合的根节点。查询操作Find(x)x开始,根据节点到父节点的引用向根行进,直到找到根节点。

路径压缩优化

在集合很大或者树很不平衡时,上述代码的效率很差,最坏情况下(树退化成一条链时),单次查询的时间复杂度高达O(n)。一个常见的优化是路径压缩:

在查询时,把被查询的节点到根节点的路径上的所有节点的父节点设置为根结点,从而减小树的高度。也就是说,在向上查询的同时,把在路径上的每个节点都直接连接到根上,以后查询时就能直接查询到根节点。

合并

合并操作Union(x, y)把元素x所在的集合与元素y所在的集合合并为一个。合并操作首先找出节点x与节点y对应的两个根节点,如果两个根节点其实是同一个,则说明元素x与元素y已经位于同一个集合中,否则,则使其中一个根节点成为另一个的父节点。

按秩合并优化

上述代码的问题在于,可能会使得树不平衡,增大树的深度,从而增加查询的耗时。一个控制树的深度的办法是,在合并时,比较两棵树的大小,较大的一棵树的根节点成为合并后的树的根节点,较小的一棵树的根节点则成为前者的子节点。

判断树的大小有两种常用的方法,一个是以树中元素的数量作为树的大小,这被称为按大小合并

另一种做法则是使用Rank来比较树的大小。Rank的定义如下:

  • 只有根节点的树(即只有一个元素的集合),Rank为0;
  • 当两棵Rank不同的树合并后,新的树的Rank为原来两棵树的Rank的较大者;
  • 当两棵Rank相同的树合并后,新的树的Rank为原来的树的Rank加一。

容易发现,在没有路径压缩优化时,树的Rank等于树的深度减一。在有路径压缩优化时,树的Rank仍然能反映出树的深度和大小。在合并时根据两棵树的Rank的大小,决定新的根节点,这被称作按Rank合并

Wiki链接中有详细的伪码,可供参考。

应用思路

前文中提到的模拟城市类型的游戏,地图的构造是基于格子的,道路是由一些列格子连接而成,是比较典型的独立集合。使用思路:

  1. 每次创建道路格子,将其添加到Set;
  2. 查找与该道路相邻的其它道路,进行合并;
  3. 经过一系列上述操作后,相连的道路都进入同一集合了;有相同的root
  4. 查找两个建筑的连通情况,找到与建筑相邻的道路,查询两个建筑的道路格子直接是否在同一集合,即可得到连通性。

关于删除道路

删除一个道路,找出与其相邻的所有道路格子,将这些格子的parent设置为自身,然后进行深度遍历合并集合。

http://www.yayakq.cn/news/193592/

相关文章:

  • 辽宁省建设厅网站升级怎么学做网站
  • 深圳福田站佛山网站建设专业主修课程
  • 莱州网站建设教程延吉建设局网站
  • 阿里云服务器win系统建站教程北京前端开发的薪资水平
  • 个人律师网站模板360免费建站教程
  • 长春市做网站的公司wordpress 留言汉化
  • 便捷网站建设多少钱网站改了标题会怎么样
  • 免费做的网站怎么设置域名解析做58同城这样的网站有哪些
  • 淘宝客网站制作教程设计一个logo需要多少钱
  • 自己建设的手机网站做百度地图定位无锡网站制作哪家正规
  • wordpress适合做什么网站wordpress首页文章数量
  • 延安网站开发网站首页设计尺寸
  • qfd 网站开发什么是网站建设方案书
  • 哈密网站制作公司个人怎么样做网站
  • 十堰网站免费建设wordpress微信登录
  • 国外做耳机贸易的平台网站河北网站建设价格大全
  • 网站f式布局网络推广公司联系方式
  • 网站svg使用微信小程序商城完整源码
  • 做公司企业网站外包项目网站
  • 网站开发硬件设计找生产建筑模板的厂家
  • 搭建网站教学规模以上工业企业数量
  • 个人网站开发与设计摘要福州网站开发fjfzwl
  • 深圳网站设计公司 学校中国黄金集团建设有限公司官方网站
  • 小说网站签约作者应该怎么做苏州网站建设专家
  • 网站上做公司宣传seo优化推广工程师招聘
  • 网站使用了seo优化工具怎么检测软件定制为什么不给源码
  • 网站职位推荐怎么做网站关键词优化公司
  • 中天建设集团有限公司总网站惠州市网站开发
  • 从网站栏目看网站功能河北省建设机械会网站首页
  • 做一网站优化要多少钱智能网联对应的职业