Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 集合的所有可能集合的列表算法_Algorithm_Set - Fatal编程技术网

Algorithm 集合的所有可能集合的列表算法

Algorithm 集合的所有可能集合的列表算法,algorithm,set,Algorithm,Set,我很难想出一个算法来生成一个集合中所有可能集合的列表。我的意思是,给定一个集合S,我想知道所有可能包含集合S的集合的集合。我可能没有很好地描述它,所以我将给出一个例子,希望能够理解这一点 如果S={1,2,3} 我正在寻找: {{1,2,3} {{1,2},{3} {{1,3},{2} {{2,3},{1} {{1},{2},{3} 虽然我可以手工生成这些函数很繁琐,但我很难想出一个可以用来编写代码的算法。您可以递归地完成,我将向您展示如何从{1,2}中找到{1,2,3}的答案 对于有n个元素的

我很难想出一个算法来生成一个集合中所有可能集合的列表。我的意思是,给定一个集合S,我想知道所有可能包含集合S的集合的集合。我可能没有很好地描述它,所以我将给出一个例子,希望能够理解这一点

如果S=
{1,2,3}

我正在寻找:

{{1,2,3}

{{1,2},{3}

{{1,3},{2}

{{2,3},{1}

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


虽然我可以手工生成这些函数很繁琐,但我很难想出一个可以用来编写代码的算法。

您可以递归地完成,我将向您展示如何从{1,2}中找到{1,2,3}的答案

对于有n个元素的集合,通过解决没有n个元素的问题,如下所示:

{{1 , 2}}
{{1}, {2}}

然后考虑为N-1元素创建的每一个集合。并向该集合的每个元素添加第n个元素,如下所示:

{{1 , 2}}
{{1}, {2}}
{{1,2}}
我们有:

{{1 , 2} , {3}}
{{1 , 2 , 3}}
{{1, 3}, {2}}
{{1} ,{2, 3}}
{{1}, {2}, {3}}
{{1},{2}
我们有:

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

正如你现在看到的,我们解决了3个元素的问题。

你可以像下面的帖子一样使用递归算法,概念是一样的。我早就有答案了


我在这里看到两个独立的任务:

  • 给定N个元素的有序集合,产生所有可能的

  • 给定一个数字N,则生成所有N,其中单个分区定义了S如何划分为子集。这是你的电话号码

然后您需要为每个排列应用每个分区。这将生成所有可能的结果集Q,但其中一些结果集是重复的,例如{{1,2}、{3}和{2,1}{3}。下一步是消除重复项。这有点棘手。解决方案如下

更新

让我们定义一个结果集Q,如果它满足以下条件,则该结果集是唯一的

Q定义为有序集:{P1,P2,P3,…},其中Pi也是元素{Xi1,Xi2,…}的有序集。那么Q是唯一的,如果:


  • 每个集合Pi的元素按升序排列(即Xi1尝试搜索“集合分区”,这就是你想要的。我们可以知道你尝试过什么,或者你只是想为你解决这个问题吗?这听起来像是一个适合动态规划算法的问题。SDP可能有助于有效地计算分区的数量,但如果目标是生成分区,那听起来像是递归问题。我第一次花了一些时间在纸和笔上,手工涂鸦集合。我想到的第一个实现是递归,但由于某种原因,我没有找到解决方案。我看到下面的建议并验证了它确实解决了问题。我能想到的唯一一件事是为什么我自己没有解决它是“大脑放屁”。这将产生{{1,2}、{3}和{2,1}、{3}虽然它们事实上是一样的,谢谢你的提示,我已经相应地更新了我的答案。谢谢。这正是我开始的。出于某种原因,我没有将{3}组合到{1,2}的所有集合。不知道为什么。@nickdu欢迎你,如果这是你正在寻找的,请不要忘记将它标记为答案:)