Speriamo che un esperto di teoria dei grafi - che non sono - passerà a un certo momento per rispondere a questo. Nel frattempo, ecco alcuni pensieri che si spera possano aiutare.
Approccio ingenuo
Ovviamente, potresti provare a enumerare tutti i possibili percorsi tra tutte le coppie rilevanti di nodi, e quindi cercare di trovare una combinazione valida tramite un metodo comunemente usato (ricerca del grafico su possibili configurazioni / algoritmi di soddisfazione / algoritmi evolutivi).
Tuttavia, sia l'enumerazione che la valutazione di una configurazione sono probabilmente molto costose per i grafici non banali.
approccio semplice
L'approccio più semplice, e sicuramente molto efficiente (in termini di tempo di esecuzione) consiste nel posizionare le cabine di pedaggio vicino ai nodi di inizio / porta accanto o proprio sopra. Poiché devi solo posizionarli prima del o nodo dell'obiettivo iniziale, avrai al massimo 4 * N cabine, dove N è il numero di coppie di nodi. Il 4 viene dal tuo commento che nessun nodo ha più di 4 spigoli.
Puoi tener conto di
- quante coppie di nodi un particolare nodo fa parte e
- quanti nodi ha il nodo
per ridurre il numero di cabine totali. Da lì, potresti essere in grado di ottimizzare ulteriormente (ad esempio utilizzando alcune varianti BFS per verificare se tutti i percorsi finiscono per essere coperti già dai caselli di altri nodi - fino a una certa profondità).
Se questo è abbastanza buono per te, consiglierei sicuramente questo approccio. Ma se lo fosse, probabilmente non lo staresti chiedendo.
(A, B) Separatori
Considera solo il percorso da A
a B
nel grafico sottostante. Chiaramente, una buona soluzione sarebbe i nodi rossi oi nodi blu.
Questisonochiamatiseparatoriminimi(a,b)epossonoesseretrovatiintempopolinomiale.Unaricercamoltorapidaharivelato questo , anche se potrebbero esserci algoritmi migliori.
Una volta che hai tutti i separatori minimi (a, b) di tutte le coppie, è tempo di trovare una buona combinazione che copra tutti i percorsi. Questo dovrebbe essere molto più facile.
Nota che mentre dovresti essere in grado di farlo in tempo polinomiale, potrebbe comunque richiedere molto tempo, a seconda delle dimensioni del grafico e del numero di coppie.
Altri approcci
Non sono stato in grado di sfruttare il fatto che hai al massimo 4 spigoli per nodo, ma sembra il tipo di cosa che consentirebbe un approccio più efficiente.
Inoltre, dovresti esaminare qualsiasi ulteriore informazione strutturale che hai sul grafico. Ad esempio, se si riescono a eliminare sottografi densi che contengono al massimo un nodo rilevante (che fa parte di una coppia), si potrebbe finire con un grafico più semplice che consente di formulare ipotesi forti e, quindi, utilizzare altri approcci. Di nuovo, presumo che tu ne abbia parlato, ma potrebbe valerne un'altra.