Un approccio per risolvere questo problema sarebbe quello di utilizzare la programmazione lineare intera (ILP). Affrontiamo la versione decisionale del problema: dato , c'è un modo per contrarre vertici dello stesso colore per ottenere un DAG di dimensioni ≤ k ?k≤k
Questo può essere espresso come un'istanza ILP usando tecniche standard. Ci viene dato il colore di ciascun vertice nel grafico originale. Suggerisco di etichettare ogni vertice con un'etichetta in ; tutti i vertici con la stessa etichetta e lo stesso colore verranno contratti. Quindi, il problema decisionale diventa: esiste un'etichettatura, tale che contrarre tutti i vertici dello stesso colore dello stesso colore produce un DAG?{1,2,…,k}
Per esprimerlo come un programma lineare intero, introdurre una variabile intera per ciascun vertice v , per rappresentare l'etichetta sul vertice v . Aggiungi la disuguaglianza 1 ≤ ℓ v ≤ k .ℓvvv1≤ℓv≤k
Il passaggio successivo consiste nell'esprimere il requisito secondo cui il grafico contrattato deve essere un DAG. Si noti che se esiste un'etichettatura del modulo sopra elencato, senza perdita di generalità esiste una tale etichettatura in cui le etichette inducono un ordinamento topologico sul grafico contratto (cioè, se precede w nel grafico contratto, quindi l'etichetta v è più piccolo dell'etichetta di w ). Quindi, per ogni bordo v → w nel grafico originale, aggiungeremo il vincolo che v e w abbiano la stessa etichetta e lo stesso colore, altrimenti l'etichetta v è più piccola dell'etichetta w . In particolare, per ciascun bordo vvwvwv→wvwvw nel grafico iniziale in cui v , w ha lo stesso colore, aggiungere la disuguaglianza ℓ v ≤ ℓ w . Per ogni bordo v → w dove v , w hanno colori diversi, aggiungere la disuguaglianza ℓ v < ℓ w .v→wv,wℓv≤ℓwv→wv,wℓv<ℓw
Ora vedi se esiste una soluzione fattibile per questo programma lineare intero. Ci sarà una soluzione fattibile se e solo se l'etichettatura è nella forma desiderata (cioè, contrarre tutti i vertici dello stesso colore dello stesso colore produce un DAG). In altre parole, ci sarà una soluzione fattibile se e solo se c'è un modo per contrarre il grafico originale su un DAG di dimensioni . Possiamo usare qualsiasi risolutore di programmazione lineare intero; se il risolutore ILP ci dà una risposta, abbiamo una risposta al problema decisionale originale.≤k
Naturalmente, questo non è garantito per il completamento in tempo polinomiale. Non ci sono garanzie Tuttavia, i solutori di ILP sono diventati piuttosto buoni. Mi aspetto che, per un grafico di dimensioni ragionevoli, si abbia una buona possibilità che un risolutore di ILP sia in grado di risolvere questo problema in un ragionevole lasso di tempo.
È anche possibile codificarlo come istanza SAT e utilizzare un solutore SAT. Non so se sarebbe più efficace. La versione ILP è probabilmente più facile da pensare, però.
(Spero che sia giusto. Non ho controllato attentamente ogni dettaglio, quindi per favore ricontrolla il mio ragionamento! Spero di non essere andato storto da qualche parte.)
Aggiornamento (10/21): sembra che gli ILP di questo modulo possano essere risolti in tempo lineare, elaborando il DAG in ordine topologicamente ordinato e tenendo traccia del limite inferiore sull'etichetta per ciascun vertice. Questo mi fa sospettare della mia soluzione: ho fatto un errore da qualche parte?