La complessità di questo problema di percorso è nota?


9

Istanza: un grafico non orientato con due vertici distinti e un numero intero .s t k 0Gstk0

Domanda: Fa esiste una percorso nel , in modo tale che le interseca percorso al massimo triangoli? (Per questo problema si dice che un tracciato interseca un triangolo se il tracciato contiene almeno un bordo dal triangolo.)G kstGk


3
È sbagliato? Assegniamo il peso a ciascun bordo e quindi troviamo il percorso della st più breve. Il peso di ciascun bordo è il numero di triangoli che includono quel bordo. Il peso di questo percorso non è uguale al numero di triangoli che incontra ma è un percorso a st con un numero minimo di triangoli. (Il possibile problema è che possiamo contare uno o più triangoli due volte perché visitiamo due bordi di quel triangolo, ma il motivo per cui li scegliamo è che sono più piccoli che attraversare l'altro bordo del triangolo e inoltre abbiamo dei semplici percorsi due bordi di un triangolo sono uno accanto all'altro).
Saeed,

3
@Saeed Non capisco: qual è l'argomento che l'eccesso di conto non ti fa scegliere un percorso non ottimale? Il tuo algoritmo è sicuramente un'approssimazione 2. Forse una soluzione è aggiungere un bordo per ogni percorso con peso uguale al numero di triangoli contenenti sia cheu v w ( u , v ) ( v , w )(u,w)uvw(u,v)(v,w)
Sasho Nikolov

2
Bene, possiamo andare da u a v e quindi scegliamo x (qualche altro nodo non nel triangolo uvw) quindi andiamo a w che è sbagliato (il mio errore è stato che mi sono perso tra vertici che non sono nel triangolo uvw) , ma con la tua correzione è corretto perché per ogni percorso di st con triangoli nel grafico originale c'è un percorso di peso nel grafico ausiliario. Inoltre, il peso del percorso nel nuovo grafico è sempre almeno pari al numero di triangoli nel percorso corrispondente nel grafico originale. ααα
Saeed,

1
Ci ripenso un po 'di più, anche dopo la correzione non funziona. Scusa Andras se ho portato una speranza sbagliata. Per capire perché fix è sbagliato, considera i vertici in un percorso e abbiamo un triangolo e e supponiamo che i bordi e siano incidenti con troppi triangoli . Se utilizziamo un nuovo bordo artificiale che collega contiamo il triangolo due volte. PS: Il mio ragionamento era di nuovo sbagliato perché ho pensato che semplicemente sostituire e con il nuovo (multi) bordoP u , v , w v , w , x v x u w u - > w v , w , x u - > v v - > w u - > wu>v>w>xPu,v,wv,w,xvxuwu>wv,w,xu>vv>wu>w. Se aggiungiamo quei bordi artificiali per ogni percorso funzionerà in modo banale. Sembra che sia NPC.
Saeed,

1
La mia idea non funzionerà - dovrei mantenere più set e penso che ce ne saranno troppi.
reinierpost,

Risposte:


1

Supponiamo che in non ci siano spigoli .G

Per ogni fronte tra nodo e v j in G , sia E [ i , j ] = 1 , ed E [ i , j ] = 0 se non c'è bordo. Calcola n × n matrice C [ i , j ] = n k = 1 E [ i , k ] E [ k , jvivjGE[i,j]=1E[i,j]=0n×n , che fornisce il numero di percorsi a due hop tra ciascuna coppia di nodi v i e v j . Quindi per il bordo tra v i e v j nelcalcolo G D [ i , j ] = E [ i , j ] C [ i , j ] altrimenti imposta D [ i , j ] = C[i,j]=k=1nE[i,k]E[k,j]vivjvivjGD[i,j]=E[i,j]C[i,j]D[i,j]=, che indica il numero di triangoli di cui fa parte il bordo (o l'infinito se non c'è bordo). La moltiplicazione della matrice necessaria per calcolare i costi O ( n 3 ) (potrebbe essere calcolata più velocemente a seconda della scarsità di G ).CO(n3)G

n×nAA DA[i,j]=min(D[i,j],mink(D[i,k]+D[k,j]E[i,j]))AD

Ora calcola solo il percorso più breve tra e in su un nuovo grafico di cui è la matrice di adiacenza (ponderata) usando Dijkstra (poiché tutti i contorni sono positivi) cioè e determina se , dove è la chiusura sopra il semiring tropicale (che dà la matrice della distanza).v j G A A [ i , j ] k A vivjGAA[i,j]kA

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.