- Регистрация
- 23 Август 2023
- Сообщения
- 3 048
- Лучшие ответы
- 0
- Реакции
- 0
- Баллы
- 51
Offline
Студенты пришли в библиотеку, чтобы подготовиться к экзаменам. Всего у них
предметов. Каждая из
книг покрывает некоторое множество предметов. Нужно выбрать минимальное число книг, которые покроют все предметы.
Сведение к проблеме выполнимости КНФ
Для предметов используем индекс
, для книг - индекс
. Предикат "книга
покрывает предмет
" обозначаем
.
Поставим задачу ответить для заданного числа
на вопрос, можно ли, используя не более
книг, покрыть все предметы.
Для решения задачи выберем
книг в определенном порядке. Определим булевы переменные
, обозначающие истинность высказывания "книга
выбрана
-й по порядку",
. Всего
переменных.
На переменные
наложим ограничения:
Запишем эти условия в виде КНФ:
2. Каждому порядку может соответствовать только одна книга:
Запишем эти условия в виде КНФ:
3. Каждый предмет покрывается хотя бы одной из выбранных книг:
для всех
:
хотя бы для одной книги
, такой, что
Запишем эти условия в виде КНФ:
Теперь, умея для каждого
решать вопрос выполнимости КНФ, искомое минимальное покрытие находится бинарным поиском по
.
Заметим, что условие 1 является необязательным.
Реализация с помощью SAT-солвера
Таким образом, имея на входе информацию о том, какие предметы какими книгами покрываются, для каждого значения
формируется КНФ.
Полученную КНФ нетрудно ввести в любой SAT-солвер (например: онлайн, офлайн) в подходящем формате (например, DIMACS CNF).
Сведение к проблеме выполнимости КНФ
Для предметов используем индекс
Поставим задачу ответить для заданного числа
Для решения задачи выберем
На переменные
Для каждой книги порядок может быть только один:
Запишем эти условия в виде КНФ:
2. Каждому порядку может соответствовать только одна книга:
Запишем эти условия в виде КНФ:
3. Каждый предмет покрывается хотя бы одной из выбранных книг:
для всех
Запишем эти условия в виде КНФ:
Теперь, умея для каждого
Заметим, что условие 1 является необязательным.
Реализация с помощью SAT-солвера
Таким образом, имея на входе информацию о том, какие предметы какими книгами покрываются, для каждого значения
Полученную КНФ нетрудно ввести в любой SAT-солвер (например: онлайн, офлайн) в подходящем формате (например, DIMACS CNF).