Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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
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
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