Este problema, que llamaré CO para ordenar columnas, es NP-hard . Aquí hay una reducción del problema NP-hard Vertex Cover (VC):
Formas de decisión de problemas de VC y CO
Deje que la instancia de VC de entrada sea (V,E,k) . Representa la pregunta: "Dada la gráfica (V,E) , ¿es posible elegir un conjunto de a lo sumo k vértices de V modo que cada borde en E incida en al menos un vértice elegido?" Construiremos una instancia (A,k′) de CO que represente la pregunta: "Dada la matriz A con elementos en {−1,0,1}, ¿es posible permutar las columnas de A modo que un 1 aparezca antes de un -1 en al menos k′ filas? "Estos dos problemas se expresan en forma de problema de decisión , por lo que la respuesta a cada uno es SÍ o NO: hablando formalmente , esta forma de problema es NP-complete (o no). No es demasiado difícil ver que la forma de problema de optimización más natural establecida en la pregunta del OP es más o menos equivalente en términos de complejidad: búsqueda binaria en el umbral El parámetro se puede utilizar para resolver el problema de optimización utilizando un solucionador de problemas de decisión, mientras que una sola invocación de un solucionador de problemas de optimización, seguida de una única comparación, es suficiente para resolver el problema de decisión.
Construir una instancia de CO a partir de una instancia de VC
Deje n=|V|y m=|E|. Construiremos una matriz A con (n+1)m+n filas y n+1 columnas. Las filas superiores (n+1)m estarán formadas por m bloques de n+1 filas cada una, con cada bloque representando un borde que necesita ser cubierto . El fondo n las filas contienen "indicadores" de vértice, lo que hará que una columna (correspondiente a un vértice) incurra en un costo fijo si se incluye en el lado izquierdo de la solución de CO (correspondiente a un vértice que se incluye en la cubierta del vértice de la Solución de VC).
Para cada vértice vi , cree una columna en la que:
- entre las filas superiores (n+1)m , el bloque j -ésimo de n+1 filas contiene un +1 cuando el borde ej incide en vi , y 0 en caso contrario, y
- las n filas inferiores son todas 0 excepto la i -ésima, que es -1.
Cree una columna "cerca" más que consista en (n+1)m copias de -1, seguido de n copias de +1.
Finalmente, establezca el umbral k′ para la instancia de CO construida: (n+1)m+n−k . En otras palabras, permitimos a lo sumo k filas en las que aparece un -1 antes de un +1. Llamemos a este número de filas infractoras el "costo" de una solución de CO.
Prueba
La correspondencia entre una solución para la instancia de CO y un conjunto de vértices en la instancia de VC original es: cada columna a la izquierda de la cerca corresponde a un vértice que está en el conjunto, y cada columna a la derecha de la cerca corresponde a un vértice que no lo es.
n
kk
kk
k(n+1)m(n+1)uvAn+1n+1k≤n<n+1
m(n+1)m(n+1)mnkkk
Finalmente, está claro que la instancia de CO puede construirse en tiempo polinómico a partir de la instancia de VC, lo que significa que si existiera un algoritmo de tiempo polinomial para resolver CO, cualquier instancia de VC también podría resolverse en tiempo polinomial construyendo primero una instancia de CO como se describe arriba y luego resolverlo. Como VC es NP-hard, CO también lo es.