A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Construção e Análise de Algoritmos

Apresentações semelhantes


Apresentação em tema: "Construção e Análise de Algoritmos"— Transcrição da apresentação:

1 Construção e Análise de Algoritmos
Prof. Marcos José Negreiros Gomes, DSc Mestrado Integrado Profissional em Computação - UECE/CEFET

2 Algoritmos de Busca, Heurísticas e Metaheurísticas - Módulo III

3 Tópicos... 1. Introdução 2. Métodos Enumerativos 3. Busca de Soluções
2.1. Algoritmo Backtracking 2.2. Algoritmo Sieve 2.2. Algoritmos Branch & Bound 2.3. Programação Dinâmica 3. Busca de Soluções 3.1. Algoritmos de Busca Heurística 3.2. Algoritmos de Busca Exata 4. Bibliografia

4 1. Introdução... Nosso Objetivo:
Conhecer técnicas de exploração do espaço de estados de soluções de um problema. Projetar algoritmos conceitualmente robustos que garantam a exploração do estado de espaço das soluções de um certo problema, sendo cada uma (solução) individualmente obtida em tempo polinomial, desde que o estado de espaços permita tal obtenção..

5 2. Métodos Enumerativos... Usar o computador para responder perguntas como “Quantas maneiras existem para..”, “Há uma maneira para ...” ou “Listar todas as possibilidades para...”, em geral requer uma busca exaustiva para o conjunto de todas as soluções possíveis... Duas técnicas gerais para organizar tais buscas são apresentadas nesta seção. A primeira, Backtracking, trabalha no sentido de estender de forma continua uma solução. Em cada passo do espaço de busca, se uma extensão da solução não for possível , retorna-se (Backtrack) à uma solução parcial menor e tenta-se novamente uma extensão. Esta técnica é muito útil em Jogos, planejamento (Scheduling) A segunda técnica, Sieve (Peneira), é o complemento lógico do Backtracking, naquilo em que tenta-se eliminar as não soluções, ao invés de encontrar soluções. É importante dizer, porém, que apesar dos algoritmos de Backtracking e Sieves serem técnicas genéricas, em geral suas implementações requerem grande esforço computacional.

6 2. Métodos Enumerativos... 2.1. Algoritmo de Backtracking
Descrição do Algoritmo Genérico No caso mais geral, admitimos que uma solução para um problema consiste de um vetor finito (a1, a2, a3,...) mas de tamanho indeterminado, que satisfaz certas restrições. Cada ai é membro de um conjunto finito e linearmente ordenado Ai. Portanto, a busca da solução deve considerar os elementos AaA2 A3  ...  Ai, para i=1,2,..., como soluções potenciais. Inicialmente, começamos com vetores nulos ( ) como nossa solução parcial. As restrições nos dizem quais membros de Aa são candidatos para a1; o chamamos de subconjunto S1. Escolhemos o menor elemento de S1 pex. A1 , e temos uma solução parcial. Em geral, as várias soluções que descrevem as soluções nos dizem quais subconjuntos Sk e Ak constituem candidatos para extender a solução parcial de (a1, a2, a3,..., ak-1) para (a1, a2, a3,..., ak-1, ak). Se a solução parcial (a1, a2, a3,..., ak-1) não admitir possibilidades para ak, então Sk= , e portanto fazemos um backtrack e realizamos uma nova escolha para ak-1. Se não há nenhuma nova escolha possível para ak-1, realizamos um backtrack e faz-se uma nova escolha para ak-2, e assim por diante.

7 2. Métodos Enumerativos... 2.1. Algoritmo Backtracking
O modo de encaminhamento deste algoritmo parece bastante com algoritmos de busca do tipo Depth-Frist Search (ou Busca em Profundidade), sendo pois uma premissa de visualização e entendimento do mesmo. A diferença básica é que neste modo, não existe um grafo conceitual que está sendo explorado, o grafo gerado na busca mostra a árvore de possibilidades da construção de soluções viáveis do problema. Árvore de busca de um problema combinatorial e visualização do processo de Backtracking..

8 2. Métodos Enumerativos... 2.1. Algoritmo Backtracking
Algoritmo Genérico 1. Procedure Backtracking 2. S1:=A1; 3. c:=0; 4. k:=1; 5. While k>0 do 6. begin 7. While Sk <> do 8. begin { Avanço } ak:=(um elemento em Sk); Sk := Sk -{ak}; c:=c+1; If (a1, a2,..., ak) é uma solução Then Armazene-a; k:=k+1; Calcule Sk 15. end; 16. { Backtrack } 17. k:=k-1; 18. end; 19.end; { BackTracking }

9 2. Métodos Enumerativos... 2.1. Algoritmo Backtracking
O Problema de Posicionamento de Rainhas no tabuleiro de Xadrês O problema trata da colocaçõo de quantas rainhas forem possíveis num tabuleiro de Xadrês de tamanho nn, de tal forma que nenhuma rainha possa atacar qualquer outra. Restrição do problema: a rainha pode atacar qualquer outra que esteja no quadrado de sua linha, coluna ou diagonal. Desde que no máximo n rainhas podem ser colocadas num tabuleiro nn, sem que duas ataquem uma a outra, o problema reduz-se a determinar se n rainhas que não atacam, podem ser colocadas no tabuleiro de Xadrês, e de quantas maneiras elas podem ser colocadas.

10 2. Métodos Enumerativos... 2.1. Algoritmo Backtracking
Exatamente uma rainha pode estar em toda coluna, o que significa que a solução pode ser representada por um vetor (a1, a2,..., ak) no qual ai representa a linha da rainha na i-ésima coluna. Além disto, somente uma rainha pode estar em cada linha, e portanto aiaj se ij. Finalmente, desde que as rainhas não podem atacar uma a outra nas diagonais, deveremos ter |ai-aj |  |i-j| se ij. Portanto, para que determinemos se ak pode ser adicionado a (a1, a2,..., ak-1), simplesmente testamos ak com cada ai , onde i<k. Colocando isto em pseudo-código teremos:

11 2. Métodos Enumerativos... 2.1. Algoritmo Backtracking
Algoritmo que avalia se é possível ou não incluir uma rainha nova no tabuleiro 1. Procedure PosiçãoViável (i , k ) // linha, coluna 2. flag=true; 3. i:=1; 4. While (i<k) and flag do 5. begin 6. If ai= ak or | ai - ak |=|i-k| Then flag:=false; 7. i:=i+1; 8. end; 9. End; { PosiçãoViável }

12 2. Métodos Enumerativos... 2.1. Algoritmo Backtracking
Algoritmo para enumerar soluções de posicionamento de Rainhas num Tabuleiro de Xadrês. 1. Procedure BQueens 2. s1:=1; 3. k:=1; 4. While k>0 do 5. begin 6. While sk  n do 7. begin { Avanço } ak := sk; sk := sk + 1; 10. While sk  n and (not PosiçãoViável(sk,k)) do sk:= sk +1; 11. If k=n Then Then armazene (a1, a2,..., ak); 12. k:=k+1; 13. sk:=1 14. While sk  n and PosiçãoViável(sk,k) do sk:= sk +1; 15. end; 16. { Backtrack } 17. k:=k-1; 18. end; 19.end; {BQueens }

13 2. Métodos Enumerativos... 2.3. Programação Dinâmica

14 3. Busca de Soluções... 3.1. Busca heurística

15 3. Busca de Soluções... 3.2. Busca Exata .

16 4. Bibliografia... 1. Campello, Rui E., Maculan, Nelson (1994) - Algoritmos e Heurísticas, desenvolvimento e avaliação de performance - EDUFF/Niterói 2. Stockmeyer, Larry J. (1992) - Computacional Complexity - Handbooks in Operations Research and Management Science, Vol. 3, Ed. by Coffman, Lenstra & Rinnoy Kan 3. Mayr, Ernstb W., Prömel, Hans J., Steger, Angelika (1998) - Lectures on Proof Verification and Approximation Algorithms, Springer-Verlag 4. Yannakakis, Mihalis (1997) - “Computational Complexity”, - in Local Search in Combinatorial Optimization Ed. by Aarts, Emile, Lenstra, Jan K. - Wiley Interscience Series in Discrete Mathematics and Optimization 5. Manber, Udi (1989) - Introduction to Algorithms a Creative Approach, Addison-Wesley 6. Steger, Angelika (2001) - Approximability of NP-Optimization Problems, Cap. 2 - Brazillian School in Combinatorics and Algorithms, March/2001


Carregar ppt "Construção e Análise de Algoritmos"

Apresentações semelhantes


Anúncios Google