Kosaraju算法

✍ dations ◷ 2025-11-01 15:38:15 #图算法

Kosaraju算法(也被称为Kosaraju–Sharir算法)是一个在线性时间内寻找一个有向图中的强连通分量的算法。阿尔佛雷德·艾侯,约翰·霍普克洛夫特和杰弗里·乌尔曼(英语:Jeffrey D. Ullman)相信该算法来自S. Rao Kosaraju(英语:S. Rao Kosaraju)于1978年撰写的一篇未发表论文之中。米卡·夏尔(英语:Micha Sharir)也独立发现了该算法并于1981年将其发表。该算法巧妙地利用了一个定理:“一个图的反向图和原图具有一样的强连通分量”。

该算法主要用于枚举图中每一个强连通分量内的所有顶点。该算法可由以下四部分组成:

public class KosarajuAlgorithm {    private boolean marked;    private int id;    private int count=-1;    private Stack<Integer> reversePostOrder;    public KosarajuAlgorithm(Digraph G){        //G.V()返回有向图G的边数        marked=new boolean;        id=new int;        //G.reverse()返回的为G的反向图        Digraph G_reverse=G.reverse();        //本遍循环是将G的反向图的逆后序排列存储在reversePostOrder中        for(int i=0;i<G_reverse.V();i++){            if(!marked){                dfs(G_reverse,i);            }        }        count=0;        //按照G的反向图的逆后排序进行深度优先搜索        for(int i:reversePostOrder){            if(!marked){                dfs(G,i);                count++;            }        }    }    //深度优先搜索    public void dfs(Digraph G,int v){        marked=true;        id=count;        for(int i:G.adj(v)){            if(!marked){                dfs(G,i);            }        }        reversePostOrder.push(v);    }}

复杂度

当图是使用邻接表形式组建的,Kosaraju算法需要对整张图进行了两次的完整的访问,每次访问与顶点数 V {\displaystyle V} 和边数 E {\displaystyle E} 之和 V + E {\displaystyle V+E} 成正比,所以可以在线性时间 O ( V + E ) {\displaystyle O(V+E)} 内访问完成。该算法在实际操作中要比Tarjan算法和基于路径的强连通分量算法(英语:Path-based strong component algorithm)要慢,这两种算法都只需要对图进行一次完整的访问。

当图是使用邻接矩阵形式组建的,算法的时间复杂度为 O ( V 2 ) {\displaystyle O(V^{2})}

相关

  • 金花镇金花镇,是中华人民共和国四川省德阳市绵竹市下辖的一个乡镇级行政单位。2019年12月,撤销金花镇,将其所属行政区域划归广济镇管辖。金花镇下辖以下地区:金山村、三江村、玄郎村、
  • 端脑端脑包括两侧大脑半球,是脑的最高级部位。在脊椎动物胚胎的神经发育过程中,脑部神经管分化为五部分:端脑、间脑、中脑、后脑、延髓。其中端脑与间脑合称前脑。人类端脑属于脑和
  • 巴尔虎巴尔虎(蒙古语:.mw-parser-output .font-mong{font-family:"Menk Hawang Tig","Menk Qagan Tig","Menk Garqag Tig","Menk Har_a Tig","Menk Scnin Tig","Oyun Gurban Ulus Ti
  • 勾漏片勾漏方言是一种粤语方言,即粤语勾漏片,或称勾漏粤语。主要分布在广西东南部的玉林、贵港、梧州、贺州及广东西北部的肇庆、云浮、清远等地区,在两广粤语中使用人口最多,分布地域
  • 拉珈语拉珈语是使用于广西壮族自治区金秀瑶族自治县大瑶山地区的一种侗台语族语言,为大部分拉珈人的母语。该语言为一门濒危语言,2000年仅有数千名使用者。拉珈语的系属存在争议,有人
  • ε反转录病毒属ε反转录病毒属是反转录病毒科下的一个属,此属的病毒主要会感染鱼类,例如大眼梭鲈皮肤肉瘤病毒(Walleye dermal sarcoma virus)和大眼梭鲈鱼表皮过度增生病毒(Walleye epidermal
  • 记忆T细胞记忆T细胞是一个T淋巴细胞子类,该种细胞曾经遇到过某种特定抗原且产生过反应。这些细胞可识别外来入侵物,比如细菌、病毒、癌细胞等。记忆T细胞的形成通常是因为曾受特定抗原
  • 光速写光速写(又称光雕;英语:LightScribe)是一种将光盘标签直接刻录在具有特殊染料的CD或DVD刻录片表面上的一项光盘刻录技术,此项技术是由惠普公司的工程师戴瑞‧安德森(Daryl Anderson
  • 莫伊·贝格莫伊·贝格(Morris "Moe" Berg,1902年3月2日生于纽约市--1972年5月29日卒于新泽西州贝尔维尔市)是一位美国职业棒球员,而后于二战期间在战略行政部门(Office of Strategic Servic
  • 胡居仁胡居仁(1434年-1484年),字叔心,江西省余干县人。吴与弼弟子,与陈献章是同窗好友。绝意科举,筑室于梅溪山中,人称敬斋先生。成化元年(1465年),受提学李龄、钟成的邀请,入白鹿洞书院主事。