Content deleted Content added
Move exampe to separate section |
→Example: Correct details of example, reformat to show levels, reformat to better show remaining rows and columns |
||
Line 27:
== Example ==
For example, consider the exact cover problem
:* ''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:
:{| border="1" cellpadding="5" cellspacing="0"
! !! 1 !! 2 !! 3 !! 4 !! 5 !! 6 !! 7
|-
! ''A''
|-
! ''B''
| 1 || 0 || 0 || 1 || 0 || 0 || 0
|-
! ''C''
| 0 || 0 || 0 || 1 || 1 || 0 || 1
|-
! ''D''
| 0 || 0 || 1 || 0 || 1 || 1 || 0
|-
! ''E''
| 0 || 1 || 1 || 0 || 0 || 1 || 1
|-
! ''F''
| 0 || 1 || 0 || 0 || 0 || 0 || 1
|}
Algorithm X with Knuth's suggested heuristic for selecting columns solves this problem as follows:
'''Level 0'''
The lowest number of 1s in any column is two and column 1 is the first column with two 1s, thus column 1 is selected (deterministically).
: '''Level 1: Select Row ''A'''''
: Row ''A'' has a 1 in columns 1, 4, and 7. 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 removed and columns 1, 4 and 7 are removed. Row ''D'' remains and columns 2, 3, 5, and 6 remain:
::{| border="1" cellpadding="5" cellspacing="0"
! !! 2 !! 3 !! 5 !! 6
|-
! ''D''
| 0 || 1
|}
: The lowest number of 1s in any column is zero and column 2 is the first column with zero 1s, thus this branch of the algorithm terminates unsuccessfully.
: The algorithm moves to the next branch at level 1.
: '''Level 1: Select Row ''B'''''
: Row ''B'' has a 1 in columns 1 and 4. 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 removed and columns 1 and 4 are removed. Rows ''D'', ''E'', and ''F'' remain and columns 2, 3, 5, 6, and 7 remain:
::{| border="1" cellpadding="5" cellspacing="0"
! !! 2 !! 3 !! 5 !! 6 !! 7
|-
! ''D''
| 0 || 1 || 1 || 1 || 0
|-
! ''E''
| 1 || 1 || 0 || 1 || 1
|-
! ''F''
| 1 || 0 || 0 || 0 || 1
|}
: The lowest number of 1s in any column is one and column 5 is the first column with one 1s, thus column 5 is selected (deterministically).
: Row ''D'' has a 1 in column 5 and thus is selected (nondeterministically).
:: '''Level 2: Select Row ''D'''''
:: Row ''D'' has a 1 in columns 3, 5, and 6. 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 removed and columns 3, 5, and 6 are removed. Row ''F'' remains and columns 2 and 7 remain:
:::{| border="1" cellpadding="5" cellspacing="0"
! !! 2 !! 7
|-
! ''F''
| 1 || 1
|}
:: The lowest number of 1s in any column is one and column 2 is the first column with one 1s, thus column 2 is selected (deterministically).
:: Row ''F'' has a 1 in column 2 and thus is selected (nondeterministically).
::: '''Level 3: Select Row ''F'''''
::: Row ''F'' has a 1 in columns 2 and 7. Column 2 has a 1 in row ''F''; and column 7 has a 1 in row ''F''. Thus row ''F'' is removed and columns 2 and 7 are removed. The matrix is empty, thus this branch of the algorithm terminates successfully.
::: As rows ''B'', ''D'', and ''F'' are selected, the final solution is:
::::{| border="1" cellpadding="5" cellspacing="0"
! !! 1 !! 2 !! 3 !! 4 !! 5 !! 6 !! 7
|-
! ''B''
| 1 || 0 || 0 || 1 || 0 || 0 || 0
|-
! ''D''
| 0 || 0 || 1 || 0 || 1 || 1 || 0
|-
! ''F''
| 0 || 1 || 0 || 0 || 0 || 0 || 1
|}
::: 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 2, thus the algorithm moves to the next branch at level 0.
The algorithm is complete.
In summary, the algorithm determines there is only one exact cover: <math>\mathcal{S}^*</math> = {''B'', ''D'', ''F''}.
== References ==
|