迭代器迭代给定大小的所有子集

时间:2016-04-04 12:44:14

标签: java iterator subset

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

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

因此,我想编写一个实现(Java' s)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 。但是如何从这个当前子集计算下一个子集呢?

1 个答案:

答案 0 :(得分:0)

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