我刚刚发现了一种查找功率集的算法。我用google搜索解决方案,但发现没有任何好处,所以我自己想出了一个。但我想知道它是什么算法,因为我无法在网上或任何书籍中找到它。我的意思是,它有名字吗?与我在一些网站上发现的用于计算功率集的算法相比,我认为我的更好,并且想知道为什么没有人使用它?
这是算法:
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<String> list, int count)
{
result.add(list);
for(int i = count; i < list.size(); i++)
{
List<String> temp = new ArrayList<String>(list);
temp.remove(i);
powerSet(temp, i);
}
}
答案 0 :(得分:3)
主要有两个原因:
O(2^n)
算法。 答案 1 :(得分:3)
查看Rosetta Code Power Set页面。那里有一些递归解决方案的实现(包括Java)。一般来说,递归解决方案意味着一个疯狂的大调用堆栈会减慢速度。
答案 2 :(得分:0)
public final static Set<Set<Character>> powerSet(Set<Character> s){
Set<Set<Character>> result = new HashSet<Set<Character>>();
result.add(s);
for (Character c:s){
Set<Character> subSet = new HashSet<Character>(s);
subSet.remove(c);
result.addAll(powerSet(subSet));
}
return result;
}