Kosaraju算法

✍ dations ◷ 2025-08-08 03:58:25 #图算法

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

相关

  • 吕梁构造期吕梁构造期,简称吕梁期,是古元古代(25-18亿年前)期间的构造期,在此期间,在今中国及周边地区发生了吕梁运动或称吕梁事件。因为吕梁运动在山西吕梁山的表现最典型,故而得名。与此
  • 赫罗图赫罗图(英语:Hertzsprung–Russell diagram,简写为H–R diagram、HR diagram或HRD)是以恒星的绝对星等或光度相对于光谱类型或有效温度绘制的散布图(英语:Scatter plot)。更简单的
  • 果冻果冻(又称啫喱、明胶点心、吉利丁点心,英语gelatin dessert,jelly)是一种西方甜食,呈半固体状,由食用明胶加水、糖、果汁制成。市面出售的果冻有已经凝固成形的,也有需要食用者自行
  • 野外灭绝 (EW)野外灭绝(Extinct in the Wild,或缩写为EW)是一种保护现状,当某物种或其亚种,其已知的个体仅存活于圈养的环境、或是其种群需经过野放后才能够回归其历史上存在的地点时,就会被分
  • 大都会区大都会区(Metroplex)的概念来自多个大都会因为邻近而产生互补甚至依存关系,并且在未来可能逐渐融合一个超大型单一都市。例如北京和天津的关系,虽然为不同名的两个城市,但是其
  • 鼠部部,为汉字索引中的部首之一,康熙字典214个部首中的第二百〇八个(十三划的则为第四个)。就繁体和简体中文中,鼠部归于十三划部首。鼠部只以左方为部字。且无其他部首可用者将部首
  • 博尔扎诺-上阿迪杰自治省博尔扎诺-上阿迪杰自治省(意大利语:provincia autonoma di Bolzano – Alto Adige),德语称博岑-南蒂罗尔自治省(德语:Autonome Provinz Bozen – Südtirol),简称上阿迪杰(Alto Adige
  • 阿斯特丽公主国王陛下 王后陛下阿斯特丽公主殿下 芬纳恩夫人阿斯特丽公主(挪威语:Prinsesse Astrid, fru Ferner,1932年2月12日-),挪威公主,是挪威王储奥拉夫(后来的挪威国王奥拉夫五世)和挪威王
  • 亚太旅行协会亚太旅行协会(Pacific Asia Travel Association, PATA)是1952年于美国夏威夷创立的一个非营利组织,其宗旨为促进在亚太地区的观光事业发展,为亚太地区最重要的国际观光组织之一,
  • 未来岁月《未来岁月》(英语:)是一部英国电视连续剧,由英国广播公司、美国HBO、法国Canal+联合制作,于2019年5月14日起在英国英国广播公司一台播出。讲述里昂斯一家在15年内所发生的悲欢离