【问题标题】:Iterator to iterate over all subsets of given size [duplicate]迭代器迭代给定大小的所有子集[重复]
【发布时间】:2016-04-04 12:44:13
【问题描述】:

在我的应用程序中,我需要数组 1..n 的给定大小 k 的所有子集。

这可以使用递归方法轻松完成,并在此过程中存储所有找到的子集。 但是,我不希望我的应用程序使用指数级的内存 [O(n^k)]。

因此,我想编写一个实现(Java 的)Iterator 的类来迭代所述子集。

public class SubsetIterator implements Iterator<int[]> {

    private int k;
    private int[] array;

    public SubsetIterator(int k, int[] array) {
        this.k     = k;
        this.array = array;
    }

    @Override
    public boolean hasNext() {
        //To be implemented.
    }

    @Override
    public int[] next() {
        //To be implemented.
    }
}

所以我可以这样使用它:

SubsetIterator iter = new SubsetIterator(k, array);

while (iter.hasNext) {
    int[] next = iter.next();
    //Do stuff
}

显然我们需要存储由next() 返回的当前子集,它被初始化为1..k。但是如何从当前子集计算下一个子集呢?

【问题讨论】:

  • 以前很多人都做过同样的事情,我也是。请检查hasNext()方法here

标签: java iterator subset


【解决方案1】:

如果您的用例可能,我认为您应该采用存储所有子集的方法。否则每次使用迭代器时都会分配相同数量的内存,这会使 GC 工作非常困难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2015-01-01
    相关资源
    最近更新 更多