Java:生成一个Powerset

时间:2009-11-04 02:57:35

标签: java file set permutation powerset

这可能是语言无关/有用的答案可能只是伪代码。

我有一个程序,我想在一系列输入下测试。该程序采用一组文件,其中一个文件被指定为根。我想用所有可能的文件子集运行程序。 (两个子集,包含相同的文件,但具有不同的根,被认为是不同的。)

这是一个相同的例子。假设我有文件A,B和C.我想测试:

{A}, root = A
{B}, root = B
{C}, root = C
{A B}, root = A
{A B}, root = B
{B C}, root = B
{B C}, root = C
{A C}, root = A
{A C}, root = C
{A B C}, root = A
{A B C}, root = B
{A B C}, root = C

等等。我相信这将是powerset。

在给定一个充满文件的目录的情况下,在Java中生成此集合的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

这是针对所有可能的mixes.largest-subsets-first进行测试的递归方法的伪代码:

allofthem = set(listallfiles(thedir))

function trythemall(someset):
  if someset is empty: return
  for entry in someset:
    dotest(someset, root=entry)
  for entry in someset:
    trythemall(someset - set([entry]))

trythemall(allofthem)

当然,如果你想要最小的子集,不难重组。

答案 2 :(得分:0)

这就是你所追求的(伪代码)吗?

set = new List()
foreach (file in dir) {
    set.add(file)
    foreach (entry in set) {
        do-test(set, entry)
    }
}

这将构建一个集合,然后将集合和集合中的每个条目传递给do-test方法。