Técnicas de Projeto de Algoritmos

Documentos relacionados
ANÁLISE DE ALGORITMOS: PARTE 3

Área que visa determinar a complexidade (custo) de um algoritmo, com isso é possível:

Algoritmos Avançados Análise de Complexidade

Quantidade de memória necessária

03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II

BC1424 Algoritmos e Estruturas de Dados I Aula 05 Custos de um algoritmo e funções de complexidade

Complexidade de Algoritmos

Algoritmo e Introdução a Programação. Prof. Josino Rodrigues

4º 20/10/2003. ÍNDICE

Programação II Aula 07

Computação I: Representações de Algoritmos

Teoria dos Grafos Aula 6

Objetivo: Desenvolver algoritmos a partir de problemas

O mais leve e o mais pesado Algoritmos de Ordenação

Técnicas de Programação III Análise de Algoritmos (Continuação)

ALGORITMOS COM SELEÇÃO 1 - ESTRUTURA CONDICIONAL (ESTRUTURAS DE CONTROLE)

BCC202 - Estrutura de Dados I

ESTRUTURAS DE CONTROLE ESTRUTURAS DE REPETIÇÃO

ALGORITMOS AULA 1. Profª Amanda Gondim

Teoria da computabilidade Indecidíveis Decidíveis

Planificação a médio e longo prazo. Matemática B. 11º Ano de escolaridade. Total de aulas previstas: 193. Ano letivo 2015/2016

Aula 10: Tratabilidade

MC102 - Algoritmos e programação de computadores. Aula 16: Busca e Ordenação em vetores

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO

Este conceito é bastante simples e será útil e conveniente nos itens seguintes, na definição das estruturas básicas de controle de execução.

Estudo heurístico de performance de estratégias de investimento simples baseadas na média móvel e desvio padrão no mercado ForEx

ESCOLA SECUNDÁRIA DE LOUSADA

3 Aprendizado por reforço

5. Expressões aritméticas

PESQUISA OPERACIONAL. UNIDADE 1 Introdução à Pesquisa Operacional. Prof. Me. Carlos Guimarães

PESQUISA OPERACIONAL APLICADA A LOGÍSTICA

Algoritmos e Estruturas de Dados I

Lógica de Programação e Algoritmos

Algoritmos e Programação. AULA 21: Recursividade UNIVERSIDADE FEDERAL DE PELOTAS CENTRO DE DESENVOLVIMENTO TECNOLÓGICO CIÊNCIA DA COMPUTAÇÃO

Método BubbleSort. Estrutura de Dados II Prof Jairo Francisco de Souza

Conceitos Básicos. Professor: Juliano Lucas Gonçalves.

CAPÍTULO 5 ESTRUTURAS DE REPETIÇÃO

P L A N O D E E N S I N O A N O D E ÁREA / DISCIPLINA: CIÊNCIAS DA NATUREZA / MÁTEMÁTICA

I. Correção de Algoritmos Não-Recursivos

Algoritmos e Programação

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

ESTRUTURAS DE REPETIÇÃO - PARTE 1

Métodos de Ordenação

Introdução aos Métodos Numéricos. Instituto de Computação UFF

a a = a² Se um número é multiplicado por ele mesmo várias vezes, temos uma a a a = a³ (a elevado a 3 ou a ao cubo) 3 fatores

II. Funções de uma única variável

Programação Linear - Parte 3

Lista de Exercícios Programação Inteira. x 2 0 e inteiros.

Como modelar o comportamento de um sistema? MAB-515

Grafos: algoritmos de busca

Algoritmos e Programação I

Agrupamento de Escolas do Fundão

PROGRAMAÇÃO I. Introdução

Aula 7: Portas Lógicas: AND, OR, NOT, XOR, NAND e NOR

Programação: Vetores

ALGORITMOS COM SELEÇÃO 1 - ESTRUTURA CONDICIONAL (ESTRUTURAS DE CONTROLE)

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Lógica Aula 3. Definição. Estrutura de decisão

Pesquisa Operacional. Definição. Sumário 2/23/2016

Algoritmos I Aula 8 Estrutura de controle: seleção

Preenchimento de Polígonos

AGRUPAMENTO DE ESCOLAS ANSELMO DE ANDRADE

TRANSMISSÃO DE DADOS Prof. Ricardo Rodrigues Barcelar

RESPOSTA Princípio Fundamental da contagem

Algoritmos 2 - Introdução

Critérios de divisibilidade Para alguns números como o dois, o três, o cinco e outros, existem regras que permitem verificar a divisibilidade sem se

CAPÍTULO 3 INSTRUÇÕES BÁSICAS

Bacharelado em Ciência da Computação Matemática Discreta

LÓGICA DE PROGRAMAÇÃO INTRODUÇÃO À PROGRAMAÇÃO DE COMPUTADORES

1. Avaliação de impacto de programas sociais: por que, para que e quando fazer? (Cap. 1 do livro) 2. Estatística e Planilhas Eletrônicas 3.

Prof. Dr. Marco Antonio Leonel Caetano

Técnicas Básicas de Compressão de Vídeo

MATEMÁTICA PARA CEF PROFESSOR: GUILHERME NEVES

MATEMÁTICA PLANEJAMENTO 2º BIMESTRE º B - 11 Anos

PROGRAMADOR JAVA. Aula 0X31 Semanas - 0b Instrutor : Léo Billi

Instituto de Computação Bacharelado em Ciência da Computação Disciplina: Computação Gráfica Primeira lista de exercícios

Introdução à Teoria dos Grafos

Pesquisa Operacional. Evanivaldo Castro Silva Júnior

1 bases numéricas. capítulo

Concurso Público Conteúdo

Ajuste de mínimos quadrados

FACULDADE CAMPO LIMPO PAULISTA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto a Análise de Algoritmos I Lista de Exercícios 1

CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano

Sistemas de numeração e conversão de bases Decimal e binário

PPM CONTEÚDO. Lógica de programação Programação para manufatura Sistemas supervisorios PROGRAMAÇÃO PARA MANUFATURA 05/03/2009

Experimentos e Resultados

Modelo de Programação Paralela

Arquivos Sequenciais Ordenados Fisicamente

# $ % & ' ( ) * ' ( ) *! " " Orientador +, -

Excel - Funções Estatísticas

Algoritmo Genético. Inteligência Artificial. Professor: Rosalvo Ferreira de Oliveira Neto

ANÁLISE DE ALGORITMOS (INF 1721)

FACULDADE PITÁGORAS PRONATEC

MATRIZES DE REFERÊNCIA COMPETÊNCIAS E HABILIDADES QUE SERÃO AVALIADAS: ENSINO FUNDAMENTAL I ANOS INICIAIS

PESQUISA OPERACIONAL I

CADERNO DE EXERCÍCIOS ALGORITMOS

VERSÃO RESPOSTAS PROVA DE MÉTODOS QUANTITATIVOS

7. Introdução à Complexidade de Algoritmos

TEMA 2 PROPRIEDADES DE ORDEM NO CONJUNTO DOS NÚMEROS REAIS

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Transcrição:

UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação Técnicas de Projeto de Algoritmos Material disponível para download em: www.profvaniacristina.com Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC Técnicas de Projeto de Algoritmos Para resolver um determinado problema podemos encontrar e/ou desenvolver vários algoritmos. Cada um com suas características e diferenças considerando alguns aspectos, a saber: Como o problema será resolvido; Quanto tempo ou quanto de memória será necessário; e O resultado alcançado, podendo ser exato, aproximado ou uma probabilidade de acerto. Utilizando conceitos de Estruturas de Dados, técnicas simples de Análise Estruturada ou de Análise Orientada a Objetos juntamente com bom senso e raciocínio lógico, é possível criar algoritmos que resolvem a grande maioria dos problemas. Entretanto, alguns outros problemas requerem a aplicação de Técnicas de Projeto de Algoritmos, que são algoritmos mais elaborados compreendendo métodos de codificação que evidenciam sua complexidade, considerando a forma de se alcançar a solução desejada. Veremos a seguir as seguintes técnicas: Divisão e Conquista, Gulosa e Backtracking Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC

Algoritmo de Divisão e Conquista 3 A técnica de desenvolvimento de algoritmos por divisão e conquista reflete a estratégia militar de dividir o território adversário para vencer cada uma das partes facilmente e depois juntar todos para formar uma grande nação. Alguns algoritmos tradicionais de ordenação fazem uso deste método que tem os seguintes passos: a entrada de dado problema é dividida em duas partes menores,; cada parte menor é resolvida recursivamente ou não; e as soluções das partes menores são combinadas gerando a solução do problema original. O método de ordenação Quicksort é um claro exemplo de utilização da divisão e conquista. Vamos relembrar como funciona: Definir um elemento do vetor identificado como pivô. Dividir o vetor em duas partições: na primeira ficam os elementos menores que o pivô e na segunda partição ficam todos os elementos maiores que o pivô. Conquistar ordenando as duas partições recursivamente. Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC Algoritmo Guloso Problemas de Otimização Como uma empresa de mudança deve alocar os móveis em um caminhão baú Como uma companhia telefônica deve rotear chamadas de modo a fazer um melhor uso de suas linhas e conexões Como encontrar o menor caminho entre dois vértices em um grafo Como calcular o troco utilizando o mínimo de moedas possível Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC

Algoritmo Guloso A técnica de desenvolvimento de algoritmos conhecida como Algoritmo Guloso é utilizada quando necessitamos encontrar soluções ótimas com base em valores mínimos ou máximos para otimizar problemas, pois além de ser implementada facilmente e executada rapidamente, na maioria das vezes é um algoritmo simples e eficiente. Entretanto o algoritmo guloso, por tomar decisões baseado apenas na informação disponível, pode não atingir o resultado correto, pois nunca reconsidera as decisões tomadas. O algoritmo que calcula o melhor trajeto para se chegar a uma cidade pagando o menor valor de pedágio e o que calcula o troco com a menor quantidade de moedas são um exemplos clássicos desta técnica. Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC Algoritmo Guloso Origem 3 7 9 7 Trajeto guloso Destino Origem 3 7 9 7 Trajeto ótimo Destino Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC

Algoritmo Guloso 7 Ao efetuar o trajeto o algoritmo guloso levou em consideração apenas o valor do pedágio e a partir da cidade de origem fez a escolha da menor tarifa entre duas cidades adjacentes, não se importando com outros custos e outras cidades. Esta não foi uma opção ótima, pois ao chegar à cidade de destino, foram gastos R$ 0,00. Trajeto guloso Origem 7 3 9 7 Destino No trajeto a seguir, a solução ótima foi encontrada e o custo final foi de R$,00. Trajeto ótimo Origem 7 3 9 7 Destino Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC Este algoritmo calcula o menor número de moedas a serem utilizadas para um troco de R$ 0., funcionará sem problemas graças ao nosso sistema monetário e sempre será uma solução ótima, resultando em x 0,0, x 0.0 e x 0.0, num total de 3 moedas. Entretanto se moedas[] = {.0, 0.0, 0., 0., 0.0, 0.0} o resultado seria x 0.0, x 0. e x 0.0, num total de moedas, quando a solução ótima indica x 0.0 e 3 x 0,0, num total de moedas. algoritmo troco_guloso função faz_troco ( n ) : real var i : inteiro var x, moedas [ ] : real soma : real var y, troco [ ] : inteiro i = soma = 0 inicio enquanto ( i < =.e. soma < > n ) faça moedas [ ] = {.0, 0.0, 0., 0.0, 0.0, 0.0 } se ( soma + moedas [ i ] ) < = n então troco [ ] = { 0, 0, 0, 0, 0, 0 } troco [ i ] = troco [ i ] + x = faz_troco ( 0. ) soma = soma + moedas [ i ] para ( y de até ) faça senão se troco [ y ] < > 0 então i = i + escreva ( troco [ y ], x, moeda [ y ] fim_se fim_se fim_enquanto fim_para faz_troco = soma fim. fim_função Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC

Algoritmo Backtracking 9 A técnica de desenvolvimento de algoritmos por Backtracking utiliza um caminho metódico de tentativas de decisões para encontrar uma que resolva problema proposto, sem considerar o esforço para alcançar a solução. A partir de várias possibilidades de solução, sem informações suficientes para saber qual a ideal, as decisões vão sendo tomadas. Cada decisão abre um leque de novas escolhas, onde alguma ou algumas podem ser a solução esperada para o problema. Esta técnica é recomendada quando não se conhece uma regra fixa de computação para o problema, pois não se sabe o caminho exato a ser seguido para encontrar a solução. O algoritmo que utiliza a técnica do backtracking é recursivo, pois se durante a busca a solução não for encontrada o algoritmo retorna para a alternativa anterior (backtrack) a fim de fazer uma nova tentativa. Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC Algoritmo Backtracking 0 Começo Êxito Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC

Algoritmo Backtracking Regiões: A, B, C, D, E, F, G Cores: vermelho, verde, azul Restrições: regiões vizinhas devem ter cores diferentes B C B C A D E A D E F F G G Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC Algoritmo Backtracking Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC

Notação e Análise Assintótica de pior e melhor caso 3 Quando precisamos determinar qual o custo de um algoritmo para resolver um problema específico utilizamos a análise de algoritmos para calcular a sua complexidade em função do número de operações efetuadas (complexidade temporal) ou a quantidade de memória necessária (complexidade espacial). A partir da análise das operações, é gerada uma expressão matemática que determinará o tempo consumido pelo algoritmo. A complexidade temporal pode ser obtida por meio de um modelo matemático, que não depende da forma que o algoritmo foi implementado nem de um computador específico, pois o que será analisado será o custo das operações mais significativas, desprezando algumas operações, com base na quantidade dos dados de entrada. Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC Notação e Análise Assintótica de pior e melhor caso Para analisar o custo de um algoritmo a partir de uma expressão, como por exemplo, n + ou n +, normalmente pensamos em valores pequenos para n e isto não afeta o tempo de execução, mesmo sendo um algoritmo ineficiente. Quando analisamos algoritmos para grandes valores de n as funções n + 00n, n, n /000, 3/n, o crescimento custo de tempo de todas é equivalente. Analisar o custo de um algoritmo baseado em n de tamanho grande é chamado de Análise Assintótica. Notação assintótica é a classificação das funções em ordens que determinam as suas equivalências. As três principais ordens são: Ordem Omicron (O), Ordem Omega (Ω) e Ordem Theta (Θ). Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC

Notação e Análise Assintótica de pior e melhor caso A ordem O (Omicron, lê-se big-oh, big-o) é a mais comum e mais utilizada, pois analisa o limite superior de entrada, ou seja, o pior caso, testando o processamento máximo utilizado. A Ordem Ômega (Ω) analisa o limite inferior de entrada, ou seja, o melhor caso, testando o processamento mínimo utilizado. A Ordem Theta (Θ), analisa valores médios de entrada, ou seja, o caso médio, utiliza bases estatísticas de dados e requer melhor conhecimento das entradas. Dependendo do conjunto de dados um algoritmo pode rodar mais rápido ou não. Geralmente os algoritmos são medidos pela complexidade de tempo do pior caso, e encontrar um caso médio pode ser muito difícil. Para determinadas áreas de aplicação (controle de tráfego aérea, cirurgias, etc.), a análise da complexidade do pior caso é fundamental. Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC Notação e Análise Assintótica de pior e melhor caso Por meio da observação e comparação das taxas de crescimento do tempo, a análise assintótica estabelece uma ordem relativa entre funções. As principais taxas de crescimento são: Para termos uma noção da ordem de crescimento do custo de tempo dos algoritmos a tabela a seguir apresenta alguns exemplos comparativos. n Nome Função Constante Logarítmica Linear Linear Logarítmica log n n n log n Quadrática n Cúbica n 3 Exponencial n Fatorial n! Alg. Alg. Alg. 3 Alg. Alg. Alg. log n n n log n n n 3 n 0 0 0 3,3 0 33 00.000 0 00, 00 0.000.000.000,7 * 0 30.000 9,97.000 9.9.000.000 0 9,07 * 0 30 Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC

Notação e Análise Assintótica de pior e melhor caso 7 Como exemplo, considere o número de operações de cada um dos dois algoritmos que resolvem o mesmo problema, como função de n. Algoritmo : f(n) = n + n operações Algoritmo : f(n) = 00n + 000 operações Dependendo do valor de n, o Algoritmo pode requerer mais ou menos operações que o Algoritmo. Operações n 0 00.000 0.000 00.000 n + n 0 0.00.00.000 00.00.000 0.000.00.000 00n + 000 9.000.000 0.000.00.000 0.00.000 Podemos observar que termos inferiores contribuem pouco na comparação e podem ser descartados. Operações n 0 00.000 0.000 00.000 n 00 0.000.000.000 00.000.000 0.000.000.000 00n.000 0.000 00.000.000.000 0.000.000 Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC Notação e Análise Assintótica de pior e melhor caso Uma unidade de tempo (UT) é medida em milissegundos. Podemos ter uma aproximação do tamanho de problemas que podem ser resolvidos a partir de uma entrada n e uma UT. Veja um exemplo na tabela a seguir, com cinco algoritmos com complexidades distintas. Algoritmo Complexidade de tempo segundo minuto hora A n.000 0.000 3.00.000 A n log n 0.9 0.000 A3 n 3,,9.97, A n 3 0 39, 3,3 A n 9 Profa. Vânia Cristina de Souza Pereira 03 _ Material de Apoio Notas de Aula Pesquisa e Ordenação CC