2009-11-04 47 views
0

這可能是語言不可知/有用的答案可能只是在僞代碼中。Java:生成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 

等等。我相信這將是權力。

在給定文件夾的目錄下,用Java生成這個集合的最佳方法是什麼?

+0

http://stackoverflow.com/questions/873413/nonrecursively-generating-all-possible-permutations-of-elements-from-two-arrays – 2009-11-04 05:05:36

回答

0

這就是你以後(psuedocode)?

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

這將生成一組,然後通過集,以及所述集合到一個do-test方法中的每個條目。

1

下面是僞代碼遞歸的方法來對所有可能的mixes.largest-子集,首先進行測試:

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) 

不難REORG當然,如果你首先想要最小的子集。

+0

這將工作,但我實際上意識到我的問題說明是不正確的。往上看。 – 2009-11-04 04:46:32

+0

好的,我已經看到了你的編輯,在我看來,我提議的區別在於,在我的僞代碼中,一些子集不止一次提交 - 如果這是你的問題,請澄清,我會提出解決它,TX! – 2009-11-04 05:04:22

+0

我相信,問題在於存在不會由您的解決方案生成的子集。 – 2009-11-04 13:30:25