加权,无向邻接列表:O(n)中单周期的最大加权边

时间:2015-03-30 17:02:13

标签: algorithm graph depth-first-search

所以这个问题涉及一个基于AdjacencyList的图G.这个图有n个边和n个顶点。它也有一个,只有一个周期。什么是最快的算法(就大O符号而言)找到周期中最大权重的边缘?

我很确定这可以在O(n)中完成,但我很难弄清楚具体细节,因为你必须验证你的结果是在一个循环中。我想通过这个问题的原始方式是一个简单的深度优先搜索,你可以用它在O(n)时间内找到整个图形中的最大加权边缘(因为V + E = 2n)。然后,您可以执行另一次搜索以验证此边缘是否在循环中。如果是,则在O(n)中得到答案,但如果不是,则需要O(n ^ 2)时间。这绝对不是理想的,我正在寻找O(n)解决方案。

1 个答案:

答案 0 :(得分:0)

您可以在DFS中返回在循环中找到哪个节点,然后返回在DFS树中将每个节点标记为循环的一部分(直到找到的节点本身)。像这样:

DFS(v):
    mark v as visited
    for edges (v, w) in E:
        if w is not visited:
             last_node = DFS(w)
             if last_node != -1:
                  test (v, w) as maximum edge
                  if last_node != v:
                      return last_node
                  else:
                      return -1       
        else:
             test (v, w) as maximum edge
             return w  
    return -1