Oi Alessandro,
Muito obrigado pela sua pergunta. Ela vai ajudar a esclarecer várias coisas.
Não entendi o que significa 'ser proporcional ao número n'.
Primeiro, proporcional significa que o número N
de bytes usados pelo seu programa devem ser algo da forma cn
, para alguma constante c
.
Por exemplo, é aceitável que tenhamos N
aproximadamente 3.2 n
, N
aproximadamente 4n
, N
aproximadamente 17n
.
Na prática, isso significa que você pode usar no seu programa vetores com n
, ou 2n
posições,... É evidente que cada posição de um tal vetor deve usar um número constante de bytes, 8 por exemplo.
Estava pensando em gerar todas as permutações logo de cara ...
O espaço para armazenar essas permutações é proporcional a 2n
que é muito maior que cn
.
Uma das ideias bacanas ligadas ao conceito de iteradores é não estourarmos o programa usando espaço para armazernar todos os objetos de algum conjunto potencialmente muito grande.
Iteradores são mecanismos que nos permitem examinarmos itens de um conjunto muito grande sem explodirmos com a memória. Para isso precisamos gerar os itens um após o outro, em alguma ordem, sem armazenar os itens antecessores.
Então essa ideia está ruim?
É uma boa ideia para começar e depois ser refinada.
deve-se gerar as permutações na hora?
Cada permutação deve ser gerada apenas quando for solicitada através de next()
.
Para isso o iterador deve guardar um certo contexto (não sei se esse é um termo apropriado).
Valeu!
P.S. Em um dos próximos EPs, talvez o EP06, vocês terão que examinar (alguns) elementos de um conjunto absurdamente grande.
Para essa tarefa será fundamental gerar elementos do conjunto de uma maneira económica.
Não há a menor chance de armazenarmos todos os elementos.