Estruturas de Dados 2

Propaganda
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
Download