Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Força Bruta IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 1/36 Força Bruta ● Técnica de Projeto de Algoritmos por Força Bruta ● Introdução ● Busca: Seqüencial e “String Matching” ● Ordenação: Métodos da Seleção da Bolha ● Busca Exaustiva ● Resumo IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 2/36 Força Bruta ● Introdução ● É a mais simples estratégia de projeto de algoritmos ● Solução direta e mais simples para resolver um problema, usualmente baseada no próprio enunciado do problema e nas definições dos conceitos envolvidos. IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 3/36 Força Bruta ● Introdução ● Aplicar a “força” dos computadores, ao invés do intelecto do programador.... ● “Just do It”!!!! ● Usualmente, é a técnica de programação mais fácil de se aplicar. IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 4/36 Força Bruta ● Introdução (Justificativa) ● Apesar desta técnica raramente gerar algoritmos eficientes, é uma importante técnica para projeto de algoritmos; ● É aplicável a uma ampla variedade de problemas; IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 5/36 Força Bruta ● Introdução (Justificativa) ● Pode ser empregada em diversas situações comuns porém importantes: ● Encontrar o maior elemento de uma lista; ● Somar N números; IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 6/36 Força Bruta ● Introdução (Justificativa) ● Alternativa válida quando se deseja resolver um problema “pequeno” através de um algoritmo “simples e direto”. ● Para alguns problemas, a “força bruta” gera algoritmos razoáveis, práticos e sem limitações no tamanho da instância(Ex.: String matching, multiplicação de matrizes). IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 7/36 Força Bruta ● Introdução (Justificativa) ● O esforço para projetar algoritmos mais eficientes pode não compensar o trabalho, quando o tamanho das instâncias, ou a quantidade de problemas a resolver, é pequena (velocidade aceitável) IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 8/36 Força Bruta ● Algoritmos de Busca por Força Bruta ● Qual a forma mais direta de encontrar um elemento em uma lista? ● Busca Seqüencial!!!! IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 9/36 Força Bruta ● Busca Seqüencial : Pseudo-Código IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 10/36 Força Bruta ● Busca Seqüencial : ● Método Força Bruta Clássico, simples e (relativamente) ineficiente! ● Comportamento Assintótico: O(n)(pior caso) ● Melhor Caso? ● Caso médio? IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 11/36 Força Bruta ● String Matching: ● Dada uma seqüência de caracteres(string) de tamanho N, verificar se uma outra string de tamanho M<=N é sub-string de N. IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 12/36 Força Bruta ● String Matching: Algoritmo 1.Alinha no início do texto 2.Mova para a direita, comparando cada caractere do padrão com o caractere no texto, até: • Todos os caracteres sejam coincidentes; • Um “não-casamento” seja encontrado; 5.Enquanto o padrão não for encontrado, e o texto não for completamente percorrido, realinhar o padrão uma posição a direita e repetir o passo 2. IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 13/36 Força Bruta ● String Matching: Pseudo-Código IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 14/36 Força Bruta ● String Matching: ● Eficiência: O(nm) Exemplo: NOBODY NOTICED HIM NOT NOT NOT NOT NOT NOT NOT NOT ● IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 15/36 Força Bruta ● Ordenação ● Qual a maneira mais direta de ordenar um vetor numérico? ● Localizar o menor elemento, e substitui-lo com o primeiro elemento do vetor; ● Realizar o mesmo processo para o vetor remanescente [2..N] ● Repetir o processo N vezes... IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 16/36 Força Bruta ● Ordenação ● Qual a maneira mais direta de ordenar um vetor numérico? ● Localizar o menor elemento, e substitui-lo com o primeiro elemento do vetor; ● Realizar o mesmo processo para o vetor remanescente [2..N] ● Repetir o processo N vezes... IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 17/36 Força Bruta ● Ordenação por Seleção - Pseudo-Código IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 18/36 Força Bruta ● Ordenação por Seleção – Eficiência IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 19/36 Força Bruta ● Ordenação por Seleção – Exemplo 89 45 68 90 29 34 17 IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 20/36 Força Bruta ● Ordenação por Seleção – Exemplo 89 45 68 90 29 34 17 17 45 68 90 29 34 89 IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 21/36 Força Bruta ● Ordenação por Seleção – Exemplo 89 45 68 90 29 34 17 17 45 68 90 29 34 89 17 29 68 90 45 34 89 IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 22/36 Força Bruta ● Ordenação por Seleção – Exemplo 89 45 68 90 29 34 17 17 45 68 90 29 34 89 17 29 68 90 45 34 89 17 29 34 90 45 68 89 IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 23/36 Força Bruta ● Ordenação por Seleção – Exemplo 89 45 68 90 29 34 17 17 45 68 90 29 34 89 17 29 68 90 45 34 89 17 29 34 90 45 68 89 17 29 34 45 90 68 89 IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 24/36 Força Bruta ● Ordenação por Seleção – Exemplo 89 45 68 90 29 34 17 17 45 68 90 29 34 89 17 29 68 90 45 34 89 17 29 34 90 45 68 89 17 29 34 45 90 68 89 17 29 34 45 68 90 89 IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 25/36 Força Bruta ● Ordenação por Seleção – Exemplo 89 45 68 90 29 34 17 17 45 68 90 29 34 89 17 29 68 90 45 34 89 17 29 34 90 45 68 89 17 29 34 45 90 68 89 17 29 34 45 68 90 89 17 29 34 45 68 89 90 IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 26/36 Força Bruta ● Ordenação por Bolha Compara elementos adjacentes de uma lista, verificando se eles estão fora de ordem : se estiverem, troque-os; ● Ao fazer isto, o maior elemento acaba “flutuando” para o topo da lista, como uma bolha; ● Repita o processo para a lista com n-1 elementos restante, eliminando-se o último(maior) elemento. ● Após n-1 passos, a lista está ordenada. ● IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 27/36 Força Bruta ● Ordenação por Bolha - Pseudo-Código IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 28/36 Força Bruta ● Ordenação por Bolha - Eficiência IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 29/36 Força Bruta ● Ordenação Bolha – Exemplo 89--45 68 90 29 34 17 45 89--68 90 29 34 17 45 68 89--90 29 34 17 45 68 89 90--29 34 17 45 68 89 29 90--34 17 45 68 89 29 34 90—-17 45 68 89 29 34 17 90 45--68 89 29 34 17 45 68--89 29 34 17 45 68 89--29 34 17 45 68 29 89--34 17 45 68 29 34 89—-17 45 68 29 34 17 89 IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 30/36 Força Bruta - Prós e Contras: ● Prós: ● ● ● Aplicabilidade... Simplicidade Algoritmos simples e funcionais ● ● ● ● Busca String Matching Multiplicação de matrizes Vários algoritmos “padrão” utilizam esta técnica: ● ● Soma/produto de seqüências numéricas Localização de maior/menor elemento IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 31/36 Força Bruta - Prós e Contras: ● Contras: ● ● ● Raramente fornece algoritmos eficientes Usualmente fornece algoritmos altamente ineficientes, inaplicáveis a instâncias médias ou grandes Existem melhores técnicas para projeto de algoritmos.... IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 32/36 Busca Exaustiva ● ● ● Abordagem “Força Bruta” para localizar soluções para problemas de otimização; Encontrar um elemento em um conjunto que cresce exponencialmente com o tamanho da entrada – esta abordagem envolve testar “todas” as possibilidades..... Busca Exaustiva é uma estratégia Força Bruta para problemas combinatoriais. IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 33/36 Busca Exaustiva ● Método: ● Construir uma forma de listar todas as situações possíveis para o problema, de forma sistemática ● Todas as soluções são testadas ● Nenhuma solução é repetida ● Avaliar as soluções uma a uma, armazenando a melhor solução até o momento; ● Ao finalizar a busca, retornar a melhor solução. IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 34/36 Busca Exaustiva ● Exemplo: Caixeiro Viajante Encontrar o circuito Hamiltoniano mais curso em um grafo conectado ponderado. IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 35/36 Busca Exaustiva ● Exemplo: Caixeiro Viajante ● Eficiência: (n-1)! IF64C – Estruturas de Dados 2 – Engenharia da Computação – Prof. João Alberto Fabro - Slide 36/36