从子集列表中查找所有分区

时间:2012-05-26 21:52:57

标签: algorithm subset data-partitioning

给出一个特定子集的列表,如

S = [ {1, 2}, {3, 4}, {1}, {2, 3}, {4}, {3} ]

和“宇宙”设置如

U = {1, 2, 3, 4}

可以使用哪种优雅而简单的算法来查找由S组成的U的所有可能分区?在这个例子中,这样的分区包括

{1, 2} {3, 4}
{1, 2} {3} {4}

1 个答案:

答案 0 :(得分:1)

使用recursion

根据是否使用第一个元素,将问题分成两个较小的问题:

  • 使用{1,2}和其余任何集合进行分区。
  • 分区时不使用{1,2},而是使用其余任何一组。

这两个选项涵盖了所有可能性。

  • 第一个是通过仅使用{3,4}
  • [ {3, 4}, {1}, {2, 3}, {4}, {3} ]进行分区来解决的
  • 通过仅使用{1,2,3,4}
  • [ {3, 4}, {1}, {2, 3}, {4}, {3} ]进行分区来解决第二个问题

要了解如何解决这些较小的问题,请参阅this similar question