利用广度优先搜索或深度优先搜索,在线性时间内(根据图的顶点和边的个数)计算图的连通分量是很简单的。在任何一种情况下,从某个特定顶点v开始的搜索都将在返回之前找到包含v(不再包含)的整个连通组件。若要找到图的所有连通分量,请循环遍历图的顶点,每当循环到达以前发现的连通分量中尚未包含的顶点时,就开始新的广度优先或深度优先搜索。
这个操作的运行时间是多少?我遇到过一些消息来源,说连接的组件是在O(n)
时间内完成的。然而,据我所知,在最坏的情况下,每个顶点都是它自己的连通分量,这个算法将不得不执行n个DFS/BFS操作,每个操作本身都是O(n)
时间。因此,它的运行时不应该是O(n^2)
吗?
首先,使用DFS或BFS遍历单个连通组件G(V,E)
具有V
顶点和E
边具有O(V+E)
复杂性。
线性时间(用图的顶点和边的个数表示)
假设图G(V,E)
有K
连通的组件。
G(V, E) = G1(V1, E1) ∪ G2(V2, E2) ∪ ... ∪ Gk(Vk, Ek)
O(|V1|+|E1|) + O(|V2|+|E2|) + ... + O(|Vk|+|Ek|) + O(|V|)
|V| = |V1| + |V2| + ... + |Vk|
|E| = |E1| + |E2| + ... + |Ek|
O(|V1|+|E1|) + O(|V2|+|E2|) + ... + O(|Vk|+|Ek|) + O(|V|) =
O(|V1|+|V2|+...+|Vk| + |E1|+|E2|+...+|Ek|) + O(|V|) =
O(|V|+|E|) + O(|V|) =
O(|V|+|E|)
我被要求为这个问题编写一个算法:给我们一个数组A,我们想知道数组中是否有两个元素U和L,U和L=K 我是这样写我的算法的: 但问题是,这个算法的运行时间是多少?它是O(nlogn)吗?如果是,为什么?如果不是,我如何在O(nlogn)中实现它?
本文向大家介绍Python计算程序运行时间的方法,包括了Python计算程序运行时间的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python计算程序运行时间的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。
我在读算法介绍。在22.5强连接组件中,算法强连接组件(G)定义为: 调用DFS(G)计算每个顶点u的完成时间u.f 计算G转置 调用DFS(G转置),但在DFS的主循环中,按U.F递减的顺序考虑顶点(如第1行所计算) 将第3行中形成的深度优先森林中每棵树的顶点输出为一个单独的强连通分量 如果我把alogrithm改为只使用G,而不计算G转置。还要考虑按U.F增加的顺序(拓扑排序的逆序)排列的顶点
如果您不知道SCC算法是如何工作的,请阅读本文:https://www.hackerearth.com/practice/algorithms/graphs/strong-connected-components/tutorial/(这是我能找到的最好的文章)。 在找到每个节点的完成时间后,将原图反转,从时间最高的节点开始运行DFS。如果我们从原始图中最小的节点开始运行DFS呢?为什么不管用?
可能的重复: 如何测量函数的运行时间? 我有一种I/O计时方法,它将数据从一个位置复制到另一个位置。计算执行时间的最佳和最真实的方法是什么<代码>线程<代码>定时器<代码>秒表?还有其他解决方案吗?我想要最准确的,尽可能简短的。
问题内容: 我们在MySQL中使用innoDB的下表如下: 我们假装产生的Var4每行具有NULL变量数: 我尝试失败: 有什么建议? 问题答案: 这是一种方法: MySQL将布尔值视为整数,其中true为true ,false为false 。您可以将它们加起来以获得总数。 作为更新: 请注意,MySQL不支持。那更多的是SQL Server功能。但这不是ANSI标准,因此通常最好使用。