首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:生成Powerset

Java:生成Powerset
EN

Stack Overflow用户
提问于 2009-11-04 10:57:35
回答 3查看 1.3K关注 0票数 0

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

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

下面是一个相同的示例。假设我有文件A、B和C。我想用以下命令进行测试:

代码语言:javascript
复制
{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中生成此集合的最佳方式是什么?

EN

回答 3

Stack Overflow用户

发布于 2009-11-04 11:05:53

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

票数 2
EN

Stack Overflow用户

发布于 2009-11-04 11:31:38

下面是递归方法的伪代码,用于对所有可能的混合进行测试。最大子集-优先:

代码语言:javascript
复制
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)

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

票数 1
EN

Stack Overflow用户

发布于 2009-11-04 11:02:07

这就是你想要的(psuedocode)吗?

代码语言:javascript
复制
set = new List()
foreach (file in dir) {
    set.add(file)
    foreach (entry in set) {
        do-test(set, entry)
    }
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1671467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档