Questo problema, che chiamerò CO per l'ordinamento delle colonne, è NP-difficile . Ecco una riduzione dal problema NP-difficile Vertex Cover (VC) ad esso:
Forme problematiche decisionali di VC e CO
Lascia che l'istanza VC di input sia (V,E,k) . Rappresenta la domanda: "Dato il grafico (V,E) , è possibile scegliere un insieme di al massimo k vertici da V tale che ogni fronte in E sia incidente su almeno un vertice scelto?" Costruiremo un'istanza (A,k′) di CO che rappresenta la domanda: "Data la matrice A con elementi in , è possibile permutare le colonne di{−1,0,1}Atale che un 1 appare prima di un -1 su almeno righe? "Questi due problemi sono indicati nella forma del problema decisionale , per cui la risposta a ciascuno è SÌ o NO: formalmente parlando, è questa forma di un problema che è NP-complete (o no) Non è troppo difficile vedere che la forma del problema di ottimizzazione più naturale dichiarata nella domanda del PO è approssimativamente equivalente in termini di complessità: la ricerca binaria sul parametro di soglia può essere utilizzata per risolvere il problema di ottimizzazione usando un risolutore di problemi di decisione, mentre una singola invocazione di un risolutore di problemi di ottimizzazione, seguita da un singolo confronto, è sufficiente per risolvere il problema decisionale.k′
Costruire un'istanza di CO da un'istanza di VC
Siae. Costruiremo una matrice conn=|V|m=|E|A( n + 1 ) m m n + 1 n(n+1)m+n righe en+1 colonne. Le primerighe saranno formate dablocchi dirighe ciascuno, con ogni blocco che rappresentaun bordo che deve essere coperto. Il fondo(n+1)mmn+1n le righe contengono "flag" di vertici, che comportano un costo fisso per una colonna (corrispondente a un vertice) se è inclusa nella parte sinistra della soluzione di CO (corrispondente a un vertice che viene incluso nella copertura dei vertici della Soluzione VC).
Per ogni vertice , crea una colonna in cui:vi
- tra le prime righe, il -esimo blocco di righe contiene tutte un +1 quando il bordo è incidente su e 0 altrimenti, e(n+1)mjn+1ejvi
- le righe inferiori sono tutte 0 tranne per l' -esimo, che è -1.ni
Crea un'altra colonna "recinzione" composta da copie di -1, seguita da copie di +1.(n+1)mn
Infine, imposta la soglia per l'istanza CO costruita: . In altre parole, consentiamo al massimo righe in cui appare -1 prima di +1. Chiamiamo questo numero di righe in violazione il "costo" di una soluzione di CO.k′(n+1)m+n−kk
Prova
La corrispondenza tra una soluzione all'istanza CO e un insieme di vertici nell'istanza VC originale è: Ogni colonna a sinistra della recinzione corrisponde a un vertice che si trova nell'insieme e ogni colonna a destra della recinzione corrisponde a un vertice che non lo è.
Intuitivamente, gli -1 nella parte superiore della colonna "fence" obbligano la selezione di un sottoinsieme di colonne da posizionare alla sua sinistra che insieme contengono + 1 in tutte queste posizioni, corrispondenti a un sottoinsieme di vertici che si verificano su ogni bordo. Ognuna di queste colonne che appare a sinistra della "recinzione" ha un -1 su una riga distinta da qualche parte nelle righe inferiori , sostenendo un costo di 1; i +1 nella parte inferiore della "recinzione" assicurano che tutte le colonne poste alla sua destra non comportino tale costo.n
Chiaramente una soluzione VC che utilizza al massimo vertici fornisce una soluzione all'istanza CO costruita con un costo al massimo : ordina arbitrariamente le colonne corrispondenti ai vertici nella copertura del vertice, seguita dalla colonna di recinzione, seguita da tutte le colonne rimanenti in qualsiasi ordine .kk
Resta da dimostrare che una soluzione all'istanza CO con costo al massimo corrisponde a una copertura del vertice con al massimo vertici.kk
Supponiamo al contrario che esista una soluzione all'istanza CO con un costo al massimo che lasci una riga nelle righe superiori con un -1 prima di un +1. Questa riga appartiene a un blocco di righe corrispondenti a un bordo particolare . Ogni riga in questo blocco nell'istanza originalek(n+1)m(n+1)uvA è identico per costruzione; le colonne di permutazione possono modificare queste righe, ma non influiscono sul fatto che sono identiche. Quindi ciascuna di questen+1 righe identiche ha un -1 prima di un +1 nella soluzione, il che implica un costo di almenon+1 . Mak≤n<n+1 : contraddizione.
Poiché ciascuno dei m blocchi di righe nella parte superiore (n+1)m righe ha un +1 prima di un -1, ciascuno dei bordi corrispondenti è coperto da un vertice corrispondente a una colonna a sinistra della recinzione: cioè , questo sottoinsieme di vertici costituisce una copertura del vertice. Poiché nessuna delle righe m superiori (n+1)m ha un -1 prima di un +1, l'unico posto in cui il costo può accumularsi nella soluzione è nelle n righe inferiori , dalle colonne posizionate a sinistra della recinzione. Ciascuna di queste colonne ha un costo esattamente 1, quindi dato che il costo è al massimo k , ci deve essere al massimo ktali colonne, e quindi al massimo k vertici nella copertina.
Infine, è chiaro che l'istanza CO può essere costruita in tempo polinomiale dall'istanza VC, il che significa che se esistesse un algoritmo tempo polinomiale per risolvere CO, qualsiasi istanza VC potrebbe anche essere risolta in tempo polinomiale costruendo prima un'istanza CO come descritto sopra e poi risolverlo. Poiché VC è NP-difficile, anche CO.