Answers:
这不是答案。这是一个简单但长期的观察。我希望它会有用。
您问题的决策版本是:是否包含的子集?
此问题与评估变量的单调布尔函数的问题有关。的一个子集相当于一个 -bitstring,所以家庭相当于一个布尔函数的变量。给定一个函数,可以定义不大于的最小单调函数,即。然后将原始问题简化为评估。相反,可以通过将天真地将评估单调布尔函数的问题简化为原始问题。或选择使变小的。
在实践中,BDD往往运行良好。因此,一种可能的方法是为建立BDD ,从中得出的BDD ,然后评估。的BDD的平均大小必须为,因为存在许多单调布尔函数。因此,从理论上讲,这是一个不好的解决方案。
但是(1)可能会进行更好的分析,并且(2)对该方法可能会有一些调整,使其变得更好。例如,我没有使用的大小和的BDD 大小之间的相关性。(必须存在相关性,但是我不知道它是否简单或可用。)
为了完整起见,下面是用于从的BDD 计算的BDD 的简单算法。 这里是BDD的标准操作。
也许您可以使用“信息检索”技术:在预处理阶段,构建一个反向索引(在您的情况下,一个简单的二维数组就足够了)以映射元素到中包含它的集合:。
设置长度为的整数数组。
然后对于每个检索,对于每个进行
最后,您需要的集合是的集合。
您可以通过将两个或多个元素索引在一起来任意加快处理速度(以指数空间为代价)。