Kosaraju算法

✍ dations ◷ 2025-12-06 17:16:23 #图算法

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})}

相关

  • 市镇市镇(comune,复数为comuni)是意大利的最基本的行政区划,也是意大利的基层政权。目前,意大利的市镇(comuni)共有8101个。
  • 罗德里奇劳特里奇(英语:Routledge,/ˈraʊtlɪdʒ/)是一家英国跨国出版商,由乔治·劳特里奇(英语:George Routledge)正式创办于1851年,专注于学术书籍、期刊以及在线资源出版服务,主要涉及社会
  • 木佬语木佬语是木佬人的语言。木佬人如今居住在贵州省东南的麻江、黄平、福泉、都匀、凯里等地,历史上在贵州西部的水城、而大方等地也有分布。人口有3万多(贵州地方政府官方认定为
  • 劳伦斯世界体育奖-年度最佳新人劳伦斯世界体育奖(英语:Laureus World Sports Awards)是由劳伦斯世界体育学会主办的一个年度体育界奖项,用于表彰奖励在过去一年中表现突出的体育运动员。奖项主要分为7个项目,其
  • 宫内厅 ?、英语:Imperial Household Agency)是日本政府中掌管天皇、皇室及皇宫事务的机构,其前身为“宫内省”与“宫内府”。宫内厅除了负责与皇室有关的国家事务外,还有协助天皇接见
  • 吵闹鬼《吵闹鬼》(英语:)是一部1982年美国灵异(英语:Supernatural horror film)恐怖片,由陶比·胡柏执导,史蒂文·斯皮尔伯格创作故事并与迈克尔·格雷斯(英语:Michael Grais)、马克·维克多(
  • 林徽因林徽因(1904年6月10日-1955年4月1日),原名林徽音,中国著名建筑师和诗人。人民英雄纪念碑和中华人民共和国国徽深化方案的设计者。她是建筑师梁思成的第一任妻子。同时她也是民国
  • 褚启宗褚启宗,安徽合肥人,清朝政治人物。同进士出身。乾隆二十五年(1760年),登进士。乾隆二十七年(1762年)接替王友莲任青浦县知县一职,乾隆三十二年(1767年)由李玉藻接任。
  • 褚旭亮褚旭亮(1982年6月-),山东安丘人,汉族,中国共产党党员。中华人民共和国政治人物、第十三届全国人民代表大会解放军和武警部队代表。2018年,被选为全国人大代表。
  • 李维光李维光(1898年-1964年),洗名若翰,自选自圣的天主教南京教区主教。1898年,李维光出生在江苏省无锡县堰桥一个信奉天主教达300余年的家庭,在兄弟五人中排行第三。1913年起入上海徐汇