У нас есть сетки. У нас есть набор прямоугольников на этой сетке, каждый прямоугольник может быть представлен как двоичная матрица -by- . Мы хотим накрыть сетку этими прямоугольниками.N 1 N 2 R
Является ли версия решения этого набора проблем NP-полной?
- Ввод: коллекция прямоугольников на сетке (размер ввода: ) иN 1 N 2 L K ∈ N +
- Вывод: Подмножество с и содержащее для каждой ячейки хотя бы один прямоугольник, покрывающий ее.| S | ≤ K S
Я обнаружил, что одномерный случай ( ) может быть решен за полиномиальное время с помощью динамического программирования: любое оптимальное покрытие будет объединением
- оптимальное покрытие для некоторой подзадачи покрытия первых ячеек .
- одномерный прямоугольник, то есть интервал, охватывающий оставшиеся ячеек.
Однако я не думаю, что DP может работать для двумерной задачи: для одномерной задачи вам нужно решить подзадач, но для 2D у вас есть \ binom {N_1 + N_2} {N_2} подзадач (количество северо-восточной решетки). дорожки на сетке).( N 1 + N 2
Я думаю, что проблема может быть NP, но я не уверен (хотя это кажется сложнее, чем P), и мне не удалось найти полиномиальное сокращение от NP-полной задачи (3-SAT, Vertex Cover, ...)
Любая помощь или подсказка приветствуется.
|=
=|
Ответы:
Благодаря подсказке j_random_hacker, я нашел решение, чтобы уменьшить покрытие вершин для решения Grid:
Мы делаем по | V | сетка из 3х3 блоков, т.е. 3 | E | по 3 | V | сетка с вершинами, упорядоченными в виде столбцов { v 1 , … , v N 1 }, и ребрами, упорядоченными в виде строк { e 1 , … , e N 2 } . На этой сетке мы построим прямоугольники (рисунок ниже поможет понять, какие прямоугольники используются)| Е| | В| 3 | Е| 3 | В| { V1, … , VN1} { е1, … , ЕN2}
Теперь для каждого ребра мы строим прямоугольники типа 4, между конечными блоками у нас есть два прямоугольника для второй строки:
Итак, теперь, чтобы покрыть сетку:
Чтобы покрыть для данного ребра часть между концевыми блоками ребер, которая еще не покрыта (второй и третий ряды ряда блоков), мы можем использовать либо:
Обратите внимание, что в любом случае нам нужно как минимум два прямоугольника типа 4.
источник