一段有十亿位的数据,只读几百位,能否判断它具有某种性质?对完全精确的判断,这往往做不到:没有读过的位置可能恰好藏着唯一错误。性质测试改变了需要区分的对象:接受真正具有性质的数据,拒绝与该性质相距很远的数据;对只差一点的数据允许不作保证。
这段容许区间不是算法疏漏,而是亚线性检查成为可能的来源。模型的核心也不只是随机抽样,而是把“性质、距离、访问方式和成功标准”一起规定清楚。[1]
形式陈述
用距离把近似判定写准确
先以长度为 n ≥ 1 的字符串 x ∈ Σ n 为例。设性质是子集 P ⊆ Σ n ,两个字符串的归一化 Hamming 距离为
dist ( x , y ) = 1 n | { i : x i ≠ y i } | . 输入到性质的距离 理路 到性质的距离 Distance to property · Distance from a property 以到性质成员的距离下确界衡量接近程度,并明确归一化、闭性与测试承诺。 为
dist ( x , P ) = min y ∈ P dist ( x , y ) . 这里假设 P 非空,并取 0 < ε ≤ 1 。距离是把 x 修成某个合法对象至少要修改的坐标比例。关键在于取最小值:若 P = { 0 n , 1 n } ,输入的零、一比例分别为 1 / 4 , 3 / 4 ,它到性质的距离是 1 / 4 ,而不是到全零串的距离 3 / 4 。测试目标是接近某个合法对象,不是接近分析者预先选定的一个代表。
一个错误概率至多为 1 / 3 的 ε -测试器,通过坐标查询访问 x ,并满足
x ∈ P ⟹ Pr [ accept ] ≥ 2 / 3 , dist ( x , P ) ≥ ε ⟹ Pr [ reject ] ≥ 2 / 3. 在 0 < dist ( x , P ) < ε 的中间区域,接受或拒绝都合法。这里采取“距离至少为 ε ”的远离约定;有的文献使用严格大于,相应端点应保持一致。
错误概率针对算法随机性,而以上保证分别适用于每个满足前提的输入。输入不是默认来自某个自然分布。中间区域的自由也不能扩大到真正的合法输入或远离输入。
访问模型决定一次查询能知道什么
字符串模型的一次查询返回一个坐标。对图、函数和分布,访问接口不同,距离的归一化也会改变。
在稠密图模型中,常用邻接查询询问一对顶点是否有边,距离按 Θ ( n 2 ) 个可能边位置归一化。在有界度图模型中,常用邻居查询询问一个顶点的第 j 个邻居,距离按 Θ ( d n ) 的规模衡量,d 是度数上界。具体常数约定可以不同,但查询接口与距离尺度必须匹配。
因此,同一个图若只含 O ( n ) 条边,在稠密图距离中删除全部边只需 O ( 1 / n ) 的比例;在有界度距离中,删除这些边却可能是常数比例的修改。“它是否远离无边图”取决于采用哪个模型。
分布测试 理路 分布测试模型 Distribution testing model · Distribution property testing 区分分布访问接口,并用成对随机扰动、混合似然比二阶矩和四点算例完整证明均匀性测试的样本下界。 还采用另一类接口:算法获得未知分布生成的独立样本,通常不能直接查询某个点的概率值。常用距离是总变差距离
d TV ( p , q ) = 1 2 ∑ i | p i − q i | . 把这种样本访问与数组随机访问混为一谈,会产生错误的复杂度比较。若允许概率值查询、条件采样等更强接口,得到的又是新的模型。
四个评价维度应分别写清
查询复杂度统计向输入 oracle 发出了多少次请求;运行时间还统计选择查询、处理答案与内部计算的成本。一个存在性证明即使给出少量查询,也可能包含昂贵的本地计算,所以少查询不自动等于软件运行得快。
自适应测试器可以根据已见答案决定下一次查哪里;非自适应测试器必须在看到答案前确定全部查询位置。随机性与自适应性是不同维度:随机抽样可以完全非自适应,确定性算法也可以依赖此前答案选择后续位置。
单侧错误测试器在满足性质的输入上总是接受,只可能漏掉远离输入;双侧错误允许两边都有小概率出错。下文的全零测试器具有单侧错误,但它的匹配下界甚至适用于更宽松的双侧错误模型。
最后,算法返回的是“接受/拒绝”,不是自动产生修复后的对象。测试、估计距离、学习完整对象与局部修复是相关但不同的任务;从一个高效测试器到这些更强输出,需要额外构造与分析。
直觉
从隐藏错误理解查询下界
考虑全零性质:只要命中一个 1 就能发现错误,但在命中之前,算法无法知道隐藏位置在哪里。取 k = ⌈ ε n ⌉ ,比较全零输入与另一种输入:从 n 个位置中均匀选择 k 个位置放置 1 。后者一定与全零性质相距至少 ε 。
对任何至多查询 q 次、允许自适应的随机算法,固定其随机数后,观察它在全零输入上的查询位置。这是一条至多含 q 个不同位置的路径。在碰到某个隐藏的 1 之前,另一个输入给出的答案全是零,所以算法会沿着同一条路径执行。
每个固定位置被选入隐藏集合的概率是 k / n ,并合界 理路 并集界 Union bound · Boole 不等式 多个坏事件中至少一个发生的概率,不超过各事件概率之和。 给出
观 察 到 Pr [ 观察到 1 ] ≤ q k n . 将两次执行使用同一组随机数耦合:只要没有命中隐藏集合,两次输出就相同。因此两种输入分布的接受概率之差至多为 q k / n 。一个双侧错误至多 1 / 3 的测试器,却必须使两种接受概率至少相差 1 / 3 ,所以
q ≥ n 3 k . 由于 k = ⌈ ε n ⌉ ,这给出
q = Ω ( min { n , 1 / ε } ) . 与常数错误率的上界匹配。这个论证覆盖了自适应与双侧错误算法,而不只是说明某个朴素抽样器需要这么多样本。
补充示意图
图片加载失败 性质测试的 exact-versus-far gap
例子与边界
一个完整测试器:字符串是否全为零
取 P = { 0 n } 。此时距离就是输入中 1 的比例。算法独立均匀抽取 q 个坐标,只要发现一个 1 就拒绝,否则接受。
若 x = 0 n ,算法始终接受;若 x 中至少有 ε n 个 1 ,一次查询没发现它们的概率至多为 1 − ε ,所以
错 误 接 受 Pr [ 错误接受 ] ≤ ( 1 − ε ) q ≤ e − ε q . 因此对目标错误率 0 < δ ≤ 1 / 3 ,取
q = ⌈ ln ( 1 / δ ) ε ⌉ 即可。若这个预算超过 n ,直接检查全部坐标更合适,得到 O ( min { n , ε − 1 log ( 1 / δ ) } ) 次查询。抽样时已经读过的坐标可以缓存,不必重复付出查询成本。
算法只要求查到一个见证,并不需要估计 1 的精确比例。若目的是估计该比例到加性误差 ε ,通常的均值估计会出现 ε − 2 级样本量;那是不同任务,不能拿它替代这里的 ε − 1 分析。
这个测试器还是单侧错误的:合法输入绝不会被拒绝。它的复杂度对固定 ε , δ 不依赖 n ,但这并不意味着每种性质都具有与输入长度无关的测试器。
图片加载失败 普通性质测试只对距离为零和距离至少 ε 两侧作保证;中间区域的输出可以任意。
远离性质,不等于随机局部检查容易找到错误
全零例子很简单,是因为每个为 1 的坐标单独就是违例,距离直接等于这种局部见证的密度。一般性质没有这么直接的对应。
例如检测二进制序列是否单调不减。取偶数 n ,输入为
x = 1 n / 2 0 n / 2 . 它到所有单调不减序列的最小距离为 1 / 2 :无论把零一分界放在哪里,至少要改掉一半坐标。但在全部相邻位置对中,只有正中间那一对呈现 1 , 0 的逆序。因此随机抽查一个相邻对,发现违例的概率只有 1 / ( n − 1 ) 。
这并不证明单调性不可高效测试。它说明,“输入远离性质”与“某种指定的局部检查经常失败”之间需要一个结构定理。一个差的查询分布可能很难发现错误,而更合适的跨尺度或非相邻比较能利用更多结构。具体方法见 单调性测试 理路 单调性测试 Monotonicity testing · Testing monotone functions 在带偏序的有限定义域上,通过函数值 oracle 区分单调函数与必须修改 ε 比例点值才能单调的函数。 。
另一个典型例子是 BLR 线性测试 理路 BLR 线性测试 BLR linearity test · Blum-Luby-Rubinfeld linearity test 以三个函数值检查 f(x)+f(y)=f(x+y),并用 Fourier 一致性证明高通过率函数接近某个线性函数。 :对 f : F 2 d → F 2 ,随机选 x , y ,检查
f ( x ) + f ( y ) = f ( x + y ) . 测试器只有三次查询,真正的数学工作却是证明:如果绝大多数这样的局部方程成立,f 必须接近某个全局线性函数。性质测试的重要成果常常是简洁算法与非平凡结构分析的结合,而不是复杂的执行流程。[1]
推论与应用
容忍测试:接受区域也向外扩展
普通测试区分距离为零与距离至少为 ε 。容忍性质测试 理路 容忍性质测试 Tolerant property testing · Tolerant tester 用两个有间隔的距离阈值区分接近性质与远离性质的对象;下阈值允许为零,并将间隔宽度纳入查询复杂度。 则给定 0 ≤ ε 1 < ε 2 ,要求接受距离至多 ε 1 的输入,拒绝距离至少 ε 2 的输入。
当 ε 1 = 0 、ε 2 = ε 时,就得到本条目的普通测试模型。因此在允许零端点的定义下,普通性质测试确实是容忍测试的特例。若某处将“容忍”一词专用于 ε 1 > 0 ,应说明该术语限制,而不应因此混淆两种任务的关系。
正的容忍半径改变了算法需要做到的事:看到一个违例,已经不足以拒绝,因为合法的接受区域允许少量错误。比如全零性质的容忍测试若区分密度至多 1 / 10 与至少 1 / 5 ,看到一个 1 对两侧都可能发生,不能作为拒绝证据。可改为估计抽样中 1 的比例,并在中点 3 / 20 作判定;估计误差小于 1 / 20 时两侧都正确。一般间隔 Δ = ε 2 − ε 1 下,独立样本均值给出 O ( Δ − 2 log ( 1 / δ ) ) 的查询上界(也可读完输入)。这只是通用上界,并非所有参数区间的紧界,却清楚说明了为何接受少量错误后,寻找单个见证必须改成密度判断。
怎样判断一个性质适合哪种测试路线
可以从三个相互衔接的问题入手。第一,离性质很远意味着哪些全局结构必须失败?第二,这些失败会在什么查询分布下留下足够密集的局部见证?第三,少量查询看不到这些差异时,能否构造两类输入分布证明下界?
全零测试把三问都化成“隐藏的 1 是否被命中”;单调性例子说明局部见证的选择不能想当然;BLR 则展示局部代数关系如何约束全局函数。这些机制比“随机看几个位置”更准确地刻画性质测试。
继续学习时,可先读 查询复杂度模型 理路 查询复杂度模型 Query complexity model · Bit-query model 将输入隐藏在坐标 oracle 后,只统计算法为确定函数值而读取的输入位置数量。 明确访问成本,再读 确定性与随机查询复杂度 理路 确定性与随机查询复杂度 Deterministic query complexity · Randomized query complexity 以决策树和量词定义确定性、允许错误与零错误查询成本,用 OR、奇偶与带间隔多数解释随机化的作用。 理解自适应、错误率与下界。性质测试是在这些模型中加入距离承诺的近似判定框架。
参考资料
[1] Oded Goldreich, Introduction to Property Testing , Cambridge University Press, 2017,第 1、2、7–12 章。作者教材入口与章节导读 ,覆盖基本模型、线性测试、下界、图表示与容忍测试。
[2] Dana Ron, “Algorithmic and Analysis Techniques in Property Testing”, Foundations and Trends in Theoretical Computer Science 5(2), 73–205, 2009。系统整理查询设计与结构分析方法。
[3] Harry Buhrman and Ronald de Wolf, “Complexity Measures and Decision Tree Complexity: A Survey”, Theoretical Computer Science 288(1), 21–43, 2002。作者稿 ,提供经典查询模型的基础定义。