计算功率集的算法

时间:2009-09-14 16:33:11

标签: java algorithm math

我刚刚发现了一种查找功率集的算法。我用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);
  }
}

3 个答案:

答案 0 :(得分:3)

主要有两个原因:

  1. 它使用全局变量;
  2. 它是递归的,虽然这并不重要,因为它是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;
}