Combinatorial generation 2026-11-05
Combinatorial generation enumerates finite objects satisfying a specified structure, such as permutations, subsets or set partitions. A generation procedure must explain both completeness, meaning every required object appears, and uniqueness, meaning objects are not emitted twice under the chosen equivalence convention. Counting the objects is a different task from writing them all down.
For all length-three binary strings, a Gray code order is 000,001,011,010,110,111,101,100. Consecutive strings differ in exactly one bit. More generally, the reflected binary Gray code is for , using bitwise exclusive or. Its map is invertible: recover each binary digit of by accumulating the exclusive or of the higher Gray code digits. Thus all objects occur exactly once.
A one-bit update can be cheap while reporting a whole object is expensive. Writing every length- binary string explicitly takes at least bit writes, even if the generation state changes only once per object. Useful performance measures therefore distinguish initialization, delay between objects, working memory and the unavoidable output size.
Joe Sawada Created 2026-10-20 Updated 2026-11-05
Joe Sawada studies combinatorial generation: efficient ways to list all objects in a specified family. His author homepage highlights Gray codes, where consecutive objects differ by a small change, and De Bruijn sequences, which encode many short words through overlapping windows. These viewpoints make the order of generation part of an algorithm's design.[ref]