Menu
Home Explore People Places Arts History Plants & Animals Science Life & Culture Technology
On this page
Knuth's Algorithm X
Algorithm for exact cover problem

Algorithm X is an algorithm for solving the exact cover problem. It is a straightforward recursive, nondeterministic, depth-first, backtracking algorithm used by Donald Knuth to demonstrate an efficient implementation called DLX, which uses the dancing links technique.

We don't have any images related to Knuth's Algorithm X yet.
We don't have any YouTube videos related to Knuth's Algorithm X yet.
We don't have any PDF documents related to Knuth's Algorithm X yet.
We don't have any Books related to Knuth's Algorithm X yet.
We don't have any archived web articles related to Knuth's Algorithm X yet.

Algorithm

The exact cover problem is represented in Algorithm X by an incidence matrix A consisting of 0s and 1s. The goal is to select a subset of the rows such that the digit 1 appears in each column exactly once.

Algorithm X works as follows:

  1. If the matrix A has no columns, the current partial solution is a valid solution; terminate successfully.
  2. Otherwise choose a column c (deterministically).
  3. Choose a row r such that Ar, c = 1 (nondeterministically).
  4. Include row r in the partial solution.
  5. For each column j such that Ar, j = 1, for each row i such that Ai, j = 1, delete row i from matrix A. delete column j from matrix A.
  6. Repeat this algorithm recursively on the reduced matrix A.

The nondeterministic choice of r means that the algorithm recurses over independent subalgorithms; each subalgorithm inherits the current matrix A, but reduces it with respect to a different row r. If column c is entirely zero, there are no subalgorithms and the process terminates unsuccessfully.

The subalgorithms form a search tree in a natural way, with the original problem at the root and with level k containing each subalgorithm that corresponds to k chosen rows. Backtracking is the process of traversing the tree in preorder, depth first.

Any systematic rule for choosing column c in this procedure will find all solutions, but some rules work much better than others. To reduce the number of iterations, Knuth suggests that the column-choosing algorithm select a column with the smallest number of 1s in it.

Example

For example, consider the exact cover problem specified by the universe U = {1, 2, 3, 4, 5, 6, 7} and the collection of sets S = {A, B, C, D, E, F}, where:

  • A = {1, 4, 7};
  • B = {1, 4};
  • C = {4, 5, 7};
  • D = {3, 5, 6};
  • E = {2, 3, 6, 7}; and
  • F = {2, 7}.

This problem is represented by the matrix:

1234567
A1001001
B1001000
C0001101
D0010110
E0110011
F0100001

Algorithm X with Knuth's suggested heuristic for selecting columns solves this problem as follows:

Level 0

Step 1—The matrix is not empty, so the algorithm proceeds.

Step 2—The lowest number of 1s in any column is two. Column 1 is the first column with two 1s and thus is selected (deterministically):

1234567
A1001001
B1001000
C0001101
D0010110
E0110011
F0100001

Step 3—Rows A and B each have a 1 in column 1 and thus are selected (nondeterministically).

The algorithm moves to the first branch at level 1…

Level 1: Select Row A Step 4—Row A is included in the partial solution. Step 5—Row A has a 1 in columns 1, 4, and 7:
1234567
A1001001
B1001000
C0001101
D0010110
E0110011
F0100001
Column 1 has a 1 in rows A and B; column 4 has a 1 in rows A, B, and C; and column 7 has a 1 in rows A, C, E, and F. Thus, rows A, B, C, E, and F are to be removed and columns 1, 4 and 7 are to be removed:
1234567
A1001001
B1001000
C0001101
D0010110
E0110011
F0100001
Row D remains and columns 2, 3, 5, and 6 remain:
2356
D0111
Step 1—The matrix is not empty, so the algorithm proceeds. Step 2—The lowest number of 1s in any column is zero and column 2 is the first column with zero 1s:
2356
D0111
Thus this branch of the algorithm terminates unsuccessfully. The algorithm moves to the next branch at level 1… Level 1: Select Row B Step 4—Row B is included in the partial solution. Row B has a 1 in columns 1 and 4:
1234567
A1001001
B1001000
C0001101
D0010110
E0110011
F0100001
Column 1 has a 1 in rows A and B; and column 4 has a 1 in rows A, B, and C. Thus, rows A, B, and C are to be removed and columns 1 and 4 are to be removed:
1234567
A1001001
B1001000
C0001101
D0010110
E0110011
F0100001
Rows D, E, and F remain and columns 2, 3, 5, 6, and 7 remain:
23567
D01110
E11011
F10001
Step 1—The matrix is not empty, so the algorithm proceeds. Step 2—The lowest number of 1s in any column is one. Column 5 is the first column with one 1 and thus is selected (deterministically):
23567
D01110
E11011
F10001
Step 3—Row D has a 1 in column 5 and thus is selected (nondeterministically). The algorithm moves to the first branch at level 2… Level 2: Select Row D Step 4—Row D is included in the partial solution. Step 5—Row D has a 1 in columns 3, 5, and 6:
23567
D01110
E11011
F10001
Column 3 has a 1 in rows D and E; column 5 has a 1 in row D; and column 6 has a 1 in rows D and E. Thus, rows D and E are to be removed and columns 3, 5, and 6 are to be removed:
23567
D01110
E11011
F10001
Row F remains and columns 2 and 7 remain:
27
F11
Step 1—The matrix is not empty, so the algorithm proceeds. Step 2—The lowest number of 1s in any column is one. Column 2 is the first column with one 1 and thus is selected (deterministically):
27
F11
Row F has a 1 in column 2 and thus is selected (nondeterministically). The algorithm moves to the first branch at level 3… Level 3: Select Row F Step 4—Row F is included in the partial solution. Row F has a 1 in columns 2 and 7:
27
F11
Column 2 has a 1 in row F; and column 7 has a 1 in row F. Thus, row F is to be removed and columns 2 and 7 are to be removed:
27
F11
No rows and no columns remain:
 
Step 1—The matrix is empty, thus this branch of the algorithm terminates successfully. As rows B, D, and F have been selected (step 4), the final solution in this branch is:
1234567
B1001000
D0010110
F0100001
In other words, the subcollection {B, D, F} is an exact cover, since every element is contained in exactly one of the sets B = {1, 4}, D = {3, 5, 6}, or F = {2, 7}. There are no more selected rows at level 3, thus the algorithm moves to the next branch at level 2… There are no more selected rows at level 2, thus the algorithm moves to the next branch at level 1… There are no more selected rows at level 1, thus the algorithm moves to the next branch at level 0…

There are no branches at level 0, thus the algorithm terminates.

In summary, the algorithm determines there is only one exact cover: S* = {B, D, F}.

Implementations

Knuth's main purpose in describing Algorithm X was to demonstrate the utility of dancing links. Knuth showed that Algorithm X can be implemented efficiently on a computer using dancing links in a process Knuth calls "DLX". DLX uses the matrix representation of the exact cover problem, implemented as doubly linked lists of the 1s of the matrix: each 1 element has a link to the next 1 above, below, to the left, and to the right of itself. (Technically, because the lists are circular, this forms a torus). Because exact cover problems tend to be sparse, this representation is usually much more efficient in both size and processing time required. DLX then uses dancing links to quickly select permutations of rows as possible solutions and to efficiently backtrack (undo) mistaken guesses.3

See also

  • Knuth, Donald E. (2000), "Dancing links", in Davies, Jim; Roscoe, Bill; Woodcock, Jim (eds.), Millennial Perspectives in Computer Science: Proceedings of the 1999 Oxford-Microsoft Symposium in Honour of Sir Tony Hoare, Palgrave, pp. 187–214, arXiv:cs/0011047, Bibcode:2000cs.......11047K, ISBN 978-0-333-92230-9.

References

  1. Knuth, Donald (2000). "Dancing links". arXiv:cs/0011047. /wiki/Donald_Knuth

  2. Banerjee, Bikramjit; Kraemer, Landon; Lyle, Jeremy (2010-07-04). "Multi-Agent Plan Recognition: Formalization and Algorithms". Proceedings of the AAAI Conference on Artificial Intelligence. 24 (1): 1059–1064. doi:10.1609/aaai.v24i1.7746. ISSN 2374-3468. https://ojs.aaai.org/index.php/AAAI/article/view/7746

  3. Knuth, Donald (2000). "Dancing links". arXiv:cs/0011047. /wiki/Donald_Knuth