线性时间查找一个图中的所有node-cut点分割
来源:互联网 发布:ios破解软件源威锋 编辑:程序博客网 时间:2024/05/29 04:33
node-cut定义:
对于一个无向图G,如果删除一个点v可以增加联通分支的数量,那么我们称点v是图G的一个node-cut,即点分割。(注意和最小割是有区别的,最小割是用移除最少了边使得原图不联通,可以用流算法去解决)
node-cut的性质:
对于点p,如果存在一个子节点q,在q点的DFS搜索树上如果没有存在反向边指向DFS搜索中p的祖先节点,那么对于这样的p点是原图的node-cut。
基于这样的性质,我们可以用一次DFS来找出原图的所有node-cut,具体的一些设定可以参考《算法导论》图算法部分的DFS章节:(白色节点表示未被访问过,灰色节点表示第一次访问到,黑色节点表示访问结束):时间复杂度是O(V+E)
DFS过程中每个节点增加一个变量ctime(v),默认为-1,记录自身或者DFS搜索树中子节点指向DFS点中灰色点u最小的d(u)。当p点结束DFS搜索由灰变黑时,将ctime(p)传递给DFS父节点q,如果ctime(p)<ctime(q),ctime(q):=ctime(p)。当一个点v从灰变成黑时,可以根据ctime(v)和ctime(v)比较判断自身是否是node-cut。
附:DFS的root结点需要单独判断,如果dfs生成树的子节点数量大于等于2,那么根节点为cut-node,反之不为cut-node。
上述性质来自这篇paper:
A Silent Self-Stabilizing Algorithm for finding Cut-nodes and Bridges
这篇paper还给出了另外找node-cut的算法,有点长不大想看就自己想了一个算法。
2016年8月26日更新算法实现:
cut-node线性算法的实现
- 线性时间查找一个图中的所有node-cut点分割
- 线性时间查找
- 线性时间查找中位数算法
- sqlserver 查找一个表中的所有列名
- C#,net查找一个Node所有子节点,演示递归调用
- 字符串对象分割【cut】
- 线性时间查找固定频率的元素
- 线性时间查找第k大元素
- 线性时间的中位数查找算法
- 线性时间的中位数查找算法
- Linux文本处理命令--cut分割文件和sed查找替换的运用
- Oracle分割字符串中的所有逗号 REGEXP_SUBSTR
- 图像分割之(二)Graph Cut(图割)
- 图像分割之(二)Graph Cut(图割)
- 图像分割之(二)Graph Cut(图割)
- 图像分割之(二)Graph Cut(图割)
- 图像分割之(二)Graph Cut(图割)
- 图像分割之(二)Graph Cut(图割)
- 文件系统编程
- 解决Thread性能问题:ThreadPool
- synchronized与static synchronized 的区别、synchronized在JVM底层的实现原理及Java多线程锁理解 (r)
- linux 配置redis集群
- android软键盘,windowSoftInputMode属性详解
- 线性时间查找一个图中的所有node-cut点分割
- 【Qt开发】如何将内存图像数据封装成QImage V1
- 通用viewpager,不喜,勿喷
- u-boot启动流程分析(1)_平台相关部分
- HDU 5536 Trie
- 数据结构实验之二叉树一:树的同构
- 小鸡腿U T10 Tokyo2014
- 99乘法表
- ThreadLocal实现方式&使用介绍---无锁化线程封闭 (r)