Adição com transporte
Adição com transporte (AWC, sigla em inglês) é um algoritmo de geração de números pseudoaleatórios, fazendo parte de um conjunto de algoritmos projetados para produzir uma longa série de números aparentemente aleatórios com base em uma pequena quantidade de dados iniciais. É um dos tipos de geradores de Fibonacci defasado, introduzido por George Marsaglia e Arif Zaman em 1991.[1] "Fibonacci defasado" refere-se ao fato de que cada número aleatório é uma função de dois dos números precedentes em alguns deslocamentos fixos especificados, ou "atrasos".
Algoritmo
editarConsiderando a sequência de Fibonacci clássica
- 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ....
com cada um dos elementos sendo a soma dos dois elementos prévios. Se aplicarmos o operador mod a todos os elementos desta sequência, teremos um exemplo de sequência de Fibonacci defasada com atraso , e uma operação binária , temos
- 0, 1, 1, 2, 3, 5, 8, 3, 1, 4, 5, 9, 4, ....
Para uma definição mais formal e estabelecermos o período dessa sequência, precisamos gerar um conjunto finito X de vetores , tendo como componentes os resíduos de 10 e função iterativa definida por . Como tem uma inversa, para qualquer vetor inicial a sequência é estritamente periódica.[1]
O gerador pseudo-aleatório usando adição com transporte se baseia na sequência periódica acima. Temos como valores iniciais x_0 e x_1 iguais a 0 e 1, respectivamente, mais um bit de transporte inicial de 0. Cada novo dígito da sequência é igual à soma dos dois dígitos anteriores (como na Fibonacci) mais o bit de transporte. Ao resultado é aplicado e o bit de transporte do novo dígito da sequência pode ser 1 ou 0, dependendo se o resultado é maior ou menor que 10. Usando sobrescritos para indicar o bit de transporte, os digito da sequência gerada são
Diferente da sequência-base mostrada acima, , nossos provém do conjunto de vetores de ordem , com . A função de iteração é, portanto
Nos casos em que os vetores iniciais , com ou , com , a sequência é periódica com um período igual a 108. O mesmo período também ocorre no caso no caso de vetores iniciais diferentes dos tipos anteriores, e diferentes de ou , só que o vetor que deu origem à sequência pode não aparecer novamente dentro dela.[1]
Como se baseia nas sequências de Fibonacci defasadas, toda uma nova classe de geradores pode ser criada a partir da escolha de valores específicos dos atrasos e ; assim como do vetor gerador com resíduos gerados em relação a , obtendo-se assim, uma sequência com
O período da sequência gerada será, então, de .[1] Ou seja, devido a sua característica exponencial, estes geradores podem apresentar períodos bastante longos. Por exemplo, ao se escolher tem ordem de e em torno de 20, o período da sequência é de , com um custo computacional baixo, já que usará somente locações de memória e a operação será realizada aproveitando-se a aritmética que já vem embutida na CPU.
Versão complementar
editarO gerador AWC tem uma versão chamada AWC complementar (AWC-c, sigla em inglês).[2] As regras para formação do elemento e o transporte são
com sendo a função indicadora, cujo valor é 1 se seu argumento é verdadeiro, e 0 se falso.
No AWC-c, e são criados como no AWC, mas toma-se o dígito complementar em vez de . Com essa alteração, o período das sequências geradas por meio do AWC-c será de .
Referências
- ↑ a b c d Marsaglia, George; Zaman, Arif (1 de agosto de 1991). «A New Class of Random Number Generators». The Annals of Applied Probability (3). ISSN 1050-5164. doi:10.1214/aoap/1177005878. Consultado em 29 de agosto de 2024
- ↑ Tezuka, Shu; L'Ecuyer, Pierre; Couture, Raymond (1 de outubro de 1993). «On the lattice structure of the add-with-carry and subtract-with-borrow random number generators». ACM Trans. Model. Comput. Simul. (4): 316. ISSN 1049-3301. doi:10.1145/159737.159749. Consultado em 30 de agosto de 2024