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

长沙哪里学网站建设黑河做网站哪家好

长沙哪里学网站建设,黑河做网站哪家好,网站建设注意事项 南京,网站开发毕设参考文献文章目录并查集特点构建过程查找两个元素是否是同一集合优化查找领头元素设置两个元素为同一集合构建结构应用场景并行计算集合问题并查集特点 对于使用并查集构建的结构#xff0c;可以使得查询两个元素是否在同一集合#xff0c;以及合并集合的操作无限接近O(1) 构建过程… 文章目录并查集特点构建过程查找两个元素是否是同一集合优化查找领头元素设置两个元素为同一集合构建结构应用场景并行计算集合问题并查集特点 对于使用并查集构建的结构可以使得查询两个元素是否在同一集合以及合并集合的操作无限接近O(1) 构建过程 查找两个元素是否是同一集合 并查集结构会让每个元素合并后挂在一个领头元素上可能呈现下面的结构要判断d和f是否是同一集合就判断顶部的零头元素是否一样因为a和e不一样所以不是同一集合 优化查找领头元素 如上图的结构当要查找d的领头元素时需要一直往上遍历当节点深度很深时也会带来负担优化方式是当某个元素查找到领头元素后将元素路径上所经过的所有节点的领头元素设置成查找的节点比如d查找到a后将b的领头元素设置成a通过上面的优化手段可以看出当使用并查集查询查询领头元素的次数越多查找的效率就越好 设置两个元素为同一集合 将两个元素的领头元素设置成同一个即可即将挂载节点少的领头元素挂载到挂载节点多的领头元素下比如上图将e挂载到a下因为查找元素是否在同一集合是根据领头元素是否相同来的 构建结构 class Element {value;constructor(value) {this.value value;} }class Union {// 给定元素对应的修饰对象elementMap;// 元素对应的父元素fatherMap;// 领头元素下挂载的元素个数sizeMap;constructor(list) {this.elementMap new Map();this.fatherMap new Map();this.sizeMap new Map();list.forEach((value) {const element new Element(value);this.elementMap.set(value, element);// 初始将所有元素都领头元素设置成自身this.fatherMap.set(element, element);// 初始所有领头元素下挂载的元素个数为1this.sizeMap.set(element, 1);});}// 查找领头元素findHead(element) {const path [];// 找到领头元素while (element ! this.fatherMap.get(element)) {path.push(element);element this.fatherMap.get(element);}// 优化操作将路径上的元素的父元素都更新成领头元素while (path.length) {this.fatherMap.set(path.pop(), element);}return element;}// 判断是否同一集合isSameSet(value1, value2) {if (this.elementMap.has(value1) this.elementMap.has(value2)) {return (this.findHead(this.elementMap.get(value1)) this.findHead(this.elementMap.get(value2)));}return false;}// 设置两个元素为同一集合setUnion(value1, value2) {if (this.elementMap.has(value1) this.elementMap.has(value2)) {const head1 this.findHead(this.elementMap.get(value1));const head2 this.findHead(this.elementMap.get(value2));if (head1 ! head2) {const bigOne this.sizeMap(head1) this.sizeMap(head2) ? head1 : head2;const smallOne bigOne head1 ? head2 : head1;this.fatherMap.set(smallOne, bigOne);this.sizeMap.set(bigOne,this.sizeMap.get(bigOne) this.sizeMap.get(smallOne));this.sizeMap.delete(smallOne);}}} } 应用场景 并行计算集合问题 初始问题和解法 通过多线程计算将整个内容分成左右两个区域通过多线程分别求出左右两个面积的岛屿数量为1个和2个总和为3但实际岛屿答案为2个所以还要计算左右两个是否有岛屿是属于同一个集合 首先判断每一行分割的位置左右相邻节点是否都为1是1说明为同一集合通过并查集设置为同一集合将总岛屿数量-1同理后续相邻1节点只需要先通过并查集结构判断是否在同一集合如果没有则设置为同一集合然后岛屿数量-1的操作即可因为查询和合并的代价都很低所以再通过多线程带来的提速更快了
http://www.tj-hxxt.cn/news/228022.html

相关文章:

  • 高端网站建设深圳wordpress添加微信扫码支付宝
  • 网站建设学习心得查询优惠券的网站如何做
  • 全国网站建设大赛橙云网站建设
  • 网站建设的步骤以及流程广州免费律师咨询
  • 游戏娱乐网站建设北京网站的优化
  • 如何设计网站建设引导页企业官网是什么意思
  • 北京检查站优化雄安智能网站建设电话
  • 做销售网站那家好企业小型网站要多少钱
  • 移动端购物网站建设目的上海app开发公司
  • php做网站需要mysql么网站首页被挂黑链
  • 定制企业网站建设网站页脚设计
  • 找做cad彩拼的网站创建购物平台需要什么
  • dede手机网站仿站无锡网站设
  • 做薪酬调查有哪些网站插件素材网站
  • 生小孩去什么网站做登记池州哪家做网站
  • 加强酒店网站建设的建议大连住房和建设局网站
  • 传播公司可以做门户网站吗中装建设股票行情
  • 三亚网站建设公司甘肃肃第八建设集团网站1
  • 为企业做网站建设优化小程序包年竞价漂亮企业网站源码
  • 天河做网站平台百度上海总部
  • 什么行业需要做网站公司申请注册流程
  • 烟台网站关键词推广哪个网站音乐做的最好的
  • 网站关于我们模板wordpress+软件+入门
  • 做网站商标分类海淀网站建设公司
  • 谷歌sem和seo区别网站seo的关键词排名怎么做的
  • 邯郸建设企业网站用微信怎么做商城网站吗
  • 招聘网站是做什麼的做网站是干嘛的
  • 京网站建设首选白龙马网络公司做网站价格
  • 外流网站建设杭州网站优化公司
  • 做网站的工作流程石家庄58同城