这是“有效数学表达式”问题P还是NP?

时间:2009-06-10 13:32:41

标签: algorithm math np-complete

这个问题纯粹是出于好奇。我今年夏天不在学校,并且正在实施一种算法来解决这个问题,这只是为了好玩。这导致了上述问题,这个问题有多难?

问题:给出一个正整数列表,一组数学运算符和等号(=)。你能用整数(按照相同的顺序)和运算符(任意次数)创建一个有效的数学表达式吗?

一个例子应该澄清任何问题:

给出:{2,3,5,25},{+, - ,*,/},{=}
   输出:是

表达式(我认为只有一个)是(2 + 3)* 5 = 25.你只需要输出YES / NO。

我认为问题出在NP。我这样说是因为这是一个决策问题(是/否答案),我可以找到一个决定它的非确定性多时间算法。

一个。非确定性地选择要在整数之间放置的运算符序列    湾验证你回答是一个有效的数学表达式(这可以在常量中完成       时间)。

在这种情况下,最大的问题是:P中的问题是什么? (即是否有一个确定性的多时间算法决定它?)或问题NP是否完整? (即,一个已知的NP完全问题可以减少到这个?或者相当于每个NP语言的多边形时间是否可以减少到这个问题?)或者两者都没有? (即NP中的问题但不是NP完成)

注意:此问题陈述假设P不等于NP。此外,虽然我是Stack Overflow的新手,但我对家庭作业标签很熟悉。这确实只是好奇心,而不是家庭作业:)。

7 个答案:

答案 0 :(得分:6)

Partition problem(NP-Complete)直接减少 - 给定一组N个整数S,“有效数学”问题的输入将是 - S,N-2'的元素+'运算符和'='符号。

答案 1 :(得分:2)

好的,首先,你指定整数的“set”,但是根据定义,一个集是无序的,所以你的意思是整数的“列表”。

另外,我将在这里做一个可能错误的假设,即=符号总是恰好出现一次,在列表的倒数第二个到最后一个整数之间。如果在中间允许等号,则会变得更复杂。

这是“有效数学表达式”(VME)是NP完整的实际证据。我们可以从Subset sum开始减少。请注意,维基百科对子集和的定义要求子集非空。实际上,如果期望的和也是输入的一部分,那么允许空子集的子集和的更一般的问题是NP完全的。除非有要求,否则我不会提供证据。给定子集sum {i_1, i_2, ..., i_n}的实例以及所需的总和s,创建以下VME实例:

{0, i_1, 0, i_2, 0, ..., i_n, s}, {+, *}, {=}

如果子集和的实例是可解的,则有一些整数的子集加到0.如果整数i1是和的一部分,则将其加上相应的零(紧靠左侧) )如果i1不是总和的一部分,则乘以它。在每个零和右边的术语之间插入一个附加符号。

以维基百科为例

{−7, −3, −2, 5, 8}

其中{ −3, −2, 5}总和为0,我们将其编码为

{0, -7, 0, -3, 0, -2, 0, 5, 0, 8, 0}

,结果表达式为

{0*7 + 0 + -3 + 0 + -2 + 0 + 5 + 0*8 = 0}

现在我们还需要证明这个VME实例的任何解决方案都会导致子集和实例的解决方案。这比你想象的要容易。当我们查看结果表达式时,我们可以将数字分组为乘以0的数字(包括作为链乘法的一部分)和不匹配的数字。任何乘以零的数字都不包括在最终总和中。任何未乘以零的数字都必须加到最终总和中。

所以我们已经证明了这个VME实例是可解的IF,只有相应的子集和实例是可解的,所以减少就完成了。

编辑:分区缩减(带注释)同样有效,并且更好,因为它允许您将等号放在任何位置。整齐!

答案 2 :(得分:2)

关于如何检查NP完整性似乎存在某种混淆。在特定意义上,NP完全问题至少与NP中的任何其他问题一样困难。假设我们正在与3SAT进行比较,正如一些海报所试图的那样。

现在,将给定问题减少到3SAT证明什么都没有。那么,如果3SAT可以有效地解决(意味着P = NP),则可以有效地解决给定的问题。但是,如果能够有效地解决给定的问题,那么它可能只对应于3SAT的简单特殊情况。

我们必须将3SAT减少到给定的问题。这意味着我们必须制定一个规则来将任意3SAT问题转换为给定问题的示例,以便给定问题的解决方案将告诉我们如何解决3SAT问题。这意味着3SAT不会比给定的问题更难。由于3SAT是最难的,因此给定的问题也必须是最难的。

分区问题的减少有效。这个问题的工作方式是这样的:给定一个多重的S整数,我们可以把它分成两个不相交的子集,它们之间包括S的每个成员,这样不相交的子集的总和是相等的吗?

为此,我们构造一个以0开头的序列,包含S的每个元素,然后是0.我们使用{+, - }作为操作集。这意味着S的每个元素将被加总或减去总数为0,这意味着添加元素的总和与减去元素的总和相同。

因此,这个问题至少与分区问题一样困难,因为如果我们可以解决给定的问题,我们可以解决一个示例分区程序,因此是NP完全的。

答案 3 :(得分:1)

现在没有足够时间进行完整答案,但您可以将此问题的减少描述为Knapsack Problem

使用动态编程,您可以实现伪多项式时间解决方案。请注意,此冲突与问题确实是NP Complete。

答案 4 :(得分:1)

有两个属性需要满足才能成为NP Complete。

如果出现以下情况,决策问题C是NP完全的:

  1. C在NP中,
  2. NP中的每个问题都可以在多项式时间内简化为C.
  3. 我们已经确定了1.2的结果,因为NP中的每个问题都可以简化为3SAT,3SAT可以减少到当前的问题。

    因此它是NP完全的。

    (编辑)回答下面的评论:

    我将证明SAT可以减少到当前的问题,并且由于3SAT可以简化为SAT,因此结果如下。

    输入公式是以下表达式的组合:

    (x 1 V x 2 V x 3 V ... x n V y 1 < /子>)

    (x 1 V x 2 V x 3 V ... x n V y 2 < /子>)

    (x 1 V x 2 V x 3 V ... x n V y 3 < /子>)

    (x 1 V x 2 V x 3 V ... x n V y 64 < /子>)

    其中每个y i 是一个布尔值,它基于在所有x i 之间应用的运算符的顺序。 即,y i 可以采用总共4x4x4x4x1值(假设只有+, - ,x,/是运算符而且=始终是最后一个运算符;如果运算符集被修改,则可以更改包括其他运营商)

    如果没有一个表达式为真,则完整表达式将计算为FALSE,除非我们替换所有可能的值,即x 1 到x ,否则无法检查n 作为n个数字,y 1 到y 64 作为运算符的各种应用方式(这需要处理顺序)

    此转换采用POLY时间,如果数学表达式有效,则给定的布尔公式可以满足。

    有人注意到一个缺陷吗?

答案 5 :(得分:0)

这不是您复杂性问题的真正答案,但您的问题听起来有点像Countdown问题。快速搜索出现了这篇论文:http://www.cs.nott.ac.uk/~gmh/countdown.pdf

答案 6 :(得分:0)

此刻我没有时间制作证据,但是预感告诉我它可能不在P.你可以定义算术的语法,然后这个问题相当于找到是否有使用所有这些终端的有效解析树。我相信该问题出现在NP但不在P之外。