当前位置: 首页 > 知识库问答 >
问题:

迭代器迭代给定大小的所有子集[重复]

方夜洛
2023-03-14

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

这可以使用递归方法轻松完成,并存储沿途找到的所有子集。然而,我不希望我的应用程序使用指数级的内存量[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。但是如何从这个当前子集计算下一个子集呢?

共有1个答案

宫俊才
2023-03-14

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

 类似资料:
  • 如果没有以下内容,我如何迭代/?

  • 迭代器 乍看来,迭代器似乎很直观。但凑近了看,你会发现标准STL容器提供了四种不同的迭代器:iterator、const_iterator、reverse_iterator和const_reverse_iterator。很快你会注意到在这四种类型中,容器的insert和erase的某些形式只接受其中一种。那是问题的开始。为什么有四种迭代器?它们之间的关系是什么?它们可以互相转化吗?在调用算法和ST

  • For freedom Christ has set us free. Stand firm, therefore, and do not submit again to a yoke of slavery. 基督释放了我们,叫我们得以自由,所以要站立得稳,不要再被奴仆的轭挟制。(GALATIANS 5:1) 迭代器 迭代,对于读者已经不陌生了,曾有专门一节来讲述,如果印象不深,请复习《迭代》。

  • 在Rust中,迭代器共分为三个部分:迭代器、适配器、消费者。 其中,迭代器本身提供了一个惰性的序列,适配器对这个序列进行诸如筛选、拼接、转换查找等操作,消费者则在前两者的基础上生成最后的数值集合。 但是,孤立的看这三者其实是没有意义的,因此,本章将在一个大节里联系写出三者。 迭代器、适配器、消费者

  • 正如我们之前学到的,在Python中我们可以使用“for”循环来迭代出对象中的内容: >>> for value in [0, 1, 2, 3, 4, 5]: ... print(value) ... 0 1 4 9 16 25 可以使用“for”循环(迭代)的对象称为迭代器。因此,一个迭代器也就是一个遵循了迭代协议的对象。 内置函数“iter”可以用来创建一个迭代对象,这时使用“next”函数

  • 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list、tuple、dict、set、str等; 一类是generator,包括生成器和带yield的generator function。 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。 可以使用isinstance()判断一个对象是否是Iterable对象: >>> from coll