Algorithm 求解Horn公式的贪心算法

Algorithm 求解Horn公式的贪心算法,algorithm,time-complexity,complexity-theory,boolean-logic,greedy,Algorithm,Time Complexity,Complexity Theory,Boolean Logic,Greedy,这是我几天来一直试图理解并最终解决的作业问题。到目前为止,我还没有成功。因此,任何对理解或解决问题的指导、帮助都是值得赞赏的 在n个布尔变量上给您一组m约束 {x1,x2,…,xn} 约束有两种类型: 等式约束:席= xJ,对于一些i!J 不等式约束:席!xj,对某些人来说,我!=j 设计了一种高效的贪心算法,给出了算法的收敛速度 相等和不相等约束集决定它是否为 可能或不可能同时满足所有约束。 如果是 如果有可能满足所有约束,则您的算法应该 向满足所有条件的变量输出赋值 限制 为此问题的输入选择

这是我几天来一直试图理解并最终解决的作业问题。到目前为止,我还没有成功。因此,任何对理解或解决问题的指导、帮助都是值得赞赏的

在n个布尔变量上给您一组m约束 {x1,x2,…,xn}

约束有两种类型: 等式约束:席= xJ,对于一些i!J 不等式约束:席!xj,对某些人来说,我!=j

设计了一种高效的贪心算法,给出了算法的收敛速度 相等和不相等约束集决定它是否为 可能或不可能同时满足所有约束。 如果是 如果有可能满足所有约束,则您的算法应该 向满足所有条件的变量输出赋值 限制

为此问题的输入选择一个表示法 并使用符号Input:…,Output:

用简单的英语描述你的贪婪算法。在什么地方 你的算法贪婪吗

描述你的贪婪算法 在伪代码中

简要地证明你的算法的正确性

说明并证明算法的运行时间。更多 算法效率越高越好

到目前为止,我发现这个问题与布尔可满足性SAT问题有关。我尝试先将所有变量设置为false,然后通过反例证明它不能同时满足所有约束

我对约束满足问题CSP和Horn SAT感到困惑。我阅读了一些关于这些问题的文章以获得解决方案,这让我感到困惑。我的逻辑是创建一棵树并应用DFS检查约束是否满足,而Horn SAT解决方案正引导我进行数学证明


任何帮助都将不胜感激,因为这是我的学习阶段,我无法一次掌握全部

让我们以约束条件为x1=x2和x2的110为例=x3

记住,因为我们只得到了约束,算法也可以生成001作为输出,因为它也满足约束

解决这个问题的一个办法是

有两个列表,每个约束类型一个

每个列表包含一对i,j索引

根据i索引对列表进行排序

现在,对于等式约束中的每一对,检查不等式中是否没有与其冲突的约束

如果是这样的话,你可以马上退出

否则,您必须检查等式约束列表中是否有更多具有其中一个对的对


然后,您可以为其指定一个或零,最终您将能够生成完整的输出

让我们以约束为x1=x2和x2的110为例=x3

记住,因为我们只得到了约束,算法也可以生成001作为输出,因为它也满足约束

解决这个问题的一个办法是

有两个列表,每个约束类型一个

每个列表包含一对i,j索引

根据i索引对列表进行排序

现在,对于等式约束中的每一对,检查不等式中是否没有与其冲突的约束

如果是这样的话,你可以马上退出

否则,您必须检查等式约束列表中是否有更多具有其中一个对的对

然后,您可以为其分配一个或零,最终您将能够生成完整的输出

非正式分类: 首先,这不是布尔SAT问题,因为这是NP完全问题。你的老师通过要求一个有效的ie来暗示这不是NP完全的。最多是多项式时间的方法来解决问题

关于问题的建模思考: 将此问题视为一个图形,其中不等式表示一种边,而等式表示另一种边:

以图形方式思考这个问题帮助我意识到这有点像图形着色问题:我们可以将所有节点设置为?取消设置,然后选择要设置为true的任何节点,然后从该节点执行广度优先搜索,以将所有连接节点设置为true或false,检查是否存在任何矛盾。如果我们对图中的一个连接组件完成此操作,而没有发现矛盾,那么我们可以忽略该部分中的所有节点,并随机设置另一个节点的值,等等。如果我们这样做,直到没有连接组件留下,并且我们仍然没有矛盾,然后,我们以一种代表合法解决方案的方式设置图表

解决方案: 因为正好有n个元素,我们可以创建一个包含等式的关联桶数组,另一个包含不等式的关联桶数组,每个桶可以包含一个它所等于的数组,但是如果我们想要的话,我们可以获得比这个更高的效率[复杂性将保持不变]

您的相等数组可以想象如下:

这将抑制 他说:

0 == 1 1 == 2 3 == 4 请注意,这是一个不规则矩阵,需要2*m的空间。对于不等式矩阵,我们也做同样的事情。此外,设置这两个阵列阵列都会使用Om+n空间和时间复杂性

现在,如果存在一个解,{x0,x1,x2,x3},那么{x0,!x1,!x2,!x3}也是一个解。证明:

xi==xj iff!席=!xj

因此,如果我们随机设置其中一个元素,它不会影响我们的解决方案。让我们把席设为真,把其他的设为?[在数字上,我们将处理三个值:0 false、1 true和2 unset]

我们将调用此阵列解决方案,即使它尚未完成

现在我们可以用递归来考虑设置我们的价值的所有后果:

下面的代码是psuedo代码,因为提问者没有指定语言。我让它有点c++风格,但只是为了保持它的通用性和使用漂亮的格式颜色

bool Set int i,bool val//i是索引 { 如果解[i]!=“?” 返回溶液[i]==val; 溶液[i]==val; 对于int j=0;j<等式[i]。大小;j+=1 { bool success=Setequalities[i][j],val; 如果!成功 返回false;//发现矛盾 } 对于int j=0;j<不等式[i]。大小;j+=1 { bool success=set不等式[i][j],!val; 如果!成功 返回false;//发现矛盾 } 返回true;//未发现矛盾 } 空洞解决 { 对于int i=0;i

这里的一个窍门是认识到解函数需要调用集合函数C次,其中C是图的连通分量的数目。注意每个连通的分量是相互独立的,因此同样的规则适用:我们可以合法地选择它的一个元素的值,然后考虑后果。

最快的解决方案仍然需要读取所有约束条件,Om,并且在可能的情况下需要输出一个解决方案,On;因此,不可能获得比Om+n更高时间复杂度的解决方案。以上是一个贪婪算法,具有Om+n时间和空间复杂度

在保持Om+n时间复杂度的同时,可能获得更好的空间复杂度,甚至可能是O1,但我不确定

至于Horn公式,我很不好意思承认我对它们一无所知,但这个答案直接回应了作业中对您提出的所有要求。

非正式分类: 因此,首先,这不是布尔SAT问题,因为这是NP完全问题。你的老师通过要求一个有效的ie来暗示这不是NP完全问题。最多多项式时间的方法总是解决问题

关于问题的建模思考: 将此问题视为一个图形,其中不等式表示一种边,而等式表示另一种边:

以图形方式思考这个问题帮助我意识到这有点像一个图形着色问题:我们可以将所有节点设置为?unset,然后选择任何节点设置为true,然后从该节点执行广度优先搜索,将所有连接节点设置为true或false,检查是否存在任何矛盾。如果我们为c完成此操作图的连接组件,在没有发现矛盾的情况下,我们可以忽略该部分中的所有节点,并随机设置另一个节点的值,等等。如果我们这样做直到没有连接组件留下,并且我们仍然没有矛盾,那么我们以代表合法解决方案的方式设置了图

解决方案: 因为正好有n个元素,我们可以创建一个包含等式的关联桶数组,另一个包含不等式的关联桶数组,每个桶可以包含一个它所等于的数组,但是如果我们想要的话,我们可以获得比这个更高的效率[复杂性将保持不变]

您的相等数组可以 想象一下:

这意味着:

0 == 1 1 == 2 3 == 4 请注意,这是一个不规则矩阵,需要2*m的空间。对于不等式矩阵,我们也做同样的事情。此外,设置这两个阵列阵列都会使用Om+n空间和时间复杂性

现在,如果存在一个解,{x0,x1,x2,x3},那么{x0,!x1,!x2,!x3}也是一个解。证明:

xi==xj iff!席=!xj

因此,如果我们随机设置其中一个元素,它不会影响我们的解决方案。让我们把席设为真,把其他的设为?[在数字上,我们将处理三个值:0 false、1 true和2 unset]

我们将调用此阵列解决方案,即使它尚未完成

现在我们可以用递归来考虑设置我们的价值的所有后果:

下面的代码是psuedo代码,因为提问者没有指定语言。我让它有点c++风格,但只是为了保持它的通用性和使用漂亮的格式颜色

bool Set int i,bool val//i是索引 { 如果解[i]!=“?” 返回溶液[i]==val; 溶液[i]==val; 对于int j=0;j<等式[i]。大小;j+=1 { bool success=Setequalities[i][j],val; 如果!成功 返回false;//发现矛盾 } 对于int j=0;j<不等式[i]。大小;j+=1 { bool success=set不等式[i][j],!val; 如果!成功 返回false;//发现矛盾 } 返回true;//未发现矛盾 } 空洞解决 { 对于int i=0;i

这里的一个窍门是认识到解函数需要调用集合函数C次,其中C是图的连通分量的数目。注意每个连通的分量是相互独立的,因此同样的规则适用:我们可以合法地选择它的一个元素的值,然后考虑后果。

最快的解决方案仍然需要读取所有约束条件,Om,并且在可能的情况下需要输出一个解决方案,On;因此,不可能获得比Om+n更高时间复杂度的解决方案。以上是一个贪婪算法,具有Om+n时间和空间复杂度

在保持Om+n时间复杂度的同时,可能获得更好的空间复杂度,甚至可能是O1,但我不确定


至于Horn公式,我不好意思承认我对它们一无所知,但这个答案直接回应了作业中要求你的所有问题。

@Elliott到目前为止,我发现这个问题与布尔SAT问题有关。我先尝试将所有变量设置为false,然后通过反例尝试为了证明它不能同时满足所有约束。@Elliott我对CSP和HORN SAT感到困惑。我阅读了一些关于CSP和HORN SAT的文章以获得解决方案,这让我感到困惑。我的逻辑是创建一个树并应用DFS检查约束是否满足,而HORN SAT的解决方案则引导我进行数学证明@Elliott到目前为止,我发现这个问题与布尔SAT问题有关。我尝试先将所有变量设置为false,然后通过反例试图证明它不能同时满足所有约束。@Elliott我对CSP和HORN SAT感到困惑。我阅读了一些关于这方面的文章,以获得解决方案,并他让我感到困惑。我的逻辑是创建一棵树并应用DFS检查约束是否满足,而HORN SAT解决方案则引导我进行数学证明。花点时间向你的答案低头。太棒了。我从来没有想过这是一个图着色问题。这里,我们只有布尔变量,所以我猜同样的逻辑是goe很好。我们必须在解决方案中包含horn条款的基本原理吗?Ayush Dave,抱歉,我不确定它们是什么。我必须查找它们。当然不是
SAT问题,这显然是NP完全问题。@AyushDave,另外,图形着色的想法只是一种可视化的方法我不确定它是否对你有帮助,但当我这样想的时候,我很清楚该如何解决它。显然,这个问题比一般情况下的图形着色问题更容易解决,这是NP-完全问题。哇,花点时间向你的答案低头。太神了我从来没有想过这是一个图形着色问题。这里,我们只有布尔变量,所以我想同样的逻辑也适用。我们必须在解决方案中包含horn条款的基本原理吗?Ayush Dave,抱歉,我不知道它们是什么。我得查一下。这当然不是SAT问题,这显然是NP完全问题。@Ayusdave,另外,图形着色的想法只是一种可视化的方法我不确定它是否对你有帮助,但当我这样想的时候,我很清楚该如何解决它。显然,这个问题比一般情况下的图着色问题(NP-完全)更容易解决