0-1编程的精确指数时间算法


10

对于以下问题,是否有已知的算法能胜过朴素的算法?

输入:一种系统,的线性不等式。Axbm

输出:存在的可行解。x{0,1}n

假设和具有整数项。我对最坏情况下的边界感兴趣。Ab

Answers:


14

如果是超线性的,则这种算法将不能证明强指数时间假说,因为合取范式的公式是0-1编程的特例,而稀疏引理使我们可以将 -SAT简化为线性许多子句上的CNF-SAT 。ķmk

但是,由于Impagliazzo,Paturi和我本人,有一种算法可以解决这种不等式系统,如果导线的数量(即中非零系数的数量)是线性的。特别是,如果导线数为,则算法将在时间,其中。c n 2 1 - s n s = 1Acn2(1s)ns=1cO(c2)


1

如果足够小,那么您可以比朴素的算法做得更好,即,优于时间。此处“足够小”表示小于。运行时间仍将是指数级的-例如,可能是时间-但它比朴素的算法要快。2 n m n / lg n 2 n / 2m2nmn/lgn2n/2

顺便说一句,对于矩阵具有超线性条目数的某些情况,看起来确实可以使我们以比时间更快地解决问题。我不知道如何将其与此处提供的其他答案相吻合。因此,您应该仔细检查我的答案:这可能表明我在某处犯了个严重错误。 A2nA


基本方法:写,其中保持第一的分量和保持最后元件; 并且类似地,其中具有左侧列和右侧列。现在可以将重写为以下形式X 0 ñ / 2 X X 1 ñ / 2 = 010 ñ / 2 1 ñ / 2 X bx=(x0,x1)x0n/2xx1n/2A=(A0,A1)A0n/2AA1n/2Axb

A0x0+A1x1b,

或等效地,

A0x0bA1x1.

列举所有可能性,并让表示可能值的集合,即2n/2A0x0S

S={A0x0:x0{0,1}n/2}.

同样,列举的所有可能性的集合,即T2n/2bA1x1

T={bA1x1:x1{0,1}n/2}.

现在问题变成了

给定大小为集合,和是否存在使得?S,TZm2n/2sStTst

(这里是指向性的,即,对于所有我们都要求。)sitii

后一个问题在CS.StackExchange上进行了讨论,并且显然有一种算法可以在。如果足够小(例如,小于),则根据需要,总运行时间将小于。O(2n/2(n/2)m1)mn/lgn2n


为了使结果听起来更合理,这里有一些非常粗略的直觉。如果我们采用的极端情况,那当然可以很快解决。(对于的特殊情况,实际上有一种简单得多的算法:如果,则让,否则;现在,如果存在任何可行的解决方案,则该将为1。 )= 1 X = 1名1 0 X = 0 Xm=1m=1xi=1A1,i0xi=0x


1
我的答案中的算法也使用相同的方法简化为您的答案中描述的向量问题,即拆分变量并列出所有分配。
Stefan Schneider

2
对于一般的整数编程问题,有一些算法,其运行时间对维数有依赖性,而对其他所有项都具有多项式依赖性。请参阅dl.acm.org/citation.cfm?id=3808572O(m)
2013年
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.