Quanto è difficile contare il numero di percorsi semplici tra due nodi in un grafico diretto?


29

Esiste un semplice algoritmo polinomiale per decidere se esiste un percorso tra due nodi in un grafico diretto (basta fare un attraversamento grafico di routine con, diciamo, approfondimento prima ricerca).

Tuttavia sembra che, sorprendentemente, il problema diventi molto più difficile se invece di testare l'esistenza vogliamo contare il numero di percorsi.

Se permettiamo ai percorsi di riutilizzare i vertici, esiste una soluzione di programmazione dinamica per trovare il numero di percorsi da s a t con n spigoli. Tuttavia, se consentiamo solo percorsi semplici, che non riutilizzano i vertici, l'unica soluzione che mi viene in mente è l'enumerazione della forza bruta dei percorsi , qualcosa che ha una complessità temporale esponenziale.

Quindi chiedo

  • È difficile contare il numero di percorsi semplici tra due vertici?
  • Se è così, è una specie di NP-completo? (Dico un po 'perché tecnicamente non è un problema decisionale ...)
  • Ci sono altri problemi in P che hanno una versione conteggio difficile come quella? **

A proposito, in realtà conosco la risposta a questa domanda ora, ma sono curioso di sapere che tipo di risposta otterrei se la chiedessi di nuovo la prima volta che l'ho trovata.
hugomg


@Suresh: so come programmare la ricerca della forza bruta. La mia domanda se esiste un algoritmo più efficiente. In ogni caso, questa domanda SO sarebbe più simile e include anche una mia risposta, se sei interessato a spoiler.
hugomg,

Risposte:


18

La classe di complessità più comune associata ai problemi di conteggio è #P . Decidere se esiste un semplice percorso da un dato nodo all'altro è chiaramente in NP. Il conteggio è quindi in #P.

Informazioni sulla completezza NP: anche se non è un problema decisionale, difficilmente si adatterebbe a NP: potrebbe essercipercorsi e il non determinismo non ti aiutano a riguardo (dovresti comunque controllarli tutti)n!

La risposta alle tue due prime due domande è: sì, è difficile, è # P-complete (ref) .

L' articolo di Wikipedia fornisce fatti pertinenti: 1) gli algoritmi probabilistici sono utili per approssimare le funzioni # P complete, e questo è il tipo di algoritmo usato per l'approssimazione nell'articolo precedente. 2) Ci sono altri problemi facili con le versioni di conteggio difficili (# P-complete):

  • trovare (lineare) rispetto al conteggio di tutti i compiti che soddisfano una formula DNF o un'istanza di 2-SAT
  • trovare (lineare) vs. contare gli ordinamenti topologici
  • trovare (O (VE)) rispetto al conteggio della corrispondenza perfetta nei grafici bipartiti

Sai già che se rimuovi il vincolo "percorso semplice" il problema cade in P (bene devi limitare la lunghezza dei percorsi con un polinomio delle dimensioni del grafico o dare il limite in unario)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.