Subtração com empréstimo
Subtração com empréstimo (SWB, 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
[editar | editar código-fonte]Considerando 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, ....
Diferente do que ocorre na geração usando a adição com transporte (AWC) , cada novo elemento na sequência deste gerador é produzido subtraindo-se o dígito com atraso 1 e o bit de empréstimo (inicialmente igual a 0 para o dígito de atraso 1, que é o 1 em negrito na seq. de Fibonacci acima) do dígito com atraso 2 (o 0 em negrito, nessa mesma sequência). Se a diferença resultar em um número positivo, o bit de empréstimo é igualado a zero; se não, soma-se 10 à diferença obtida e o bit de empréstimo recebe o valor 1. Logo, usando 0 e 1 como valores iniciais, com bit de empréstimo igual a 0, geramos a sequência
Para uma definição mais formal, precisamos gerar um conjunto finito X de vetores , tendo como componentes e ,resíduos de 10 e . A função de geração da sequência é então definida como
Que pode ser resumido de maneira mais informal como sendo , sendo o empréstimo atualizado com , com sendo a função indicadora..
Já que a ordem da subtração importa no caso deste gerador, toda uma nova gama de geradores SWB pode ser criada por meio da transposição dos elementos atrasados na forma , com o bit de empréstimo definido de acordo . O gerador como é definido inicialmente[1] é chamado de SWB-II, enquanto que a forma modificada é classificada como SWB-I.[2]
Como formulação geral e de modo a serem estabelecidos os períodos respectivos desta classe de geradores, definimos um conjunto finito X de vetores , com os valores de resíduos em relação à uma base qualquer , e valores de atraso e , sendo tendo a função iterativa definida para SWB-I
e a função iterativa do gerador SWB-II
Com os valores das variáveis atribuídos, pode-se garantir que será gerada uma sequência periódica, tendo no caso do SWB-I o valor de ; enquanto que para o SWB-II será .[1]
Referências
- ↑ a b c 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