1.RMQ+ST

  首先注意这个算法的要素:结点编号,dfs序,结点深度。

  首先dfs,求出dfs序,同时求出每个结点的深度。然后st算法,维护深度最小的结点编号(dfs序也可以,因为他们俩可以互相转换,只要不是深度就行了)。这样后面查询的时候才知道lca是哪个结点。如果维护的是深度。。那就不知道了。

  感觉这个算法的精髓在于:两个节点的dfs序间最小深度的结点一定是它们的lca(不会证)。至于结点编号和dfs序如何转换。。dfs序转换成结点编号很简单,数组取一下就行了。然而结点编号转换成dfs序需要对于每个结点存一个first,表示每个结点第一次在dfs序中出现的位置。为什么这样。。因为无论是维护还是查询,它和其他位置都还是一样的,没影响。

  所以只要认清三个要素,然后清楚它们如何转换就行了。

  时间复杂度。。预处理O(nlogn),查询O(1)吧。预处理上界紧。

2.树剖

  树剖思想很好理解。。顺着链往上找就行了。注意两个结点同链时要取深度低的。

  时间复杂度:预处理O(n),查询O(logn)。上界都松。

3.倍增

  倍增也就是先预处理一下,然后对于一个查询x,y,先把x,y跳到同一高度,再一起进退。。好理解吧。

  时间复杂度:预处理O(nlogn),查询O(logn)。上界紧。。(感觉这个好蒟蒻,但是好写)

4.tarjan

  前面都是在线。。这个是秒杀一切的离线算法。

  它利用了dfs的性质。首先对于树dfs。当一个结点的一个孩子dfs完以后,再把它的孩子通过并查集并到它上面。注意不能按秩合并。。因为这个结点的孩子都遍历完以后,会查询与这个结点相关的询问。如果那个结点访问过,就查询那个结点的爸爸的爸爸的爸爸祖先,那一定是它们的lca。

  至于为什么不能立即合并,那是因为tarjan需要将子树独立,不然查询到的就是目前访问到的最低结点,而不是对于查询的lca了。

  时间复杂度:O(n)。上界。。紧不紧无关紧要。

得出结论:如果数据不大的话,用好写的倍增。不然支持离线用tarjan,只能在线的话,查询多用RMQ+ST,节点多用树剖!

 

对各种lca算法的理解的更多相关文章

  1. LCA算法的理解

    LCA思想: 在求解最近公共祖先为问题上,用到的是Tarjan的思想,从根结点开始形成一棵深搜树,非常好的处理技巧就是在回溯到结点u的时候,u的子树已经遍历,这时候才把u结点放入合并集合中, 这样u结 ...

  2. LCA算法

    LCA算法: LCA(Least Common Ancestor),顾名思义,是指在一棵树中,距离两个点最近的两者的公共节点.也就是说,在两个点通往根的道路上,肯定会有公共的节点,我们就是要求找到公共 ...

  3. openCV中直方图均衡化算法的理解

    直方图均衡化就是调整灰度直方图的分布,即将原图中的灰度值映射为一个新的值.映射的结果直观表现是灰度图的分布变得均匀,从0到255都有分布,不像原图那样集中.图像上的表现就是对比度变大,亮的更亮,暗的更 ...

  4. 【图论】tarjan的离线LCA算法

    百度百科 Definition&Solution 对于求树上\(u\)和\(v\)两点的LCA,使用在线倍增可以做到\(O(nlogn)\)的复杂度.在NOIP这种毒瘤卡常比赛中,为了代码的效 ...

  5. SDUT OJ 数据结构实验之串一:KMP简单应用 && 浅谈对看毛片算法的理解

    数据结构实验之串一:KMP简单应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  6. POJ1523(割点所确定的连用分量数目,tarjan算法原理理解)

    SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7406   Accepted: 3363 Description C ...

  7. 【转】浅谈对主成分分析(PCA)算法的理解

    以前对PCA算法有过一段时间的研究,但没整理成文章,最近项目又打算用到PCA算法,故趁热打铁整理下PCA算法的知识.本文观点旨在抛砖引玉,不是权威,更不能尽信,只是本人的一点体会. 主成分分析(PCA ...

  8. Vue中diff算法的理解

    Vue中diff算法的理解 diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DOM结 ...

  9. 关于KMP算法中,获取next数组算法的理解

    参考:KMP入门级别算法详解--终于解决了(next数组详解) https://blog.csdn.net/lee18254290736/article/details/77278769 在这里讨论的 ...

随机推荐

  1. jQuery JS 入门记录

    1.类型转换 .toString() 转字符串 . parseInt() parseFloat() 强制转换 数字型(Number) 1.声明 var i = 1; var i = new Numbe ...

  2. IIS部署网站(建站)

      双击IIS图标,运行IIS服务器: 如下图所示: 2 IIS打开后,选中网站,然后右键,在弹出的菜单中,选择新建,然后选择网站:如下图所hi: 3 在弹出的窗口中,直接点击下一步:如下图所示: 4 ...

  3. hdu 4514 湫湫系列故事――设计风景线(求树的直径)

    随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好.  现在已经勘探确定了n个位置 ...

  4. ES _source字段介绍——json文档,去掉的话无法更新部分文档,最重要的是无法reindex

    摘自:https://es.xiaoleilu.com/070_Index_Mgmt/31_Metadata_source.html The _source field stores the JSON ...

  5. kylin_学习_01_kylin安装部署

    一.环境准备 根据官方文档,kylin是需要运行在hadoop环境下的,如下图: 1.hadoop环境搭建 参考:hadoop_学习_02_Hadoop环境搭建(单机) 2.hbase环境搭建 参考: ...

  6. 3_observer

    #Observer 成就系统 achievements system 玩家完成某种成就后,通知监督者,监督者做出相应出来 ``` //简单来说就是事件触发的时候, 通知监督者 class Observ ...

  7. PS色调— —通道混合

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); Image=im ...

  8. jquery中ON方法的使用

    以前在jquery中绑定动态元素一直使用live,现在才发现live已经被抛弃了,现在如果想实现live方法,可以使用最新的ON方法,具体使用如下: 替换live() live()写法   $('#l ...

  9. [原]NYOJ-A*B Problem II-623

    大学生程序代写 A*B Problem II 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 ACM的C++同学有好多作业要做,最头痛莫过于线性代数了,因为每次做到矩阵相 ...

  10. ONVIF Device Manager v2.2.146

    对接ONVIF使用软件,用于对接支持onvif协议的IPC厂家设置 http://download.csdn.net/detail/li_dabo/9761415