Java:生成Powerset
这可能是语言不可知/有用的答案可能只是在伪代码中。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生成这个集合的最佳方法是什么?
这就是你以后(psuedocode)?
set = new List()
foreach (file in dir) {
set.add(file)
foreach (entry in set) {
do-test(set, entry)
}
}
这将生成一组,然后通过集,以及所述集合到一个do-test
方法中的每个条目。
下面是伪代码递归的方法来对所有可能的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当然,如果你首先想要最小的子集。
这将工作,但我实际上意识到我的问题说明是不正确的。往上看。 – 2009-11-04 04:46:32
好的,我已经看到了你的编辑,在我看来,我提议的区别在于,在我的伪代码中,一些子集不止一次提交 - 如果这是你的问题,请澄清,我会提出解决它,TX! – 2009-11-04 05:04:22
我相信,问题在于存在不会由您的解决方案生成的子集。 – 2009-11-04 13:30:25
http://*.com/questions/873413/nonrecursively-generating-all-possible-permutations-of-elements-from-two-arrays – 2009-11-04 05:05:36