Это не ответ. Это простое, но длительное наблюдение. Надеюсь это будет полезно.
Вариант решения вашей проблемы: содержит ли подмножество ?XA
Эта проблема связана с проблемой оценки монотонных булевых функций от переменных. Подмножество эквивалентно битной строке, поэтому семейство эквивалентно булевой функцииn{1,…,n}nXf от переменных. Для данной функции можно определить наименьшую монотонную функцию, которая не больше , а именно . Исходная задача затем сводится к оценке . И наоборот, проблема оценки монотонной булевой функции может быть сведена к исходной задаче, либо наивно, если взятьnffg(y)=(∃x⊆y,f(x))g(A)f=gили выбрав который делает меньше.fX
На практике BDD имеют тенденцию работать хорошо. Таким образом, одним из возможных подходов является создание BDD дляf , извлечь из него BDD для и затем оценить . Средний размер BDD для должен быть , поскольку существует много монотонных булевых функций . Следовательно, в теории это плохое решение.gggΩ((nn/2))
Но (1) возможен более качественный анализ и (2) могут быть изменения в этом подходе, которые делают его лучше. Например, я никоим образом не использовал корреляцию между размером и размером BDD . (Должна быть корреляция, но я не знаю, является ли она простой или пригодной для использования здесь.)Иксг
Для полноты простой алгоритм для вычисления BDD для из BDD для является следующим.
Здесь - стандартная операция or для BDD.ге
м ( х ?е1:е0) = х ? ( м (е0) ∨ м (е1) ) : м (е0)
∨