📑 Table of Contents

In theoretical computer science, a certifying algorithm is an algorithm that outputs, together with a solution to the problem it solves, a proof that the solution is correct. A certifying algorithm is said to be efficient if the combined runtime of the algorithm and a proof checker is slower by at most a constant factor than the best known non-certifying algorithm for the same problem.[1]

The proof produced by a certifying algorithm should be in some sense simpler than the algorithm itself, for otherwise any algorithm could be considered certifying (with its output verified by running the same algorithm again). Sometimes this is formalized by requiring that a verification of the proof take less time than the original algorithm, while for other problems (in particular those for which the solution can be found in linear time) simplicity of the output proof is considered in a less formal sense.[1] For instance, the validity of the output proof may be more apparent to human users than the correctness of the algorithm, or a checker for the proof may be more amenable to formal verification.[1][2]

Implementations of certifying algorithms that also include a checker for the proof generated by the algorithm may be considered to be more reliable than non-certifying algorithms. For, whenever the algorithm is run, one of three things happens: it produces a correct output (the desired case), it detects a bug in the algorithm or its implication (undesired, but generally preferable to continuing without detecting the bug), or both the algorithm and the checker are faulty in a way that masks the bug and prevents it from being detected (undesired, but unlikely as it depends on the existence of two independent bugs).[1]

Examples

edit

Many examples of problems with checkable algorithms come from graph theory. For instance, a classical algorithm for testing whether a graph is bipartite would simply output a Boolean value: true if the graph is bipartite, false otherwise. In contrast, a certifying algorithm might output a 2-coloring of the graph in the case that it is bipartite, or a cycle of odd length if it is not. Any graph is bipartite if and only if it can be 2-colored, and non-bipartite if and only if it contains an odd cycle. Both checking whether a 2-coloring is valid and checking whether a given odd-length sequence of vertices is a cycle may be performed more simply than testing bipartiteness.[1]

Analogously, it is possible to test whether a given directed graph is acyclic by a certifying algorithm that outputs either a topological order or a directed cycle. It is possible to test whether an undirected graph is a chordal graph by a certifying algorithm that outputs either an elimination ordering (an ordering of all vertices such that, for every vertex, the neighbors that are later in the ordering form a clique) or a chordless cycle. And it is possible to test whether a graph is planar by a certifying algorithm that outputs either a planar embedding or a Kuratowski subgraph.[1]

The extended Euclidean algorithm for the greatest common divisor of two integers x and y is certifying: it outputs three integers g (the divisor), a, and b, such that ax + by = g. This equation can only be true of multiples of the greatest common divisor, so testing that g is the greatest common divisor may be performed by checking that g divides both x and y and that this equation is correct.[1]

See also

edit
  • Sanity check, a simple test of the correctness of an output or intermediate result that is not required to be a complete proof of correctness

References

edit
  1. ^ a b c d e f g McConnell, R.M.; Mehlhorn, K.; Näher, S.; Schweitzer, P. (May 2011), "Certifying algorithms", Computer Science Review, 5 (2): 119–161, doi:10.1016/j.cosrev.2010.09.009.
  2. ^ Alkassar, Eyad; Böhme, Sascha; Mehlhorn, Kurt; Rizkallah, Christine (June 2013), "A Framework for the Verification of Certifying Computations", Journal of Automated Reasoning, 52 (3): 241–273, arXiv:1301.7462, doi:10.1007/s10817-013-9289-2.

📚 Artikel Terkait di Wikipedia

Extended Euclidean algorithm

( a , b ) {\displaystyle \operatorname {xgcd} (a,b)} . This is a certifying algorithm, because the gcd is the only number that can simultaneously satisfy

Sanity check

can also be done by human debuggers as with human-written code. Certifying algorithm Checksum Fermi problem Mental calculation Proof of concept Fecko

Hungarian algorithm

The Hungarian method is a combinatorial optimization algorithm that solves the assignment problem in polynomial time and which anticipated later primal–dual

Approximation algorithm

certifying the quality of the returned solutions in the worst case. This distinguishes them from heuristics such as annealing or genetic algorithms,

Root-finding algorithm

However, for polynomials, there are specific algorithms that use algebraic properties for certifying that no root is missed and for locating the roots

Library of Efficient Data types and Algorithms

to compute the sign of a radical expression. LEDA makes use of certifying algorithms to demonstrate that the results of a function are mathematically

NSA product types

National Security Agency (NSA) used to rank cryptographic products or algorithms by a certification called product types. Product types were defined in

Public-key cryptography

public key and a corresponding private key. Key pairs are generated with algorithms based on mathematical problems termed one-way functions. Security of public-key