Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Java 求{1,2,3}幂集的算法_Java_Algorithm_Set_Hashset - Fatal编程技术网

Java 求{1,2,3}幂集的算法

Java 求{1,2,3}幂集的算法,java,algorithm,set,hashset,Java,Algorithm,Set,Hashset,我觉得这有点令人困惑,因为我从未真正使用过Java集。请有人尝试用以下代码向我展示(最好是通过解释powerset是如何逐渐创建的)好吗(ps我从stackoverflow上的一篇文章中获得了这段代码,所以这要归功于此人): publicstaticvoidmain(字符串[]args){ Set mySet=newhashset(); mySet.add(1); mySet.add(2); mySet.add(3); 用于(集合s:powerSet(mySet)){ 系统输出打印项次; } }

我觉得这有点令人困惑,因为我从未真正使用过Java集。请有人尝试用以下代码向我展示(最好是通过解释powerset是如何逐渐创建的)好吗(ps我从stackoverflow上的一篇文章中获得了这段代码,所以这要归功于此人):

publicstaticvoidmain(字符串[]args){
Set mySet=newhashset();
mySet.add(1);
mySet.add(2);
mySet.add(3);
用于(集合s:powerSet(mySet)){
系统输出打印项次;
}
}
公用静态设置电源集(设置原始设置){
Set Set=新的HashSet();
//如果输入为空,则添加空集并返回
if(originalSet.isEmpty()){
add(newhashset());
返回集;
}
//将原始集合放入arraylist
列表列表=新的ArrayList(originalSet);
//获取第一个元素
T head=list.get(0);
//获取除第一个元素以外的所有元素,并将其放入一个集合中
Set rest=newhashset(list.subList(1,list.size());
//对于上述集合中的每个元素
用于(组:动力组(其余)){
//创建一个新集合
Set newSet=newhashset();
//加头
新闻集添加(标题);
//加上其余的
newSet.addAll(集合);
//将所有新闻集添加到结果中
添加(新闻集);
//添加当前元素
集合。添加(集合);
}
返回集;
}

想想{1,2,3}的功率集。我们可以将其视为以下各项的组合:

{}  
{1} + powerset {2, 3}  
{2} + powerset {3}  
{3} + powerset {}
{1}+powerset{2,3}
这一行为例,它扩展为:

{1} + { {}, {2}, {3}, {2, 3} }
这反过来又成为:

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

代码也是这样做的,使用递归生成较小的幂集,并将每个幂集累加到一个列表中。

想想{1,2,3}的幂集。我们可以将其视为以下各项的组合:

{}  
{1} + powerset {2, 3}  
{2} + powerset {3}  
{3} + powerset {}
{1}+powerset{2,3}
这一行为例,它扩展为:

{1} + { {}, {2}, {3}, {2, 3} }
这反过来又成为:

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

代码也在做同样的事情,使用递归生成较小的功率集,并将每个功率集累加到一个列表中。

除非您告诉我们它属于谁,否则任何人都不会得到信用。这就是credit的意思:我们,读者,知道谁做了这项工作。至于这个问题:你对递归有多满意?换句话说,问题是关于理解递归算法还是关于能够阅读Java实现的特定细节?您是指这个吗。如果是的话,请在你的问题中加入这个链接。我觉得它的评论很好。哪些部分容易混淆?除非你告诉我们信用属于谁,否则信用不会属于任何人。这就是credit的意思:我们,读者,知道谁做了这项工作。至于这个问题:你对递归有多满意?换句话说,问题是关于理解递归算法还是关于能够阅读Java实现的特定细节?您是指这个吗。如果是的话,请在你的问题中加入这个链接。我觉得它的评论很好。什么部分让人困惑?@Burleigh Bear怎么办?进一步扩展{2,3}只会导致{1},{1,2}和{1,3}的重复。嗯,我想我没有真正理解你的解释。我以为你是想展示为战俘工作({1,2,3})。但是你的工作从来没有真正给出答案吗?@Burleigh Bear:我没有给出完整的答案。我只是解释了顶层的工作,并将顶层的一部分下放到了第二层。{2,3}是我没有展开的
{2}+powerset{3}
的结果之一。@Burleigh Bear怎么办?进一步扩展{2,3}只会导致{1},{1,2}和{1,3}的重复。嗯,我想我没有真正理解你的解释。我以为你是想展示为战俘工作({1,2,3})。但是你的工作从来没有真正给出答案吗?@Burleigh Bear:我没有给出完整的答案。我只是解释了顶层的工作,并将顶层的一部分下放到了第二层。{2,3}是
{2}+powerset{3}
的结果之一,我没有展开它。