美文网首页
论二进制与lca的关系

论二进制与lca的关系

作者: tygzx | 来源:发表于2016-04-05 15:20 被阅读60次

首先我们先回顾下什么叫LCA

LCA:树上两个点之间距离最近的公共祖先

在ACM比赛中常常是出现LCA的题目,而求LCA也有很多种方法。一般分为两大类,在线和离线(不懂什么叫在线和离线的你们自己去百度)


我在这篇文章中给你们介绍的方法是-倍增法(在线求LCA的一种方法)

如下图所示

这是一颗非常常见的二叉树,树上的每个节点都保存着两个信息-树节点的编号和树节点的深度。

![I_G]D5SBKT)7S`]5PFV)}XT.png](https://img.haomeiwen.com/i1250148/ed8fc2beebffccf5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


对于这样的一棵树,我们可以很直观的提出一种求LCA算法,对于同一颗树上的两个不同节点,比如上图所示的8节点和5节点,我们 先让深度为3的8节点上升到他的父节点-深度为2的4节点上,然后4节点和5节点不停的向他们的父节点移动,直到他们的父节点相同,8与5的最近公共祖先就求出来了 。

我们来总结下上面的算法流程

  • 1 先让树节点深度大的到达树节点深度的小的深度
  • 2 两个树节点同时向他们的父节点移动
  • 3 如果两个树节点到达的父节点相同,则LCA求出来了

上面算法对于求一对节点的LCA的时间复杂度是o(n)。对于N对算法复杂度自然就是0(n^2)。

那么,我们有没有办法来优化这个算法的时间复杂度呢,有,当然是有了!


ok!终于要轮到我们的主角二进制闪亮登场了!ZZZ。

二进制:这个我就不用介绍了吧。

我们该怎么利用二进制来优化呢?我们都知道自然数都是能够用二进制表示的,例如17 的二进制表示为10001,我们在想想我们刚才的那个总结的那个算法。有没有有一丝灵感迸发呢?ZZZ


对于算法中第一步,两个节点的深度之差我们是能够计算的出来的,假设节点的深度之差是17,那么我们这个时候只需要两个步骤,第一个步骤,向上移动16,

第二个步骤,向上移动一位,。有没有明白什么呢?

对于算法中的第二步,虽然我们不知道离他们最近的祖先的节点的深度的是多少,但是我们可以知道一点,那就是这个树的根一定是这两个节点的祖先,OK,那么我就就可以逆向思维来求,求出两个节点的最多向上移动多少步,仍然没到达最近的公共祖先。

相关文章

  • 论二进制与lca的关系

    首先我们先回顾下什么叫LCA LCA:树上两个点之间距离最近的公共祖先 在ACM比赛中常常是出现LCA的题目,而求...

  • 刷题计划

    并查集 题目 图论 题目 树 题目 资源参考 倍增LCA LCA和RMQ Tarjan LCA 倍增 题目 DP 题目

  • 2018-12-09

    lCA

  • 二进制与权限控制

    二进制与权限控制有什么关系 最近在做权限方面的设计,很自然想到了二进制的方案。二进制跟权限有什么关系?举两个例子大...

  • 护理理论-1

    任务一 预习 一、系统论系统论二、需要理论马斯洛 三、思考1.系统论与护理的关系2.需要理论与护理的关系

  • js 处理二进制文件 ArrayBuffer、Blob对象

    要点: 文本流与二进制流 ArrayBuffer、TypedBuffer、DataView、Blob对象的关系 A...

  • link-cut-tree

    dfs: splay: access: lca:

  • 《有效教学》第三章——教学的基本问题

    第一节 教师与学生 一、认识论意义上的师生关系 ☞认识论意义上的师生关系,即教师与学生的主客体关系。 * 主体与客...

  • 最近公共祖先

    最近公共祖先 简称LCA(Lowest Common Ancestor),所谓LCA,是当给定一个有根树T时,对于...

  • 《被讨厌的勇气》读后感

    写在前面: 书中把人的烦恼归结为人际关系,“我”与自我、“我”与他人的关系,并从“原因论”和“课题论”来解...

网友评论

      本文标题: 论二进制与lca的关系

      本文链接:https://www.haomeiwen.com/subject/rcjslttx.html