2010-11-29 6 views
4

Étant donné le graphique non pondéré orienté et le problème est de trouver un chemin simple de longueur maximale (le sommet de début et le sommet de fin ne sont pas fixes). Il peut évidemment être résolu en O (n^2 * 2^n) mais j'ai entendu qu'il existe un algorithme O (n * 2^n) que je ne connais pas. Alors comment le résoudre en O (n * 2^n)? // n = | V |Problème de chemin maximal

+0

Wikipedia dit pour un graphe acyclique ce problème est O (| V | + | E |). Votre graphique a-t-il des cycles? (ref: http://en.wikipedia.org/wiki/Longest_path_problem) – jtdubs

+0

@jtdubs ce commentaire n'est-il pas la bonne réponse? – bbaja42

+0

également, si le graphique a des cycles; la solution pour la longueur maximum est infitinty: D – bbaja42

Répondre

5

Si votre problème est vraiment le Longest Path Problem sur un DAG, l'algorithme de Wikipedia est ci-dessous et fonctionne en O (| V | + | E |):

algorithm dag-longest-path is 
    input: 
     Directed acyclic graph G 
    output: 
     Length of the longest path 

    length_to = array with |V(G)| elements of type int with default value 0 

    for each vertex v in topOrder(G) do 
     for each edge (v, w) in E(G) do 
      if length_to[w] <= length_to[v] + weight(G,(v,w)) then 
       length_to[w] = length_to[v] + weight(G, (v,w)) 

    return max(length_to[v] for v in V(G)) 
+1

cela donne juste la longueur du chemin; wiki a plus d'info comment obtenir le chemin réel – bbaja42

+0

@ bbaja42: oops. bonne prise. – jtdubs

+0

Le graphique peut avoir des cycles. (sinon c'est un problème trivial;)) – MikleB