0

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

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

这是一个相同的例子。假设我有文件 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

等等。我相信这将是动力装置。

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

4

3 回答 3

2

您说的是 Java,但请看一下:Permutations, Combinations, and Variations using C# Generics

于 2009-11-04T03:05:53.033 回答
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)

当然,如果您首先想要最小的子集,那么重组并不难。

于 2009-11-04T03:31:38.027 回答
0

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

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

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

于 2009-11-04T03:02:06.987 回答