[Cascavel-pm] algoritmo

Luís Fernando lemon em grad.icmc.usp.br
Terça Junho 22 18:30:58 CDT 2004


Digamos que a diferença entre o que eu desejo e o que o que você citou
é exatamente a "aleatoriedade".

Para simplificar:
Se cabe 10 elementos e eu mando inserir 10 (1..10), é para ficar:
1 2 3 4 5 6 7 8 9 10

Se cabe 10 elementos e eu mando inserir 20 (1..20):
1 3 5 7 9 11 13 15 17 19

Se cabe 10 elementos e eu mando inserir 40 (1..40):
1 5 9 13 17 21 25 29 33 37

Entendeu?

Como cada "sample" é pego em intervalos de 1 segundo, no primeiro caso
o intervalo entre um e outro seria de 1 segundo
No segundo, como não coube no buffer, ele excluiu alguns
intermediários, ficando com intervalos de 2 segundos... no terceiro,
com intervalos de 4 segundos.

Obviamente, há "intermediários" disso (por exemplo, 15 elementos
quando só cabem 10) e acho que o método que descrevi funciona para
eles, porém não me parece muito eficiente (tenho a impressão que é
possível fazer em O(1)).

/*

+---------------------------------+
| Luís Fernando Estrozi           |
+---------------------------------+
| Ciência da Computação - USP     |
|                                 |
| mailto:lemon em grad.icmc.usp.br   |
| ICQ#: 25541891                  |
|                                 |
| http://grad.icmc.usp.br/~lemon/ |
+---------------------------------+

There are 10 types of people in the world: Those who understand binary, and those who don't

*/ EOF

|---> Original Message <---> 22/6/2004, 19:47 <---|
Luís,

Aparentemente uma porcentagem do seu objetivo, que não ficou
completamente claro para mim, pode ser obtida deste modo:

A partir do momento em que o buffer estiver completo, você passa a
descartar um ítem aleatório antes de adicionar o novo elemento no final:

$conta=-1;

push(@buff, novo_byte()) while(++$conta < $tamanho);

while(1) {
  splice(@buff, rand($tamanho), 1);
  push @buff, novo_byte();  
}

Compreender a diferença efetiva entre os dois algoritmos está além da
minha capacidade de abstração. Mas assim fica bem mais simples!

Silvio




Mais detalhes sobre a lista de discussão Cascavel-pm