Escolar Documentos
Profissional Documentos
Cultura Documentos
Projeto de algoritmos
Fora bruta (tentativa e erro)
Emerson Henrique da Silva
Curso de Cincia da computao
Anlise e projeto de algoritmos
Contextualizao
Mtodo de busca exaustiva, tambm conhecido como gerar e
testar.
Resoluo de problemas por mtodo trivial.
Enumera todas as possveis solues e verifica cada candidata.
Exemplo: encontrar todos os divisores de um nmero natural.
16/05/2014
Contextualizao
A tcnica, no entanto, tem sua relevncia no projeto de
algoritmos.
Em dados casos no preciso explorar algoritmos mais
eficientes, pois o ganho mnimo.
Ex: somar n nmeros.
Busca sequencial
Qual a forma mais simples de encontrar um valor numa lista?
Busca sequencial
Busca sequencial(A[0..n],K)
// K = Chave de busca
// A = Lista de tamanho n
A[n] := K;
i := 0;
Enquanto A[i] K faa
i := i + 1;
Se i < n
retornar i
seno
retornar -1.
16/05/2014
Busca de padro
Outro exemplo a busca de padres. Dado um
texto de tamanho n, verifica-se uma cadeia de
tamanho m, com m < n:
BuscaPadrao(texto[0 ... n-1], padrao[0 ... m-1])
Para i 0 at n m faa
j 0;
Enquanto j < m e padrao[j] = texto[i + j] faa
j j + 1;
Se j = m ento
Retornar i
Retornar -1
Definio
Na localizao de uma cadeia de tamanho m sobre
um texto de tamanho n, tem um custo, no pior caso
de O(m + n) e consumo constante de memria.
Razovel para:
Entradas pequenas;
Alguns problemas importantes (Selection sort, bubble
sort).
16/05/2014
Exerccios
Dados n pontos no plano, de coordenadas P(x,y),
calcular quais deles esto mais prximos. A
distncia entre dois pontos Pi(xi,yi) e Pj(xj,yj)
definida pela distncia euclidiana:
, =
( ) +( )
Exerccios
Problema da mochila:
Dados n itens com:
Pesos: w1, w2, ..., wn
Valores: v1, v2, ..., vn
E uma mochila com capacidade W
Peso
Valor
20
30
10
50
10
8
16/05/2014
Backtracking
Essa uma tcnica que minimiza os efeitos da fora
bruta pela eliminao de mltiplas solues que
podem ser descartadas sem serem examinadas.
Um exemplo disso a busca em profundidade:
Um rvore percorrida de cima para baixo e da
esquerda para direita.
Quando a pesquisa falha, ou encontrado uma folha,
entra em funcionamento o backtracking, que faz com
que o sistema retorne pelo mesmo caminho para buscar
outras alternativas.
Backtracking
10
16/05/2014
Backtracking
Problema das 8-rainhas
Tentativa(inteiro i)
{iniciar seleo de posio para a selecionar o i-sima rainha;
Faa
{ Fazer prxima seleo;
Se (rainha est salva)
{ posicionar rainha;
Se (i < n)
{ Tentativa(i+1);
Se (insucesso)
remover rainha;
}
}
} Enquanto (sem sucesso E h mais posies);
}
11
Backtracking
i
Cada insero de
rainha no tabuleiro, a
posio X[i]
armazenada.
Uma nova chamada
recursiva efetuada
Tentativa (i + 1),
iniciando um novo
ciclo:
12
16/05/2014
Backtracking
Se h cruzamento de
rainhas, ento muda a
nova rainha para a
coluna direita:
E assim se repete at
no haver mais
conflitos. Quando isso
ocorre, uma nota
Tentativa(i+1)
levantada:
13
Backtracking
Na terceira linha,
encontra-se mais um
conflito, ento abre-se
nova tentativa.
O conflito ainda
persiste, ento abre-se
nova tentativa.
i
14
16/05/2014
Backtracking
Continua em conflito.
i
E segue at s ltima
possibilidade. Ao
detectar a exausto, o
backtracking retoma a
recurso para Tentativa
(i 1)
15
Backtracking
Ao voltar do nvel 3 para
o 2, retomando o estado
anterior:
E continua avanando a
rainha direta.
Encerrando, abre nova
Tentativa (i+1),
reiniciando o processo
at a soluo.
16
16/05/2014
Backtracking
Ao voltar do nvel 3
para o 2, retomando o
estado anterior:
E continua avanando a
rainha direta:
17
Exerccio
1.
Como possvel reduzir o espao de busca do problema das 8rainhas usando o backtracking?
2.
3)
Visite http://www.turbulence.org/spotlight/thinking/chess.html
18