计算功率集的算法

我刚刚发现了一种寻找功率集的算法。 我用google搜索解决方案,但发现没有任何好处,所以我自己想出了一个。 但我想知道它是什么算法,因为我无法在网上或任何书籍中找到它。 我的意思是,它有名字吗? 与我在某些网站上发现的用于计算功率集的算法相比,我认为我的function要好得多,并且想知道为什么没有人使用它?

这是算法:

R <- [] L <- [ e1, e2 ... en ] c <- 0 function: powerSet(L, c) R <- R union L for e in L starting at c powerSet(L\{e}, c) end return R end 

在这里,它是用Java实现的:

 public static void powerSet(List list, int count) { result.add(list); for(int i = count; i < list.size(); i++) { List temp = new ArrayList(list); temp.remove(i); powerSet(temp, i); } } 

请查看Rosetta Code Power Set页面。 那里有一些递归解决方案的实现(包括Java)。 一般来说,递归解决方案意味着一个疯狂的大调用堆栈,这会减慢速度。

主要有两个原因:

  1. 它使用全局变量;
  2. 它是递归的,虽然这并不重要,因为它是一个O(2^n)算法。
 public final static Set> powerSet(Set s){ Set> result = new HashSet>(); result.add(s); for (Character c:s){ Set subSet = new HashSet(s); subSet.remove(c); result.addAll(powerSet(subSet)); } return result; }