Skip to content

方法Method

SAT分半到正交向量

SAT to Orthogonal Vectors · Split-and-list SAT reduction · SAT到OV归约

把每个子句编码为两侧都尚未满足的坐标,以整数点积验证SAT,并追踪SETH下的规模和稀疏化指数预算。

形式陈述 ​

本页的双色正交向量问题(OV)输入两个有索引的列表 A,B,每个列表至多含 N 个 d 维 0–1 向量,问是否存在一对 a∈A,b∈B 满足

a⋅b=∑j=1da[j]b[j]=0.

点积在普通整数上计算,不是模2内积。列表允许重复向量,每个条目仍保留独立索引。穷举所有跨列表的向量对可在 O(N2(d+1)) 时间内求解,这一写法也涵盖零维情形。

设 F=C1∧⋯∧Cm 是含 n 个变量的CNF。把变量分为大小 ⌊n/2⌋ 与 ⌈n/2⌉ 的两部分,可构造

|A|=2⌊n/2⌋,|B|=2⌈n/2⌉,d=m,

并满足

F可满足⟺∃a∈A, b∈B: a⋅b=0.

若存在某个固定 0<ε≤1,使所有 N,d 上的OV都能由确定性算法在 O(N2−εpoly(d)) 时间内解决,则每个固定 k 的 k-SAT都有 O∗(2(1−ε/2)n) 时间算法。这与本库确定性版本的SETH冲突。下面给出构造、双向正确性、完整小例,以及每一项规模费用。

直觉

一个部分赋值不能单独判断整条子句最终是真是假,但能判断“我这一半是否已经找到一个真的文字”。若左半已经满足子句,右半可以任意;若左半尚未满足,右半必须负责满足。把“已经满足”记为0、“尚未满足”记为1,两边都失败时才会在对应坐标产生乘积1。

因此点积不仅检测是否有冲突,还精确数出拼接赋值违反了多少条子句。先分别列出两半赋值,将原来的 2n 对组合变成两个各约 2n/2 的列表;困难集中到能否显著快于二次时间找到一对兼容向量。

每个坐标的语义与双向证明 ​

记两半变量集为 VL,VR。对每个左侧赋值 α:VL→{0,1} 定义

aα[j]={0,Cj在左半含有被α置真的文字,1,没有这样的文字.

右侧 bβ[j] 同理。若子句没有左半变量,则 aα[j]=1;这表示仍需右半负责,不能把它当作“空约束所以自动满足”。

任取一对赋值,拼成 σ=α∪β。子句 Cj 是析取,所以它为假当且仅当左右两部分都没有真文字,即

1{Cj(σ)=0}=aα[j]bβ[j].

对全部子句求和便得

aα⋅bβ=#{j:Cj(α∪β)=0}.

若 F 有满足赋值,把它限制到两半,得到的每个坐标乘积都是0,故存在正交对。反过来,正交对的各乘积都是非负整数,总和为0迫使每个乘积为0;因而每条子句至少被一半满足,拼接赋值满足 F。索引保留了原部分赋值,所以找到一对向量后还能恢复见证。

每个共同的1是一条被违反的子句
例子与边界

四个变量、三个子句、全部十六对 ​

取

F=(x1∨x3)∧(¬x1∨x4)∧(x2∨¬x3∨¬x4),

按 (x1,x2)∣(x3,x4) 分半,坐标次序就是显示的三个子句次序。

左赋值 x1x2 aα 右赋值 x3x4 bβ
00 101 00 110
01 100 01 100
10 011 10 010
11 010 11 001

例如左赋值00尚未满足第一、第三条,已由 ¬x1 满足第二条,故得到101。右赋值10已由 x3 满足第一条、由 ¬x4 满足第三条,故得到010。全部点积为:

左侧\右侧 00 01 10 11
00 1 1 0 1
01 1 1 0 0
10 1 0 1 1
11 1 0 1 0

六个零格恰对应六个满足赋值。例如 101⋅010=0 恢复 0010,三条子句分别由 x3,¬x1,¬x4 满足;101⋅110=1 对应0000,只有第一条为假。

编码边界 ​

变量数为奇数时,两表长度可以不同,令 N=2⌈n/2⌉ 就同时控制二者。若接口要求等长列表,可重复短表中的任意条目补齐,答案不变。不同赋值本来就可能产生相同向量;本页保留其列表索引,不能在无说明地去重后仍声称列表长度精确为 2n/2。

空合取式(m=0)恒真,对应零维向量的点积0;若含空子句,其坐标在两侧恒为1,所以不存在正交对,可以预先返回不可满足。n=0 时两表各含唯一的空赋值,也可直接处理。后面的渐近分析只需 n≥1。

若误用模2点积,两条被违反的子句可能贡献 1+1=0,从而产生伪正交对。非负整数和的“为零当且仅当每项为零”是正确性证明真正使用的性质。

推论与应用

固定宽度下的指数预算 ​

固定子句宽度 k,允许每条含至多 k 个文字。先删除子句内重复文字、恒真的子句和重复的整条子句,并保留原变量全集。子句数因而满足

m≤∑i=0k2i(ni)=O(nk).

读取和规范化原始编码的费用为 poly(|F|);不能忽略读取任意多重复子句的成本。对每个部分赋值扫描所有子句并记录向量、索引,花费至多 O(N(n+km)) 时间。若假设OV算法的费用为 O(N2−ε(d+1)c),其中 c 是固定常数,则SAT总费用为

poly(|F|)+O(N(n+km)+N2−ε(m+1)c).

因 0<ε≤1,枚举费用不会超过这个指数尺度;k 固定时,m 的贡献可吸收进多项式因子。又有

N2−ε=2(2−ε)⌈n/2⌉≤21−ε/22(1−ε/2)n.

奇数 n 只增加常数因子。因此每个固定 k 都得到 O∗(2(1−ε/2)n) 算法;指数底数 21−ε/2<2 的改进与 k 无关,而被隐藏的多项式次数可以依赖 k。这正好否定SETH的量词顺序。

这里的目标实例对原SAT输入而言仍是指数大小;它是一项追踪运行时间的分半归约,不是把SAT多项式归约到一个容易问题后得到 P=NP。若目标改进只有 N2/log⁡N,换回SAT也只得到 2n/Θ(n),并没有跨过SETH所禁止的固定指数底数。

要求对数维度时,另付稀疏化成本 ​

上面只由去重得到 d=O(nk)=O((log⁡N)k),不能直接写成 d=O(log⁡N)。为得到后一种条件下界,假设存在一个固定 ε>0,对每个常数 c≥1,都存在确定性OV算法 Ac,对 d≤clog2⁡N 的实例运行于 O(N2−εpoly(d)) 时间。可先把 ε 缩小到至多1。

对任意固定SAT宽度 k,调用稀疏化引理,参数取 η=ε/4。它把原式写成至多 2ηn 个 k-CNF的析取,每个分支仍用原变量集,并有至多 C(k,η)n 条子句。对每个分支做上述分半归约,则

d≤C(k,η)n≤2C(k,η)log2⁡N.

取适用于 c=max{1,2C(k,η)} 的 Ac,并对所有分支的答案取析取。包括分支构造与列表枚举在内,总时间为

O∗(2ηn2(1−ε/2)n)=O∗(2(1−ε/4)n).

一般地,剩余指数改进是 ε/2−η,故必须先保证 0<η<ε/2。稀疏化不是免费的;把分支数省掉,就会高估归约保留下来的改进。

这里 C,c,Ac 可以随固定 k 变化,但同一个 ε 要先于 c 选定。若只有“每个 c 存在某个越来越小的 ε(c)>0”,以上证明不再给出与 k 无关的正改进。等价地,SETH推出:对每个固定改进幅度,都有某个对数维度常数使该改进无法实现。

列表索引还保护了这一规模论证。去重虽不改变OV是否有解,却可能大幅缩小实际列表长度;此时不能继续用原 N 的等式,声称维度是去重后基数的对数。若必须用互异向量集合,可给左向量附加唯一编号位,并在右侧对应位填0;另用一个编号块给右向量编号、左侧填0。两个新块的交叉点积都为零,只增加 2⌈log2⁡N⌉ 维,仍保留对数维度与原列表规模。

算法模型随归约一起传递 ​

构造、列表生成和答案恢复都是确定性的,因此确定性OV算法才直接反驳本页所用的确定性SETH。若OV算法带随机错误,结论应改用相应随机化SETH并追踪多次调用的错误概率;不能借用当前假设的名称掩盖模型变化。

读完本页,应能从一个子句写出左右坐标,证明点积等于违反子句数,复算十六格表,并在 N2−ε、分半取整和 2ηn 三处费用之间保留正的指数改进。

参考资料
关系图谱5 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具