我有点困惑如何确定图算法的运行时间。也就是说,使用顶点数(n)和边数(m)来估计运行时间。请问是否有人能够解释我的逻辑错误,并且讲解如何正确地分析这些内容以及找到运行时间?
以下是一个图算法的示例:
该图算法的运行时间以BigO符号表示为O(m+n)。现在我有一个问题:仅仅快速地对该算法进行精神分析,为什么运行时间不是O(n*m)呢?外部循环运行n次,换句话说,每个顶点运行一次。现在内部循环运行m次,即每条边运行一次。因此,我认为两个循环加起来将运行n*m次。
最后一个不那么简单的问题是,如果输入以邻接矩阵而不是邻接列表的形式给出,算法的运行时间会如何改变?
我在网上找不到好的资源来解决这个问题,没有明确简明的例子涵盖这个主题。如果有人能帮我创建一个,我会非常感激 :)
以下是一个图算法的示例:
//input: Directed graph G represented by adjacency lists.
Func1(G) {
k = 0;
foreach vertex vi in V(G) do
foreach directed edge (vi, vj) incident on vi do
k=k+1; //just some constant time operation
end
end
return(k);
}
该图算法的运行时间以BigO符号表示为O(m+n)。现在我有一个问题:仅仅快速地对该算法进行精神分析,为什么运行时间不是O(n*m)呢?外部循环运行n次,换句话说,每个顶点运行一次。现在内部循环运行m次,即每条边运行一次。因此,我认为两个循环加起来将运行n*m次。
最后一个不那么简单的问题是,如果输入以邻接矩阵而不是邻接列表的形式给出,算法的运行时间会如何改变?
我在网上找不到好的资源来解决这个问题,没有明确简明的例子涵盖这个主题。如果有人能帮我创建一个,我会非常感激 :)