Kosaraju算法

✍ dations ◷ 2025-09-07 06:50:56 #图算法

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

相关

  • 华盛顿州华盛顿州(英语:State of Washington),简称华州,是一个位于美国西北太平洋沿岸的州,北接加拿大不列颠哥伦比亚省,南接俄勒冈州,东临爱达荷州,西邻太平洋。为纪念美国首任总统,乔治·华
  • 病毒粒子一个位于宿主细胞之外的独立、功能完全的病毒颗粒一些病毒拥有的包裹病毒体的脂肪泡一段DNA或RNA。如果把核苷酸比作字的话,那么基因就是由核苷酸写成的句子。基因会指导病毒
  • 台湾小吃台湾小吃是一类富有台湾生活与文化特色的街头小吃的总称,与澎湖小吃、马祖小吃以及金门小吃共筑中华民国四大地区的美食文化。台湾小吃的特色是就地取材。因为台湾岛四面环海
  • 政府失灵政府失灵(英文:Government failure),有时也成为非市场失灵(non-market failure),是一种由政府干预而引发的一系列非效率性资源分配的公共状态,其作用往往会恶化其市场失灵的结果。在
  • 繁缕属繁缕属(学名:)是石竹科下的一个属,为草本植物。该属共有120种,分布于全球。
  • 程宏程宏(1430年-?),字毅夫,直隶徽州府祁门县人,明朝政治人物。进士出身。应天府乡试第二名。成化二年(1466年),参加丙戌科会试,得贡士第七十二名。殿试登进士第三甲第九十七名。曾祖父程名
  • 西浦智仁西浦智仁(日语:西浦 智仁,罗马字:Nishiura Tomohito),日本作曲家,音效总监,主要创作电子游戏音乐。他主要为Level-5开发的电子游戏创作音乐。他已为Level-5创作多部游戏音乐,包括雷顿
  • 2011年国家联盟分区赛2011年国家联盟分区赛是国家联盟季后赛第一轮,采用的是5战3胜制,胜出的2支球队将会得到国联冠军赛的资格。3支分区冠军球队和1支外卡球队将参与此次赛事。本赛事在2011年10月1
  • 马息岭马息岭(朝鲜语:마식령)位于朝鲜江原道文川市与法洞郡之间。海拔768米。因山脉高耸,旅途劳顿,途经的马匹需要休息,故而得名。它是连接元山和平壤等城市的通道之一。山岭中植被丰茂,
  • 方圆方圆可以指: