Ce problème, que j'appellerai CO pour la commande de colonnes, est NP-difficile . Voici une réduction du problème NP-hard Vertex Cover (VC):
Formes de problème de décision de VC et CO
Soit l'instance VC d'entrée ( V, E, k ) . Il représente la question: "Étant donné le graphique ( V, E) , est-il possible de choisir un ensemble d'au plus k sommets dans V telle sorte que chaque arête dans E soit incidente sur au moins un sommet choisi?" Nous allons construire une instance ( A , k′) de CO qui représente la question: "Étant donné la matrice UNE avec des éléments dans { - 1 , 0 , 1 }, Est - il possible de permuter les colonnes de UNE telle que 1 apparaît avant -1 sur au moins k′ lignes « Ces deux problèmes sont énoncés dans? Problème de décision sous forme, par laquelle la réponse à chacune est OUI ou NON: formellement , c'est cette forme de problème qui est NP-complet (ou pas) .Il n'est pas trop difficile de voir que la forme de problème d'optimisation la plus naturelle énoncée dans la question du PO est à peu près équivalente en termes de complexité: recherche binaire sur le seuil Le paramètre peut être utilisé pour résoudre le problème d'optimisation à l'aide d'un résolveur de problème de décision, tandis qu'une seule invocation d'un résolveur de problème d'optimisation, suivie d'une seule comparaison, suffit pour résoudre le problème de décision.
Construire une instance de CO à partir d'une instance de VC
Soit n = | V|et m = | E|. Nous allons construire une matrice UNE avec ( n + 1 ) m + n lignes et n + 1 colonnes. Les m rangées supérieures ( n + 1 ) m seront formées de m blocs de n + 1 rangées chacun, chaque bloc représentant un bord à recouvrir . Le fond n les lignes contiennent des "drapeaux" de sommet, ce qui entraînera un coût fixe pour une colonne (correspondant à un sommet) si elle est incluse dans le côté gauche de la solution de CO (correspondant à un sommet inclus dans la couverture de sommet du Solution VC).
Pour chaque sommet vje , créez une colonne dans laquelle:
- entre la partie supérieure ( n + 1 ) m rangées, le j bloc -ième de n+1 lignes contiennent tous un 1 lorsque arête ej est incidente sur vi , et 0 sinon, et
- les n lignes du bas sont toutes à 0 sauf pour le i -ième, qui est -1.
Créez une autre colonne "clôture" qui se compose de (n+1)m copies de -1, suivies de n copies de +1.
Enfin, fixons le seuil k′ pour l'instance CO construite: (n+1)m+n−k . En d'autres termes, nous autorisons au plus k lignes dans lesquelles un -1 apparaît avant un +1. Appelons ce nombre de lignes violées le «coût» d'une solution de CO.
Preuve
La correspondance entre une solution à l'instance CO et un ensemble de sommets dans l'instance VC d'origine est la suivante: chaque colonne à gauche de la clôture correspond à un sommet qui se trouve dans l'ensemble et chaque colonne à droite de la clôture correspond à un sommet qui ne l'est pas.
Intuitivement, les -1 en haut de la colonne "clôture" forcent la sélection d'un sous-ensemble de colonnes à placer à sa gauche qui contiennent ensemble + 1 dans toutes ces positions - correspondant à un sous-ensemble de sommets qui sont incidents sur chaque bord. Chacune de ces colonnes qui apparaît à gauche de la "clôture" a un -1 sur une ligne distincte quelque part dans les n lignes du bas , entraînant un coût de 1; les +1 dans le bas de la "clôture" garantissent que toutes les colonnes placées à sa droite n'encourent pas de tels frais.
Clairement, une solution VC utilisant au plus k sommets donne une solution à l'instance de CO construite avec un coût au plus k : ordonnez simplement les colonnes correspondant aux sommets dans la couverture de sommets arbitrairement, suivies de la colonne de clôture, puis de toutes les colonnes restantes dans n'importe quel ordre .
Reste à montrer qu'une solution à l'instance CO avec un coût au plus k correspond à une couverture de vertex avec au plus k sommets.
Supposons au contraire qu'il existe une solution à l'instance CO avec un coût au plus k qui laisse une ligne dans les rangées supérieures (n+1)m avec un -1 avant un +1. Cette ligne appartient à un bloc de (n+1) lignes correspondant à un bord particulier uv . Chaque ligne de ce bloc dans l'instance d'origine A est identique par construction; permuter les colonnes peut modifier ces lignes, mais n'affecte pas le fait qu'elles sont identiques. Ainsi, chacune de ces n+1 lignes identiques a un -1 avant un +1 dans la solution, ce qui implique un coût d'au moinsn+1 . Maisk≤n<n+1 : contradiction.
Étant donné que chacun des m blocs de rangées dans les rangées supérieures (n+1)m a un +1 avant un -1, chacun des bords correspondants est couvert par un sommet correspondant à une colonne à gauche de la clôture: c'est-à-dire , ce sous-ensemble de sommets constitue une couverture de sommets. Puisqu'aucune des m (n+1)m rangées n'a un -1 avant un +1, le seul endroit où le coût peut s'accumuler dans la solution est dans les n rangées, des colonnes placées à gauche de la clôture. Chacune de ces colonnes a coûté exactement 1, donc étant donné que le coût est d'au plus k , il doit y avoir au plus kces colonnes, et donc au plus k sommets dans la couverture.
Enfin, il est clair que l'instance CO peut être construite en temps polynomial à partir de l'instance VC, ce qui signifie que si un algorithme polynomial existait pour résoudre le CO, toute instance VC pourrait également être résolue en temps polynomial en construisant d'abord une instance CO comme décrit ci-dessus, puis le résoudre. Puisque VC est NP-dur, le CO l'est aussi.