子集总和与子集乘积(强与弱NP硬度)


15

我希望有人能够向我解释为什么子集乘积问题恰好是NP难题,而子集和问题却是弱NP难题。

子集和:鉴于和,确实存在一个子集使得。X={x1,...,xn}TXiXxi=T

子产品:鉴于和,确实存在一个子集使得。X={x1,...,xn}TXiXxi=T

我一直认为这两个问题是等效的-SS的实例可以通过取幂转换为SP实例,SP的对数可以通过对数转换为SS。这使我得出结论,它们都属于NP-hard的同一类-即它们都是弱NP-hard。

此外,似乎可以使用变化很小的动态编程(用SP中的除法代替SS中的减法)来解决相同的问题。

直到我读完Bernard Moret的“计算理论”第8章(对于那些没有这本书的人来说,它都有通过X3C证明子集产品硬度的证明-一个很强的NP难题)。

我了解这种减少,但无法弄清楚我先前的结论出了什么问题(两个问题相等)。


更新:结果表明子集乘积仅是弱NP完全的(目标乘积在是指数的)。加里(Gary)和约翰逊(Johnson)于1981年在《NP完整性》专栏中发表了这篇论文,但是我想它不如他们先前在书中声称的那样可见。Ω(n)


5
最好想象一下如何实现动态编程算法。然后,您会发现出了什么问题。
冈本

@ MohammadAl-Turkistany:它在本专栏
RDN

Answers:


5

关于子集和与子集产品的等价问题,存在子集产品的技术性。如果T不是指数的,则x的乘积实际上就是伪多项式!因此,子集产品被证明为NP Hard的证明不完全正确(出于技术原因!!!)!

但是,如果给定一个T很大的承诺,那么通过对数减去子集总和就可以得到一个非标准子集总和,它超过了实数!这意味着子集和的伪多项式算法不适用!尽管对数很小,但小数位却弄乱了伪多项式动态编程!

我希望这有帮助

撒拉


2
事实证明,您一​​直以来都是正确的,因为归约减少是不正确的(即声称它们表现出很强的NP完整性,反之则不然)。谢谢!
RDN

8

首先,使用幂运算从SS到SP起作用(使用基数2而不是基数),但是会炸毁所涉及数字的大小。NP硬度弱意味着如果数量较小(或更准确地说,用一元表示),则问题不再困难。因此,即使对于简单的SS实例(使用一元数字写),使用幂运算也会创建SP的指数大小的实例。e

其次,使用对数从SP到SS无效,因为对数通常会生成非整数值。SS和SP是使用整数定义的,对数通常会导致先验值,这些值很难表示或难以进行数学运算。

<edit>

为整数,A > 0,则当且仅当A是2的幂时,log 2 A是有理数的,否则是先验的。首先,如果log 2 A = pAA>0log2AA对于非零整数pq,则A=2 plog2A=pqpqAq=2p。因此,通过素分解可以得出A=2r。此外,Arq=2p,因此给定A,我们可以选择q=1p=r证明对数2A是合理的。A=2pqAq=2pA=2rArq=2pAq=1p=rlog2A

我们只需要证明永远不会超越。这遵循从葛尔方-施耐德定理,对于相等的制剂(如可维基页上找到)为“如果αγ是非零代数数,我们采取的任何非零的对数α,然后日志γ /日志α = 日志α γ是任一合理的或超越“。这也很容易通过取定理的逆向和设置,以验证α β = γ,因此βlog2Aαγα(logγ)/(logα)=logαγαβ=γβ=logαγ

</edit>

最后,考虑当我们尝试从SP上的SS进行动态编程算法时会发生什么。因为我们使用乘积而不是求和,所以涉及的数字急剧增加,所需的任意精度数学突然成为运行时间的一个因素。这就是为什么即使数字为一元也无法快速求解SP实例的原因。


这导致了一个有趣的特殊情况。对数可表示为什么类别的数字是有理数,而不需要无限精度?在这种情况下,这些问题的确可以彼此等效解决。它似乎也导致了“自然”的近似算法。
vzn13年

1
感谢您的好评!我只有一个问题-我明白为什么拿日志是违法的(如vzn所指出的,除非日志的长度是多义的),但我仍然不确定从SS到SP的合法性通过求幂。就像您提到的(通过幂运算)从SS到SP的WRT,我们不会遇到以下问题:的输入实例中的位数为O n log x ,而SRT中的位数为I S P的实例是O n x 。这是指数爆炸。仍然合法吗?如果是,为什么?ISSO(nlogx)ISPO(nx)
RDN

1
@ vzn,RDN:当对数超越时,我用特征进行了编辑。关于归约中的爆炸,它取决于您对“合法”的定义:归约是正确的,但其效率不是多项式,因此不涉及NP硬度。因此,这不是正确的折时减少,而是正确的减少(无预选赛)。
亚历克斯十布林克

还有一种特殊情况,对于任何c,所有数字都是的形式,每个n i有理,而不仅仅是c = 2。我正在考虑的近似算法可能会找到一个c,以使将值转换为该“基数”与原始值“接近”。cninicc=2c
vzn

1

字面上的解释是,子集乘积问题是NP完全问题,而这是从NP完全完全问题(例如3套精确覆盖)减少而来的。在这种“强”简化中,在子集积问题的结果实例中,输入整数受某些多项式函数的整数限制。

除非否则从任何强NP完全问题到子集和问题,这样的“强”减少都是不可能的。如果输入整数以多项式为界,我们有多项式时间动态规划算法可解决子集和问题。P=NP


是的,我知道。我的问题是为什么我早先得出的结论是不正确的(即SS和SP相等)。
RDN

@rdn除非P = NP,否则在这个意义上没有等效项。
Mohammad Al-Turkistany

是的,我明白了。但是我想知道我在任何一个方向上的减少都出了什么问题。
RDN

您能概述一下减少量吗?
Mohammad Al-Turkistany

是SS和的一个实例小号P = Ý P 是SP的一个实例。转化小号小号小号P :设P = Ë 小号ÿ = Ë X 。存在总和的SS 小号当且仅当存在产品的SPI(SS)=X,SI(SP)=Y,PI(SS)I(SP)P=eSYi=eXiS。将 I S P 转换为 I S S :令 S = l o g P X i = log Y i。如果存在总和 S = log P 的SS,则存在乘积 P的SP。P=eSI(SP)I(SS)S=log(P)Xi=log(Yi)PS=log(P)
RDN
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.