Ця проблема, яку я називатиму CO для замовлення стовпців, є важкою для NP . Ось зменшення від NP-жорсткої проблеми Vertex Cover (VC) до нього:
Форми задач рішення ВК та СО
Нехай вхідний екземпляр VC буде (V,E,k). Він являє собою запитання: "Дано графік(V,E), чи можна вибрати набір не більше k вершини від V такий, що кожен край в E інцидент хоча б на одній обраній вершині? "Ми побудуємо екземпляр (A,k′) CO, що представляє питання: "З огляду на матрицю A з елементами в {−1,0,1}, чи можна переставляти стовпці A таким, що 1 з'являється перед -1 принаймні k′рядки? "Ці дві проблеми викладені у формі проблеми рішення , згідно з якою відповідь на кожну - ТАК чи НІ: формально кажучи, саме ця форма проблеми є NP-повною (або ні). Це не так складно бачимо, що більш природна форма проблеми оптимізації, викладена у запитанні ОП, є приблизно еквівалентною за рівнем складності: двійковий пошук порогового параметра може бути використаний для вирішення проблеми оптимізації за допомогою рішення рішення проблеми, в той час як один виклик вирішення проблеми оптимізації. з подальшим єдиним порівнянням, достатньо для вирішення проблеми рішення.
Побудова екземпляра CO з екземпляра VC
Дозволяє n = | V| і m = | Е|. Ми побудуємо матрицюА з ( n + 1 ) m + n рядки та n + 1стовпчики. Топ( n + 1 ) m рядки будуть утворені з м блоки n + 1рядки кожен, кожен блок представляє край, який потрібно покрити . Знизун рядки містять вершини "прапори", що призведе до того, що стовпець (відповідний вершині) понесе фіксовану вартість, якщо вона включена в ліву частину рішення СО (відповідна вершині, що міститься у кришці вершини VC розчин).
Для кожної вершини vi, створіть стовпчик, у якому:
- серед верхів ( n + 1 ) m рядки, то j-го блоку n + 1 всі рядки містять +1, коли край еj інцидент на vi, і 0 в іншому випадку, і
- знизу н рядки - це 0, за винятком i-та, що становить -1.
Створіть ще один стовпчик "паркан", який складається з ( n + 1 ) m копії -1, далі н копії +1.
Нарешті, встановіть поріг к' для побудованого екземпляра CO: ( n + 1 ) m + n - k. Іншими словами, ми дозволяємо максимумкрядки, у яких -1 відображається перед +1. Назвемо цю кількість порушень рядків «вартістю» рішення СО.
Доказ
Відповідність між рішенням для екземпляра CO та набором вершин у вихідному екземплярі VC така: Кожна колонка зліва від огорожі відповідає вершині, яка знаходиться у наборі, і кожному стовпцю праворуч від огорожі відповідає вершина, якої немає.
Інтуїтивно, -1-го місця у верхній частині стовпця "огорожа" примушують вибір підмножини стовпців, які розміщуються зліва, які разом містять +1 у всіх цих позиціях - відповідно до підмножини вершин, які трапляються на кожен край. Кожен із цих стовпців, що з’являється зліва від «огорожі», має на різному рядку десь внизу -1нрядки, несучи вартість 1; + 1 в нижній частині "огорожі" гарантують, що всі стовпці, розміщені праворуч, не несуть таких витрат.
Очевидно, що VC рішення використовує не більше к вершини дають рішення побудованому екземпляру CO із максимальною вартістю к: Просто впорядкуйте стовпчики, що відповідають вершинам, у кришці вершин довільно, за ними стовпець огорожі, а потім усі стовпці, що залишилися в будь-якому порядку.
Залишається показати, що рішення для екземпляру CO має максимум витрат к відповідає кришці вершини з не більше к вершин.
Припустимо, протилежне, що існує рішення для екземпляру CO, що має максимум витрат к який залишає ряд рядків у верхній частині ( n + 1 ) mрядки з -1 перед +1. Цей рядок належить до блоку( n + 1 ) рядки, що відповідають певному краю u v. Кожен рядок у цьому блоці у вихідному екземпляріАідентичний за конструкцією; permuting стовпці можуть змінювати ці рядки, але це не впливає на те, що вони однакові. Таким чином, кожен із нихn + 1 однакові рядки мають -1 у порівнянні з +1 перед рішенням, що означає принаймні вартість n + 1. Алеk ≤ n < n + 1: протиріччя.
Оскільки кожен із м блоки рядків у верхній частині ( n + 1 ) mрядки мають +1 перед -1, кожен з відповідних країв прикритий вершиною, що відповідає стовпчику зліва від огорожі: тобто ця підмножина вершин являє собою кришку вершини. Оскільки ніхто з верхів( n + 1 ) m рядки мають -1 перед +1, єдине місце, де може нараховуватися вартість у розчині, знаходиться внизу нряди, від стовпців, розміщених зліва від паркану. Кожен такий стовпець коштував рівно 1, тому враховуючи, що вартість становить максимумк, повинно бути не більше к такі стовпці, а значить, максимум к вершини в обкладинці.
Нарешті, зрозуміло, що екземпляр CO може бути побудований у поліномійному часі з екземпляра VC, це означає, що якщо алгоритм поліноміального часу існував для вирішення CO, будь-який екземпляр VC також міг бути вирішений у поліноміальний час, спочатку побудувавши екземпляр CO, як описано вище, а потім вирішити. Оскільки VC є NP-жорстким, CO теж.