Knuth的算法X用于具有受限块大小的精确覆盖

时间:2016-07-12 10:53:41

标签: algorithm knuth

着名的exact cover problem算法由Donald Knuth提供,称为Knuth的算法X.

Input: List of subsets of a Universal sets
Output: All the possible disjoint subset whose union is Universal set

假设输入为{ab, ac, cd, c, d, a, b}。是否可以使Knuth的算法X使其根据某个预定义的块大小给出输出。例如,如果{2, 2}是块大小设置,它将提供输出:{ab, cd},如果{2,1,1}是块大小设置,它将提供输出:{ab, c, d},{{ 1}}和{ac, b, d}

1 个答案:

答案 0 :(得分:3)

您可以(可选)从输入列表中删除没有块大小的所有子集开始。

原始Knuth的算法X可以使用一组块大小(例如{2,1,1})作为限制使用粗体中的扩展名进行更改,如下所示:

  1. 如果A为空且块大小为空,问题就解决了;终止成功。
  2. 否则请选择一列c(确定性地)。
  3. 选择一行r,以使A[r, c] = 1r中的1个数字在块大小中(非确定性)。< / LI>
  4. 在部分解决方案中包含r
  5. 从一组块大小中删除行r中的1个数
  6. 对于每个jA[r, j] = 1,    从矩阵j中删除列A;    对于每个iA[i, j] = 1,        从矩阵i中删除行A
  7. 在简化矩阵A缩小的块大小上递归重复此算法。