美文网首页
LCA(最近公共祖先)算法

LCA(最近公共祖先)算法

作者: Joseph_Z | 来源:发表于2017-07-25 09:27 被阅读0次

    在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大公共祖先节点

    ST在线算法:

    ST是基于RMQ区间最大最小值编号的,首先dfs确定3个序列:节点序列、深度序列和首位序列。


    tarjan(离线)算法:

    基于dfs搜索和并查集的算法,时间复杂度O(N+Q)。

    大概过程:

    1.任选一个点为根节点,从根节点开始。

    2.遍历该点u所有子节点v,并标记这些子节点v已被访问过。

    3.若是v还有子节点,返回2,否则下一步。

    4.合并v到u上。

    5.寻找与当前点u有询问关系的点v。

    6.若是v已经被访问过了,则可以确认u和v的最近公共祖先为v被合并到的父亲节点a。

    伪代码:

    相关文章

      网友评论

          本文标题:LCA(最近公共祖先)算法

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