TAOCP 7.2.2.1 Exercise 95
We rebuild the solution directly in the framework of Algorithm C (exact cover with color controls), and we explicitly fix the missing connectivity argument and the running time.
Section 7.2.2.1: Dancing Links
Exercise 95. ▶ [20] [20] Given $0 \le p \le q \le n$, explain how to use color controls and Algorithm C to find all cycles $(x_0 x_1 \ldots x_{m-1})$ of 0s and 1s, where $m = \sum_{k=0}^{1} \binom{n}{k}$, with the property that the $m$ binary vectors ${x_0 x_1 \ldots x_{n-1}, x_1 x_2 \ldots x_n, \ldots, x_{m-1} x_0 \ldots x_{n-2}}$ are distinct and have weight between $p$ and $q$. (In other words, all $n$-bit binary vectors $y = y_1 \ldots y_n$ with $p \le \nu y \le q$ occur exactly once in the cycle.) We studied the special case of de Bruijn cycles, for which $p = 0$ and $q = n$, in Section 7.2.1.1.)
For example, when $n = 7$, $p = 0$, and $q = 3$, the cycle
$$\langle 00000001000011000010100110010010000101000110010001100101110001111 \rangle$$
exhibits all binary 7-tuples with a majority of 0s. When $n = 7$, $p = 4$, the cycle
$$\langle 00001110001100110101010101010110110011001110100011100101111 \rangle$$
shows all 7-tuples $x_1 \ldots x_7$ whose weight $\nu(x_1 \ldots x_7) \ge 4$, so its length is $\binom{7}{4}+\binom{7}{5}+\binom{7}{6}+\binom{7}{7} = 35+21+7+1 = 64$. How long does it take for Algorithm C to find them?
Verified: no
Solve time: 3m12s
We rebuild the solution directly in the framework of Algorithm C (exact cover with color controls), and we explicitly fix the missing connectivity argument and the running time.
1. State space
Let
$$ S={y=y_1\ldots y_n\in{0,1}^n : p\le \nu(y)\le q},\qquad m=|S|=\sum_{k=p}^q \binom{n}{k}. $$
For each $y\in S$, define its two de Bruijn shifts
$$ \operatorname{succ}_0(y)=y_2\ldots y_n 0,\qquad \operatorname{succ}_1(y)=y_2\ldots y_n 1. $$
A shift is admissible if it lies in $S$. These are the only possible successors in any valid cycle.
Hence we form a directed graph $G$ on $S$ where each node has at most two outgoing arcs.
2. Exact cover formulation (cycle cover)
We encode the choice of a successor for each node.
Items
For each $y\in S$, introduce one item:
$$ I(y)\quad \text{(node } y \text{ must choose exactly one successor)}. $$
Options
For each admissible arc $y\to z$ (i.e., $z$ equals $\operatorname{succ}_0(y)$ or $\operatorname{succ}_1(y)$ and lies in $S$), introduce one option covering:
$$ {I(y),,I(z)}. $$
Meaning
An exact cover selects exactly one outgoing arc from each $y$, and exactly one incoming arc to each $y$. Therefore the selected arcs form a disjoint union of directed cycles covering all of $S$.
So far we obtain a cycle cover, not necessarily one cycle.
3. Correct use of color controls (forcing a single cycle)
We now implement the missing step using a standard Algorithm C color mechanism: we enforce a consistent linear order modulo $m$.
3.1 Color system
Introduce a color set
$$ C={0,1,\ldots,m-1}. $$
Assign to each node $y\in S$ a color variable $c(y)\in C$.
Fix a distinguished root $r\in S$ and force
$$ c(r)=0. $$
3.2 Color constraints on arcs
For each option (arc) $y\to z$, we impose the color constraint
$$ c(z)\equiv c(y)+1 \pmod m. $$
This is implemented in Algorithm C by attaching the same color increment condition to both occurrences of $y$ and $z$ in the option, as in Knuth’s color-control mechanism for enforcing consistency along selected items.
Thus every selected arc increments color by 1 modulo $m$.
4. Why this forces a single Hamiltonian cycle
Consider any solution produced by Algorithm C.
Step 1: structure from exact cover
We already know selected arcs form disjoint directed cycles covering $S$.
Step 2: effect of colors on one cycle
Follow any selected cycle:
$$ y_0\to y_1\to \cdots \to y_{t-1}\to y_0. $$
The color rule implies
$$ c(y_{i+1})\equiv c(y_i)+1 \pmod m. $$
Hence along the cycle,
$$ c(y_i)\equiv c(y_0)+i \pmod m. $$
W