“证书算法把上述产生过程和下面的检查器分开。所有证书先检查长度、编号范围、集合无重复及输入引用;拒绝一份证书不等于证明相反答案。”
形式陈述 ​
设
本页采用一个简单接口:输入合法性已被检查,检查器是确定且总会终止的程序;它必须先验证答案与证书格式、长度界和对原始输入的引用,再接受或拒绝。其关键义务为
这称为检查的可靠性。完整求解器还应在每个合法输入上终止,并产生会被检查器接受的
成本需要分别报告:求解时间、证书长度、检查时间。证书不必在渐近意义上比求解更快,但检查逻辑应足够简单、独立,便于实现和证明。用同一份有缺陷的求解代码重跑一遍,并没有自动建立独立核验。
直觉
求解器负责找出结果,检查器负责确认这一个结果。搜索过程可能很复杂,留下的理由却可能很短:一份划分、一个障碍圈,或一对值相等的原始与对偶解。检查器可以完全不关心搜索采取了什么策略,只按输入和证书核对数学条件。
图中两条分支都能被接受:接受奇圈证书确认答案“不是二分图”,接受二染色确认答案“是二分图”。绿色接受标记不表示原问题的答案一定为“是”。
例子与边界
产生二分性证书 ​
输入为有限简单无向图,以编号
求解器用BFS公理库广度优先搜索Breadth-first search · BFS按无权距离分层访问可达顶点的图遍历算法。逐分量搜索,根赋颜色
若扫描到同色边
同色使前两项之和为偶数,减去偶数再加一便是奇数。树路径本身不含非树边
两次可以复算的执行 ​
三角形的边为
| 顶点 | 父亲 | 深度 | 颜色 |
|---|---|---|---|
| 0 | 无 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 2 | 0 | 1 | 1 |
扫描边
检查器真正检查什么 ​
对“是”证书,检查颜色表恰好为每个输入顶点提供一个合法颜色,再扫描每条输入边
对“否”证书,令顶点表为
有编号边表允许按边编号常数时间检查端点。若只有未索引的邻接表,逐次在线性长的邻接表里查边,并不能声称每次
伪造的三角形颜色
匹配的可行、不可行与最优值证书 ​
二分图匹配的流归约公理库经由网络流的二分图匹配Bipartite matching via maximum flow用单位容量流求二分图匹配,并从终态搜索同时提取 Hall 障碍、等值割和最小顶点覆盖。给出另一个完整任务:输入合法的左右划分及编号边表,既可问“能否饱和左侧”,也可问“最大匹配有多大”。两种问题的证书规格不同,不能只检查输出边是否互不冲突就宣布最大。
对“能饱和左侧”的答案,证书是一组输入边编号。检查编号合法、左右端点都不重复,且边数等于左点数,即得到一个饱和匹配。对“不能饱和”的答案,证书是左点集合
若答案是“最大值为
例如边集
这三类证书均占
推论与应用
NP公理库复杂度类 NPNP · Nondeterministic polynomial time由正实例拥有多项式长度、可在多项式时间内验证的证书所刻画的语言类。中的多项式见证说明肯定实例存在易检查的理由,并不提供寻找它的算法,也没有同时承诺否定实例的证书。二分性例子强在求解器能找到两类证书,且对应的检查条件都已证明;不能从“答案有证据”推出任意 NP 问题都具有这样的双向求解器。
布尔函数的证书复杂度公理库证书复杂度Certificate complexity of Boolean functions · Boolean certificate complexity用足以强制某个固定输入函数值的最少已知坐标数,分别度量 0-证书与 1-证书。则问固定多少个输入坐标能迫使函数值,证书的对象和量词不同。两者都涉及局部理由,但这里传入检查器的是原始输入、答案和额外见证,不是自动限制其只能查看那些坐标。
最大流最小割定理公理库最大流最小割定理Max-flow min-cut theorem以净跨割恒等式和残量可达集证明最大流等于最小割,并给出独立可检查的最优性证书。给出另一种可用接口:核验流可行、割合法及两者值相等,即可确认最优性,而不必重复增广过程。回到本页,可以先独立写出两类检查器,再让它们处理三角形与路径的证书;最后说明一次接受为何只确认当前结果,仍未证明求解器在所有未来输入上终止。
参考资料
- Ross M. McConnell, Kurt Mehlhorn, Stefan Näher, Pascal Schweitzer,Certifying Algorithms,Computer Science Review 5(2),2011,pp. 119–161;链接为 2010 年 8 月 2 日作者稿,§2.1 及 §5,稿件页码与期刊不同。
- Eyad Alkassar, Sascha Böhme, Kurt Mehlhorn, Christine Rizkallah, Pascal Schweitzer,An Introduction to Certifying Algorithms,it — Information Technology 53(6),2011,pp. 287–293,检查器接口与实例验证。