在我的应用程序中,我需要一个给定大小的 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 。但是如何从这个当前子集计算下一个子集呢?
答案 0 :(得分:0)
我认为你应该采用存储所有子集的方法,如果你的用例可能的话。否则,每次使用迭代器时都会分配相同数量的内存,这会使GC非常困难。