Введение

Коллекция подмножеств, таких что каждый элемент исходного множества содержится ровно в одном подмножестве. В математической области комбинаторики, при заданном наборе подмножеств множества , точное покрытие – это поднабор этих подмножеств, в котором каждый элемент содержится ровно в одном подмножестве. Точное покрытие является разновидностью покрытия. Оно является задачей класса NP (недетерминированным полиномиальным временем) и имеет множество применений, от оптимизации расписаний авиарейсов и облачных вычислений до проектирования электронных схем. Другими словами, является разбиением множества на подмножества, содержащиеся в . Задача поиска точного покрытия является разновидностью задачи удовлетворения ограничений. Элементы множества представляют собой варианты выбора, а элементы множества – ограничения. Задача точного покрытия включает в себя отношение принадлежности между подмножествами и элементами, но может быть представлена любым неоднородным отношением между набором вариантов выбора и набором ограничений. Например, задача точного покрытия эквивалентна задаче точного покрытия минимальным набором, матрице сопряженности или двудольному графу. В информатике задача точного покрытия – это задача принятия решения, определяющая, существует ли точное покрытие. Задача точного покрытия является NP-полной и входит в число 21 NP-полных задач Карпа. Она остаётся NP-полной даже в случае, когда каждое подмножество содержит ровно три элемента; эта ограниченная задача известна как точное покрытие тремя множествами, часто сокращаемое как X3C. Если в конкретном решении определённый вторичный столбец уже удовлетворён, то добавленная строка не требуется. Однако, если вторичный столбец не удовлетворён (что допустимо в обобщённой задаче, но не в стандартной), то добавленная строка может быть выбрана для обеспечения его удовлетворения. Но Кнут объясняет, что лучше работать непосредственно с обобщённой задачей, поскольку обобщённый алгоритм проще и быстрее: простое изменение его алгоритма X позволяет обрабатывать вторичные столбцы напрямую. Задача о восьми ферзях является примером обобщённой задачи точного покрытия, поскольку ограничения, соответствующие диагоналям шахматной доски, требуют максимального, а не точного количества ферзей.

Примечательные примеры

Благодаря NP-полноте, любая задача из класса NP может быть сведена к задаче точного покрытия, которую затем можно решить с помощью методов, таких как алгоритм «Танцующие ссылки». Однако для некоторых известных задач сведение особенно простое. Например, задачу о покрытии доски пентамино и решение судоку можно рассматривать как задачи точного покрытия.

Проблема королевы Н.

Проблема N королев является примером обобщенной задачи точного покрытия. Задача включает в себя четыре типа ограничений:
Ранг: для каждого из N рангов должна быть ровно одна королева. Столбец: для каждого из N столбцов должна быть ровно одна королева. Диагонали: для каждой из 2N − 1 диагоналей должна быть не более одной королевы. Обратные диагонали: для каждой из 2N − 1 обратных диагоналей должна быть не более одной королевы. Следует отметить, что 2N рангов и столбцов формируют основные ограничения, а 4N − 2 диагоналей и обратных диагоналей формируют вторичные ограничения. Более того, поскольку каждая из первых и последних диагоналей и обратных диагоналей содержит только один квадрат на шахматной доске, их можно исключить, и таким образом можно уменьшить количество вторичных ограничений до 4N − 6. Матрица для задачи N королев тогда имеет N2 строк и 6N − 6 столбцов, каждая строка соответствует возможному размещению королевы на каждом поле шахматной доски, а каждый столбец – каждому ограничению.