TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 3 1
Agenda Estrategias de Projeto Algoritmos Refinamentos Sucessivos Força Bruta Dividir e conquistar Bibliografia 2
Força Bruta Éa mais simples das estratégias/ténicas de projeto de algoritmo, uma solução direta para resolver um problema, geralmente baseada diretamenteno enunciado do problema e nas definições dos conceitos envolvidos A força éde um computador e não do intelecto de alguém. Somente faça Geralmente, a estratégia de força bruta é uma das mais fáceis de aplicar 3
Força Bruta Exemplos: Calculando a soma de n números (a > 0, n sendo um inteiro não negativo), Multiplicação de duas matrizes n por n Ordenação por seleção, Busca seqüencial Apesar de ser raramente uma fonte de algoritmos eficientes ou brilhantes, a técnica força bruta é uma importante estratégia de projeto de algoritmos Força bruta é aplicável a uma ampla variedade de problemas (Soma de N numeros, det. Maior elemento da lista) 4
Força Bruta Para alguns problemas importantes (ordenação, busca, multiplicação de matrizes, string matching, etc), A técnica de força bruta fornece: Algoritmos razoáveis Algoritmos de valor prático Algoritmos sem limitações quanto ao tamanho da instância. 5
Força Bruta por que usar? O esforço para projetar um algoritmo mais eficiente pode não ser justificável se: Somente algumas poucas instâncias de um problema Necessitarem ser resolvidas (velocidade aceitável) Mesmo ineficiente em geral, pode ser útil para Resolver problemas com instâncias pequenas Propósito teórico e educacional 6
Força Bruta Aplicação da técnica força bruta em problemas de ordenação. Dada uma lista de n elementos ordenáveis (números, caracteres, strings), rearranjá los em ordem crescente. Qual seria o método mais direto para resolver o problema da ordenação? 7
Força Bruta Exemplo de Busca rotina BuscaPadrao(texto[0... n-1], padrao[0... m-1]) para i 0 atén m faça j 0 enquanto j < m e padrao[j] = texto[i + j] faça j j + 1 se j = m então retorne i retorne -1 8
Tipos de Algorimos em que se aplica essa tecnica Selection sort (Ordenação por seleção ) Baseadoemse passarsempreo menorvalor do vetorparaa primeira posição(ouo maiordependendoda ordemrequeridadepoiso de segundomenorvalor paraa segundaposição, e assiméfeito sucessivamente com os(n-1) elementos restantes, até os últimos dois elementos. 9
Selection sort (Ordenação por seleção ) Exemplo 934651278 193465278 129346578 123946578 123496578 123459678 123456978 123456798 123456789 10
Bubble Sort Comparar elementos adjacentes de uma lista e permutá los se eles estiverem fora de ordem. Fazendo isso repetidamente, acabamos empurrando (bubbling up) o maior elemento para a última posição da lista. A próxima passagem empurra o segundo maior e assim por diante, atéapós n 1 passos, a lista ser ordenada. 11
Busca Sequencial Compara elementos sucessivos de uma dada lista com um dada chave de busca até: Encontrar um elemento similar (busca bem sucedida) ou A lista ser exaurida sem encontrar um elemento similar (busca mal sucedida) 12
Prós FB Ampla aplicabilidade Simplicidade Fornece algoritmos razoáveis para alguns Problemas importantes Fornece algoritmos padrão para tarefas computacionais simples. 13
Considerações finais FB Os principais méritos de uma estratégia força bruta são a ampla aplicabilidade e simplicidade O principal demérito é uma baixa eficiência da maioria dos algoritmos força bruta. 14
Dividir e conquistar. Provavelmente a tecnica mais conhecida. Divide a instancia do problema em duas ou mais instancias menores. Resolver as instâncias menores recursivamente Obtem a solução para as instâncias originais (maiores) através da combinação destas soluções. 15
Dividir e conquistar. O paradigma de dividir e conquistar envolve 3 passos: Dividir Conquistar Combinar 16
Dividir e conquistar. 17
Exemplo dividir e conquistar Computar a soma de n números ao,..., an 1 Se n>1, podemos dividir o problema em duas instâncias do mesmo problema: Soma dos primeiros n/2 números Soma dos n/2 números restantes. Uma vez estas duas somas computadas, adicionamos seus valores para obter o resultado final: 18
Exemplo dividir e conquistar continuação Esta éuma maneira eficiente de computar a soma de n números? Émais eficiente do que uma adição força bruta? 19
Porém, freqüentemente, o tempo gasto na execução das três etapas do algoritmo dividir & conquistar, é menor do que a resolução por outros métodos. A estratégia dividir & conquistar produz os algoritmos mais importantes e eficientes em ciência da computação Importante: A estratégia dividir & conquistar é idealmente adaptada a computação paralela. 20
Tipos de Algorimos em que se aplica tecnica D&C: Mergesort (Sort Ordenar, Merge Unir) 21
Quicksort Escolha um elemento da lista, denominado pivô; Rearranje a lista de forma que todos os elementos anteriores ao pivô sejam menores que ele, e todos os elementos posteriores ao pivô sejam maiores que ele. Ao fim do processo o pivô estaráem sua posição final e haverá duas sublistas não ordenadas. Essa operação é denominada partição; Recursivamente ordene a sublista dos elementos menores e a sublista dos elementos maiores; 22
Quicksort - Exemplo Ordenar o arranjo 0 5 3 1 9 8 2 4 7 Determina pivo 5 Rearranja lista 03124 59 8 7 (partição) Ordena recursivamente sublistas (03124 e 987): 01234 5789 23
Considerações : Dividir e Conquistar éuma técnica geral de projeto de algoritmos que Resolve uma instância do problema dividindo a em diversas instância menores (idealmente de tamanhos similares) Resolvendo cada uma delas recursivamente Combinando suas soluções para obter a solução para a instância original do problema Muitos algoritmos eficientes são baseados nesta técnica. Contudo, ela pode ser inaplicável e inferior a soluções algorítmicas mais simples. 24
Bibliografia BIBLIOGRAFIA BÁSICA AZEREDO, Paulo A. Métodos de Classificação de Dados. Rio de Janeiro: Ed. 1 Campus, 1996. LAUREANO, M. Estrutura de Dados com Algoritmos e C. 1ª Ed. São Paulo: Brasport, 2 2008. PEREIRA, Silvio do Lago. Estruturas de Dados Fundamentais Conceitos e 3 Aplicações. 7.ed. São Paulo: Érica, 2008. BIBLIOGRAFIA COMPLEMENTAR KOFFMANN, E.B. Objetos, Abstração, Estrutura de Dados e Projetos. 1ª Ed. Rio de 4 Janeiro: LTC, 2008. MORAES, Celso Roberto. Estruturas de Dados e Algoritmos.Uma abordagem didática. 5 Edição revista e Ampliada. São Paulo: Editora Futura, 2003. WIRTH, Niklaus. Algoritmos e estruturas de dados. Rio de Janeiro: Prentice Hall do 6 Brasil, 1989. ZIVIANI, N. Projeto de Algoritmos com implementações em Pascal e C, Editora 7 Pioneira, 1999. 25