All streams
Search
Write a publication
Pull to refresh

Comments 8

В разговорах про решения с помощью SAT как обычно тут не хватает самой главной части - как из вон той формулы получить КНФ, скормить ее солверам и по результату уже дать ответ для каких-то заданных вводных. В общем show me the code, хотя бы на том же питоне, хотя бы на SMT, как это было в статье про крестики-нолики, и чтобы запустил тест и оно все отработало и наглядно.

Это какой-то жёсткий брут-форс.
Для размера задачи 20 книг и 10 предметов, выходит 200 переменных.
Не будет ли оптимальнее взять 20 переменных по кол-ву книг xi=0/1 (книга i взята/не взята) и придумать какой-то предикат, определяющий что количество переменных x со значением 1 ровно k штук.

Тогда длина КНФ будет порядка O(N^k) .

Это если "в лоб" делать.
А если реализовать на булевских функциях комбинационную схему сумматора, и сравнивать его побитовый выход с числом k?

Тогда потребуется соединить N сумматоров. К тому же сложность решения такой задачи выполнимости может сильно возрасти. В первоначальном варианте КНФ имеет простую структуру, и методу типа резолюций будет легче справиться с этой задачей.

Тут же не полноценные сумматоры, а только делающие +1*xi к предыдущему выходу.
И длина числа (кол-во суммируемых бит log2(k), что немного.

Интересна зависимость, как растёт сложность задачи от числа свободных переменных.
Конечно, зависит от формул. Но мне кажется, в общем случае - экспоненциально.
То есть, начиная с каких-то N,M оптимизация станет обязательной.

Имеет смысл сравнить экспериментально эти два подхода. В сумматоре фигурирует конъюнкция входов, что может усложнить КНФ.

Sign up to leave a comment.

Articles