Алгоритм минимального набора покрытия: определение размера оптимального покрытия
Проблема Set-Cover состоит из следующего:
Дано:
Набор предметов U.
Набор множеств S, каждый из которых содержит предметы из U.
Найдите множество множеств C такое, что:
- C является подмножеством S.
- Наборы в C содержат все элементы в U. (хотя бы один раз).
При желании можно найти минимальное значение C, т. Е. Где |C| как можно меньше.
Вики-ссылка для решения проблемы с обложкой
Я понимаю, что SCP - NP-Complete, а MSCP (или Optimal SCP) - NP-Hard, и что для его поиска можно использовать один из многих методов (Жадный алгоритм, Генетический алгоритм, Искусственная нейронная сеть).
Тем не менее, я хочу спросить, является ли нахождение размера C (то есть |C|) тоже NP-Hard.
Чтобы показать пример:
Given the following S:
[2 4 6], [1 3 5], [3 2 1], [5 4 6], [2 3 5]
And U being:
1 2 3 4 5 6
A possible Set-Cover (C) is:
[2 4 6], [1 3 5], [2 3 5]
However, the Optimal Set-Cover (C) is:
[3 2 1], [5 4 6]
Thus |C|, the size of the Optimal Set-Cover is 2.
Я хочу найти |C| без решения проблемы. Это NP-Hard? Если нет, как можно найти это?
1 ответ
Если бы вы могли найти размер минимального покрытия в P времени, то также вы могли бы найти минимальное покрытие в P времени.
Для каждого X в S найдите размер минимального покрытия U - X. Если он на единицу меньше размера минимального покрытия U, то вы знаете, что есть минимальное покрытие, содержащее X (примечание: минимальное покрытие U - X никогда не включает в себя множество X). Повторяйте, пока не найдете минимальное покрытие.
Обратите внимание, что размер покрытия не больше |U|, и для каждой итерации требуется |S| Следует рассмотреть X, так что общая процедура - это P-time, если у вас есть P-time способ определения размера минимального покрытия.