我有一个算法来查找有向图的边缘,从顶点 u 到任何其他具有O(| V | + | E |)时间复杂度的顶点(基于DFS) 。我必须开发一种算法来找到O(| V || E |)中任意两个顶点 u 和 v 之间的边。
您有任何建议或提示可以实现这一目标吗?
如果我为每个顶点重复DFS-Visit,则只有第一次顶点是白色时,以下次调用将不执行任何操作。 如果我在此之前重置颜色,则算法将为O(| V | ^ 2 + | V || E |)。
提前非常感谢你!
答案 0 :(得分:3)
将问题拆分为子问题,您可以使用算法来实现所需的复杂性,如下所示:
复杂性将是:
第1步是O(V+E)
- DFS。
第2步:
i
的复杂性为O(V_i^2 + V_i*E_i)
i
:E_i >= V_i -1
(否则不是。{
已连接,树有|V|-1
个边缘),O(ViEi + Vi^2) = O(ViEi)
。O(V1E1 + V2E2 + ... + VkEk)
。请注意,对于每个i
E_i <= E
,因此复杂性不是
更糟糕的是:
O(V1E + V2E + ... + VkE) = O(E *(V1+V2+ ... + Vk)) = O(VE)
因此,根据需要,总复杂度为O(VE)
。