Voglio che networkx trovi il percorso assoluto più lungo nel mio grafico aciclico diretto, .networkx: trova in modo efficiente il percorso più lungo nel digramma
Conosco Bellman-Ford, quindi ho annullato le lunghezze dei grafici. Il problema: bellman_ford() di networkx richiede un nodo di origine. Voglio trovare il assoluto percorso più lungo (o il percorso più breve dopo la negazione), non il percorso più lungo da un determinato nodo.
Ovviamente, potrei eseguire bellman_ford() su ciascun nodo nel grafico e ordinamento , ma esiste un metodo più efficiente?
Da quello che ho letto (per esempio, http://en.wikipedia.org/wiki/Longest_path_problem) Mi rendo conto che ci realtà non può essere un metodo più efficiente, ma chiedevo se qualcuno avesse tutte le idee (e/o aveva dimostrato P = NP (ghigno)).
MODIFICA: tutte le lunghezze del bordo nel mio grafico sono +1 (o -1 dopo la negazione), quindi funzionerebbe anche un metodo che visita semplicemente la maggior parte dei nodi. In generale, non sarà possibile visitare TUTTI i nodi, naturalmente.
MODIFICA: OK, ho appena realizzato che potrei aggiungere un nodo aggiuntivo che si connette semplicemente a tutti gli altri nodi nel grafico e quindi eseguire bellman_ford da quel nodo. Qualche altro suggerimento?
Questo non è compito. Sicuramente, networkx implementerebbe questo algoritmo?Ho provato il tuo link e sembra che richieda un login? – barrycarter
Ho aggiornato con il codice. Hai ragione - quel link è cattivo. Ci dovrebbero essere altri riferimenti - forse possiamo trovarne uno buono. – Aric
Si scopre che il mio grafico è già ordinato topologicamente e che posso risolvere il problema senza utilizzare networkx (tenendo traccia del percorso in ingresso più lungo per nodo e del nodo precedente per ciascun percorso, come indicato). Non posso credere che sia così facile! – barrycarter