While Algorithm X is generally useful as a succinct explanation of how the exact cover problem may be solved, Knuth's intent in presenting it was merely to demonstrate the utility of the dancing links technique via an efficient implementation he called DLX. The exact cover problem is represented in Algorithm X using a matrix A consisting of 0s and 1s. The goal is to select a subset of the rows so that the digit 1 appears in each column exactly once. The nondeterministic choice of r means that the algorithm essentially clones itself into 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.
|Country:||Central African Republic|
|Published (Last):||20 August 2019|
|PDF File Size:||12.5 Mb|
|ePub File Size:||17.79 Mb|
|Price:||Free* [*Free Regsitration Required]|
In computer science , dancing links is a technique for reverting the operation of deleting a node from a circular doubly linked list. It is particularly useful for efficiently implementing backtracking algorithms, such as Donald Knuth 's Algorithm X for the exact cover problem.
Some of the better-known exact cover problems include tiling , the n queens problem , and Sudoku. The name dancing links , which was suggested by Donald Knuth , stems from the way the algorithm works, as iterations of the algorithm cause the links to "dance" with partner links so as to resemble an "exquisitely choreographed dance. As the remainder of this article discusses the details of an implementation technique for Algorithm X, the reader is strongly encouraged to read the Algorithm X article first.
The idea of DLX is based on the observation that in a circular doubly linked list of nodes,. This works regardless of the number of elements in the list, even if that number is 1. Knuth observed that a naive implementation of his Algorithm X would spend an inordinate amount of time searching for 1's.
When selecting a column, the entire matrix had to be searched for 1's. When selecting a row, an entire column had to be searched for 1's. After selecting a row, that row and a number of columns had to be searched for 1's. To improve this search time from complexity O n to O 1 , Knuth implemented a sparse matrix where only 1's are stored.
At all times, each node in the matrix will point to the adjacent nodes to the left and right 1's in the same row , above and below 1's in the same column , and the header for its column described below. Each row and column in the matrix will consist of a circular doubly-linked list of nodes. Each column will have a special node known as the "column header," which will be included in the column list, and will form a special row "control row" consisting of all the columns which still exist in the matrix.
Selecting a column with a low node count is a heuristic which improves performance in some cases, but is not essential to the algorithm. In Algorithm X, rows and columns are regularly eliminated from and restored to the matrix.
Eliminations are determined by selecting a column and a row in that column. If a selected column doesn't have any rows, the current matrix is unsolvable and must be backtracked. When an elimination occurs, all columns for which the selected row contains a 1 are removed, along with all rows including the selected row that contain a 1 in any of the removed columns.
The columns are removed because they have been filled, and the rows are removed because they conflict with the selected row. To remove a single column, first remove the selected column's header. Next, for each row where the selected column contains a 1, traverse the row and remove it from other columns this makes those rows inaccessible and is how conflicts are prevented. Repeat this column removal for each column where the selected row contains a 1.
This order ensures that any removed node is removed exactly once and in a predictable order, so it can be backtracked appropriately. If the resulting matrix has no columns, then they have all been filled and the selected rows form the solution. To backtrack, the above process must be reversed using the second algorithm stated above. One requirement of using that algorithm is that backtracking must be done as an exact reversal of eliminations.
Knuth's paper gives a clear picture of these relationships and how the node removal and reinsertion works, and provides a slight relaxation of this limitation. It is also possible to solve one-cover problems in which a particular constraint is optional, but can be satisfied no more than once. Dancing Links accommodates these with primary columns which must be filled and secondary columns which are optional. This alters the algorithm's solution test from a matrix having no columns to a matrix having no primary columns and if the heuristic of minimum one's in a column is being used then it needs to be checked only within primary columns.
Knuth discusses optional constraints as applied to the n queens problem. The chessboard diagonals represent optional constraints, as some diagonals may not be occupied. If a diagonal is occupied, it can be occupied only once. From Wikipedia, the free encyclopedia. Play media. Millennial Perspectives in Computer Science. Bibcode : cs Retrieved Information Processing Letters. Donald Knuth. Hidden categories: Articles containing video clips.
Knuth's Algorithm X
In computer science , dancing links is a technique for reverting the operation of deleting a node from a circular doubly linked list. It is particularly useful for efficiently implementing backtracking algorithms, such as Donald Knuth 's Algorithm X for the exact cover problem. Some of the better-known exact cover problems include tiling , the n queens problem , and Sudoku. The name dancing links , which was suggested by Donald Knuth , stems from the way the algorithm works, as iterations of the algorithm cause the links to "dance" with partner links so as to resemble an "exquisitely choreographed dance.
I had to write a sudoku solver for one of my classes and I read that dancing links and algorithm x was one way to do it . I then read some things around the internet to apply dancing links to sudoku solving  . If you read the Wikipedia entry on exact cover problems there is a section on sudoku as an exact cover problem  this is one thing necessary to understand in order to implement a sudoku solver with algorithm x and dancing links. Knuth even talks about dancing links in his new Christmas Tree Lecture  specifically here at . Basically he uses dancing links to solve for certain n in the problem he sets up in that lecture. Wow, this really is good I started it and skimmed the rest of it the first 34 pages are explanations and algorithms of dancing links and the rest of the pages is all exercises and answers to those exercises.
Donate to arXiv