Buscar

Técnicas de Programação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

FORÇA BRUTA 
Definição: Uma solução direta para resolver um problema, geralmente baseada 
diretamente no enunciado do problema e nas definições dos conceitos 
envolvidos. 
 
 A força é do computador e não intelectual; 
 Enumeram-se todas as combinações possíveis e avaliam se satisfazem o 
problema; 
 Estratégia mais trivial para a solução de problemas; 
 Normalmente é muito fácil de aplicar; 
 Desempenho considerado muito ruim. 
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. 
Utilizado principalmente em problemas de busca e ordenação ou quando um 
esforço maior para o desenvolvimento de um algoritmo mais eficiente não se 
justificar. 
 
Vantagens 
 Ampla aplicabilidade; 
 Simplicidade; 
 Algoritmos razoáveis para problemas importantes; 
 Algoritmos padrão para tarefas computacionais. 
 
Contras 
 Raramente fornece algoritmos eficientes; 
 Alguns algoritmos são muito vagarosos; 
 Não tão criativo quantas outras técnicas de desenvolvimento. 
 
Algumas aplicações 
 Ordenação (bubble sort); 
 Busca; 
 Criptografia (checar sistematicamente todas as possíveis chaves até a 
chave correta ser encontrada); 
 
 
 
 
 
 
 
 
 
 
 
DIVIDIR E CONQUISTAR 
 
Definição: O paradigma Divisão e Conquista consiste em dividir o problema a 
ser resolvido em partes menores, encontrar soluções para as partes, e então 
combinar as soluções obtidas em uma solução global. 
 
 Dividir: dividir a instância do problema original em duas ou mais 
instâncias menores, considerando-as como subproblemas. 
 Conquistar: resolver os subproblemas caso esses sejam suficientemente 
pequenos, caso contrário continuar a divisão. 
 Combinar: combinar as soluções encontradas em cada subproblema, 
compondo uma solução para o problema original. 
 
Esta técnica é bastante utilizada em desenvolvimento de algoritmos paralelos, 
onde os subproblemas são tipicamente independentes um dos outros, podendo 
assim serem resolvidos separadamente. 
 
Vantagens 
 Indicado para aplicações que tem restrição de tempo. 
 É de fácil implementação. 
 Simplifica problemas complexos. 
 
Desvantagens 
 Necessidade de memória auxiliar. 
 Repetição de Subproblemas. 
 Tamanho da pilha (número de chamadas recursivas e/ou armazenadas 
pode causar estouro de memória). 
 
Algumas aplicações 
 Multiplicação de inteiros longos. 
 Menor distância entre pontos. 
 Ordenação rápida (quicksort) e por intercalação (mergesort). 
 Pesquisa em árvore binária. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
PROGRAMAÇÃO DINÂMICA 
 
Definição: A Programação Dinâmica pode ser caracterizada como um processo 
sequencial de tomada de decisões, onde uma decisão ótima global pode ser 
obtida através da otimização de subproblemas (ou ótimos locais) individuais. 
 
Na Programação Dinâmica resolvem-se os problemas de pequena dimensão e 
guardam-se as soluções em tabelas dinâmicas, a fim de evitar redundância de 
cálculo, ou seja, uma solução parcial obtida somente é calculada uma única vez. 
Este procedimento é importante porque, diferentemente da técnica de divisão e 
conquista, aqui cada subproblema é dependente de pelo menos um outro. A 
solução final é obtida combinando as soluções dos problemas menores. 
 
Vantagens 
 Pode ser utilizada num grande número de problemas de otimização 
discreta. 
 Não necessita de muita precisão numérica. 
 Útil para aplicar em problemas que exigem teste de todas as 
possibilidades. 
 
Desvantagens 
 Necessita de grande espaço de memória 
 A complexidade espacial pode ser exponencial 
 
Algumas aplicações 
 Multiplicação de várias matrizes 
 Projeto de sistemas confiáveis 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ALGORITMOS GULOSOS 
 
Definição: De forma geral, os algoritmos gulosos escolhem a opção que parece 
ser a melhor no momento (escolha ótima), e esperam que desta forma consiga-se 
chegar a uma solução ótima global, mas nem sempre é possível chegar a uma 
solução ótima. 
 
Os algoritmos gulosos tomam decisões com base apenas na informação 
disponível, sem se preocupar com os efeitos futuros de tais decisões, isto é, eles 
nunca reconsideram as decisões tomadas, independentemente das consequências. 
Não há, portanto, necessidade de avaliar as alternativas nem de empregar 
procedimentos elaborados permitindo que decisões anteriores sejam desfeitas. 
 
Vantagens 
 Geralmente fácil de construir algoritmo 
 Baixa complexidade 
 Heurísticas (intuição) ajudam na otimalidade 
Desvantagens 
 Geralmente não obtém o ótimo 
 Garantir otimalidade é difícil 
 Podem gerar soluções muito ruins 
 
Algumas aplicações 
 Árvore geradora minima; 
 Caminho minimo; 
 Cobertura de conjuntos. 
 
 
 
 
 
 
 
 
 
 
BACKTRACKING 
Definição: é um tipo de algoritmo que representa um refinamento da busca por 
força bruta, em que múltiplas soluções podem ser eliminadas sem serem 
explicitamente examinadas. 
Vantagens 
 Forma bastante fácil de implementar um problema que de outra forma 
seria muito mais complexo de se resolver; 
 Linguagens de programação em logica oferecem suporte. 
Desvantagens 
 Programas de backtracking, a não ser que se programe 
restrições(constraints) executam sempre uma busca exaustiva e tenderão à 
explosão combinatória; 
 Programas de Backtracking são por natureza, Combinatórios; 
 Pode exigir muita memoria para problemas grandes. 
Algumas aplicações 
 Problemas de satisfação de restrições (palavras cruzadas); 
 Linguagens de programação em logica.

Outros materiais