Python 寻找满足特定约束的子集

Python 寻找满足特定约束的子集,python,boolean,subset,discrete-mathematics,Python,Boolean,Subset,Discrete Mathematics,我有一组变量S和一个布尔函数f,在S上定义如下: fx1,x2。。。xn=真iff fxi,xj=真∀ 1.≤ 我≤ N∀ 1.≤ J≤ n、 n>1,否则为假 fa,b是已知的,fa,a是真的∀ a、 b在S 我希望在设计一个快速算法时能得到一些帮助,该算法可以返回f返回真的S的所有子集 例如,设S=[a,b,c]和fa,b=fb,c=fa,c=True。然后算法应该返回[[a,b],[a,c],[b,c],[a,b,c]] 我想到了四种改进暴力搜索的策略: 1 f的参数顺序无关紧要 < P

我有一组变量S和一个布尔函数f,在S上定义如下:

fx1,x2。。。xn=真iff fxi,xj=真∀ 1.≤ 我≤ N∀ 1.≤ J≤ n、 n>1,否则为假

fa,b是已知的,fa,a是真的∀ a、 b在S

我希望在设计一个快速算法时能得到一些帮助,该算法可以返回f返回真的S的所有子集

例如,设S=[a,b,c]和fa,b=fb,c=fa,c=True。然后算法应该返回[[a,b],[a,c],[b,c],[a,b,c]]

我想到了四种改进暴力搜索的策略:

1 f的参数顺序无关紧要

< P > 2使用FA,A是真的,FXI,XJ=FXJ,席,所以只有I < J需要检查。< /P> 2使用fx1,x2。。。xn+1=fx1,x2。。。xn∧ fxi,xn+1∀ 1.≤ 我≤ n在哪里∀ 表示迭代连接

3注意,2表示如果fx1,x2。。。xn返回False,然后是fx1,x2。。。xn+Δ也可以,这可能会减少解决方案空间

4当fxi,xj对于某些i,j为False时,立即返回False

如果你想写一些代码,如果你能用python编写,我将不胜感激

非常感谢。

双参数函数fa,b可以看作是S上的对称自反关系,可以看作是无向图

这样看来,fx1,…,xn是真的,iff{x1,…,xn}形成一个完整的子图

从这里开始,你最终得到的结果是,不幸的是,它是NP完全的。换句话说,快速算法不太可能存在。

双参数函数fa,b可以看作是S上的对称自反关系,可以看作是无向图

这样看来,fx1,…,xn是真的,iff{x1,…,xn}形成一个完整的子图


从这里开始,你最终得到的结果是,不幸的是,它是NP完全的。换句话说,快速算法不太可能存在。

fx1,x2。。。xn=所有i,j的fxi,xj。这意味着所有值fx1、x1、fx1、x2、…、fx2、x1、。。。都是相等的,对吗?for all可以被认为是迭代连接;它意味着返回fx1,x1和fx1,x2和fx2,x1和。。。其中and表示逻辑and。这基本上意味着当它们都为真时返回真,否则返回假。那么你能修正你的符号来表达你的意思吗?这真是令人困惑。只是出于好奇,你已经用python实现了什么吗?如果是的话,你能添加它吗?fx1,x2。。。xn=所有i,j的fxi,xj。这意味着所有值fx1、x1、fx1、x2、…、fx2、x1、。。。都是相等的,对吗?for all可以被认为是迭代连接;它意味着返回fx1,x1和fx1,x2和fx2,x1和。。。其中and表示逻辑and。这基本上意味着当它们都为真时返回真,否则返回假。那么你能修正你的符号来表达你的意思吗?这真是令人困惑。只是出于好奇,你已经用python实现了什么吗?如果是的话,你能补充一下吗?非常感谢托马斯;好的。我想又回到绘图板上来了。非常感谢托马斯;好的。我想还是回到绘图板上来吧。