Você está na página 1de 18

Algoritmos Probabilísticos

Monte Carlo e LasVegas

Aula 27

Leila Silva 1
Algoritmos Probabilísticos
 Algoritmos vistos até agora foram determinísticos. Ao executarmos esses
algoritmos duas vezes para a mesma entrada, obedecemos ao mesmo fluxo
de execução e obtemos exatamente o mesmo resultado.
 Algoritmos probabilísticos são diferentes. A execução depende da entrada e
de alguns eventos aleatórios, que podem fazer com que duas execuções para
a mesma entrada obedeça a fluxos de execução diferentes e por
consequência, forneçam resultados diferentes.

Entrada (i) Algoritmos Saída S(i,r)


Evento Probabilísticos
Aleatório (r)

Leila Silva 2
Algoritmos Probabilísticos
Existem muitos métodos de algoritmos probabilísticos. Iremos
ilustrar dois deles:
Monte Carlo
Las Vegas
Aplicações
 Simuladores
 Sistemas de pesquisa de opinião pública
 Os princípios são usados em muitos algoritmos de
Bioinformática, Computação Distribuída, Computação Quântica,
etc.

Leila Silva 3
Algoritmos Probabilísticos
Monte Carlo
Solução com uma margem de erro
O usuário decide se aceita ou não a solução
Tempo de processamento mais rápido
Las Vegas
A solução é correta
A solução obtida probabilisticamente é checada
Tempo de processamento pode ser alto

Leila Silva 4
Monte Carlo
Problema: Sejam n números inteiros em ordem
arbitrária. Encontrar um número que pertença à
metade superior (maior ou igual à mediana),
considerando a ordem dos elementos.
Caso desejem resolver de forma determinística o
problema como fariam?

Leila Silva 5
Monte Carlo
 Algumas soluções determinísticas:
 Ordenar e pegar qualquer número de índice superior a n/2: O(n log n)
 Pegar o maior deles: O(n)
 Aplicar o algoritmo de máximo com um contador de elementos menores
que o máximo corrente. Quando este contador chegar em n/2 +1 pára o
algoritmo e devolve o número: O(n/2)
 Caso n seja muito, muito grande, o tempo de processamento é
significativo.
 Com algoritmos probabilísticos é possível resolver o problema com um
número constante de operações em relação a n, com uma confiabilidade
aceitável. Vamos ver?

Leila Silva 6
Monte Carlo
 Solução probabilística:
 Escolha aleatoriamente dois números xi e xj, i ≠ j. Seja xi o maior deles, logo xi ≥ xj.
 Ou xi, que é o maior, pertence à metade superior, ou não pertence. A probabilidade
de xi não pertencer à metade superior é ½.
 A probabilidade de ambos, xi e xj, não pertencerem à metade superior é ½ . ½ = ¼ .
 A probabilidade de pelo menos um deles pertencer à metade superior é a negação
de nenhum deles pertencer: 1 – ¼ = ¾ . Neste caso, o elemento que pertenceria
seria xi pois ele é o maior.
 Assim, escolhendo-se apenas dois números a chance do maior deles pertencer à
metade superior é 75% !!!!
 A margem de erro é grande, pois teríamos 25% de chance de estarmos com uma
solução errada. Para diminuir o erro, estendemos o mesmo procedimento para
mais números.

Leila Silva 7
Monte Carlo
 Solução probabilística:
 Escolha aleatoriamente k números x1, x2, ..., xk. Seja xmaior o maior deles.
 A probabilidade de nenhum dos k números pertencer à metade superior é .
 A probabilidade de pelo menos um deles pertencer, no caso o maior deles, é a
negação de nenhum deles pertencer: 1- .
 Alguns valores possíveis de k

k Probabilidade de sucesso : 1-
10 0,999
20 0,999999
100 Erro desprezível

Leila Silva 8
Monte Carlo
Solução probabilística:
Logo, o algoritmo se resume a escolher aleatoriamente 100
números, aplicar o algoritmo de máximo para saber qual é o
maior deles e retornar esse número. A chance de erro é
desprezível.
Como n pode ser enorme, o tempo de processamento do
algoritmo é constante em relação a n.
Como efetuamos uma escolha aleatória de números,
computacionalmente?

Leila Silva 9
Números Aleatórios
Computacionalmente, sempre teremos um algoritmo para
determinar uma dada escolha. Logo, não é possível simular a
aleatoriedade verdadeira.
Existem métodos que geram números pseudoaleatórios e isto
é o suficiente para as aplicações. Esses números obedecem
uma função que é periódica, mas com período muito grande
de forma que a repetição do número não é percebida por um
algoritmo que use o gerador de números pseudoaleatórios
para selecionar o próximo número aleatório.
Um dos métodos de geração de números pseudoaleatórios
mais efetivos é o método de congruência linear, que vocês já
estudaram quando viram funções de hash.
Leila Silva 10
Números Aleatórios
 Método de Congruência Linear
 Escolha um inteiro como semente r(1). Esse número obedece a um evento externo,
podendo ser, a hora corrente em microssegundos, o número de vezes que seu time foi
campeão, ou qualquer outro evento externo ao problema que você queira fixar.
 Os próximos números pseudoaleatórios são gerados pela aplicação da função:
r(i) = (r(i-1).b+1) mod t, em que b e t são constantes escolhidas de forma adequada.
 Knuth estudou em profundidade essa função e sugeriu as seguintes diretrizes para a
escolha dessas constantes:
 A variável t precisa ser muito grande, pelo menos da ordem de milhões, e pode ser

potência de 2 ou 10 se isso for conveniente;


 A variável b precisa ser um dígito menor que t, e a sua representação decimal deve

terminar em x21, onde x é par.


 Com essas escolhas Knuth afirma que repetições de números na sequência de
números gerada pela aplicação da função ocorrerão em períodos muito longos e
imperceptíveis para as aplicações.
 Os números gerados por essa função estão no intervalo fechado de 0 a t-1.

Leila Silva 11
Monte Carlo
A maioria das linguagens provêm uma função pré-definida que escolhe
um número aleatório em um dado intervalo. Seja random(a,b) esta
função.
Usando random, podemos expressar o algoritmo resolvido pelo método
de Monte Carlo como:
algoritmo NumeroSuperior(X,n,k): inteiro
início
maior := -∞
para i = 1, 2, ... k faça
j = random(1,n)
se X[j] >= maior então maior:= X[j]
retorne maior
fim

Leila Silva 12
Las Vegas
No método Las Vegas, a solução obtida sempre é testada para verificar
se é uma solução válida. Logo não há a margem de erro associada. A
solução será sempre correta.
Problema: Seja S um conjunto com n elementos, e seja S1, S2, ..., Sk, uma
coleção de subconjuntos distintos de S, cada um deles contendo
exatamente r elementos, tal que k ≤ . Colora cada elemento de S
com uma de duas cores, branco ou azul, tal que cada subconjunto Si
contenha pelo menos um elemento azul e pelo menos um elemento
branco.
Observe que embora os subconjuntos sejam distintos, eles podem não
ser disjuntos, ou seja, um elemento pode pertencer a mais de um
subconjunto.

Leila Silva 13
Las Vegas
 Solução pelo método Las Vegas:
 Pegue cada elemento de S e aleatoriamente escolha uma das duas cores
para colorir, independente da escolha feita para os outros elementos.
 O algoritmo é simples, mas pode levar a uma coloração que não seja válida, ou
seja, os elementos de um dos subconjuntos podem ser ou todos brancos ou
todos azuis. Qual a probabilidade disso acontecer?
 A probabilidade de todos os r elementos de Si serem coloridos brancos é dada
por .
 A probabilidade de pelo menos um dos k subconjuntos ser colorido todo
branco é Pb = . Como k ≤ .
 A probabilidade de se obter uma coloração inválida é pelo menos ½, pois
equivaleria a soma da probabilidade de ser todo branco com a probabilidade
de ser todo azul. Pinv = Pb+ Pa ≤ ¼ + ¼ = ½.

Leila Silva 14
Las Vegas
 Como a probabilidade de insucesso não é 1, isso é uma prova de que sempre
existe uma coloração válida.
 O método Las Vegas checa a solução obtida, verificando, para cada
subconjunto, se aparecem pelo menos dois elementos com cores distintas.
Assim que essa propriedade for detectada para um dado subconjunto, verifica-
se o próximo subconjunto. Se a propriedade for válida em todos os
subconjuntos, então a coloração estabelecida pelo método é válida. Caso a
propriedade falhe em algum dos subconjuntos, o processo reinicia com novas
atribuições aleatórias de cores para todos os elementos e repete-se a
verificação da solução obtida. O processo continua até que uma coloração
válida seja obtida.
 Para esse problema, o tempo médio esperado para a obtenção de uma
coloração válida é de 2.
 Observe que o algoritmo só encerra ao encontrar uma resposta correta para o
problema.
Leila Silva 15
Las Vegas
algoritmo ColoreSubconjunto(S,n,k,r)
{- S : vetor contendo n elementos para coloração, r é a quantidade de elementos de um
subconjunto e k a quantidade de subconjuntos. Cada subconjunto i da coleção está armazenado no
vetor de C[i]. -}
início
achou := falso
enquanto not achou faça
para i = 1, 2, ..., n faça S[i].cor: = random(1,2)
j := 1
enquanto j <= k && valida(C, j, r) faça j := j+1
se j > k então {achou := true; imprima(C)}
fim

função valida(C, j, r): booleano


início
cor:= C[j][1].cor; t := 2;
enquanto t <= r && C[j][t].cor = cor faça t:=t+1
se t > r então retorne False senão retorne True
fim

Leila Silva 16
Exercícios Recomendados
Udi Manber: Cap 6 (Exercícios 6.57)

Leila Silva 17
Leitura Recomendada
Udi Manber: Cap 6 (Seção 6.9).

Leila Silva 18

Você também pode gostar