倍增法,Floyd算法,tarjan算法
1
键盘上的艺术家w
努力奋斗
展开
-
超级详细 倍增法 实现 LCA
描述:倍增法用于很多算法当中,通过字面意思来理解就是翻倍增加嘛,这里着重讲使用倍增法在树中的应用求LCA; LCA是啥呢 在一棵树当中 lca表示的是两个节点最近公共祖先, 大家看这课树哈节点5 ,3的lca就是1,13和11的LCA就是6。节点8,12的lca就是8,那么我们如何通过被增来实现LCA呢。 首先 大家看下这个数组 grand[x][i] ,这个数组表示标号为x节原创 2017-06-05 21:29:41 · 23865 阅读 · 15 评论 -
超详细Tarjan算法总结,求强连通分量,割点,割边,有重边的割边
Tarjan是一个人,他一身中发明了很多算法,就这几个算法最为出名。 1、求有向图的强连通分量,那么什么是强连通分量呢,就是一个顶点集合,任意两个顶点间都可以互相到达。如果图中任意两点可以互相到达,则此图强连通。 TARJAN是基于dfs算法的基础上,所以也会得到一颗搜索树。 那么他是怎么运行的呢,首先大家看着两个数组 dfn[i],和low[i] dfn[i]表示第i个节点深原创 2017-06-14 19:50:46 · 4491 阅读 · 2 评论 -
trajan 算法 离线求lca 超详细讲解~~~~ 保证一看就懂~~~
LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节点。 所以LCA主要是用来处理当两个点仅有唯转载 2017-08-09 21:52:40 · 4282 阅读 · 5 评论 -
Floyd算法功能总结+详细讲解~~
佛洛伊德算法用于求多源点的最短路径算法~~当然这是最原始的功能。 佛洛伊德算法时间复杂度 为O(n^3)次方。 求最短路,讲的是 如果两点之间的边的距离大于,这个两点经过其他点所到达的距离,那么就把最短距离替换成那条经过第三 个点所到达的边的距离即(a->b的距离大于a->k->b的距离)a到b的距离大于a经过k再到b(当然这里所说的第三个点不一定就真的是三个点,可能有很多很多个点,见下两原创 2017-08-14 15:15:12 · 13097 阅读 · 6 评论