Algoritmos 3/17/ Algoritmos como área de estudo e investigação

Documentos relacionados
ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

Análise de complexidade

Análise de Algoritmos [1] Algoritmos e Estruturas de Dados MEEC 2013/2014

Complexidade de algoritmos Notação Big-O

Algoritmo. Exemplo. Definição. Programação de Computadores Comparando Algoritmos. Alan de Freitas

Algoritmos e Estruturas de Dados. Algoritmos e Estruturas de Dados MEEC 2014/2015. Algoritmos eficientes usam "boas" estruturas de dados

ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão

Análise e Projeto de Algoritmos

Algoritmos e Estruturas de Dados MEE 2014/2015. Análise de Algoritmos e Complexidade

Análise de complexidade

2. Complexidade de Algoritmos

Análise de Algoritmos

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

Análise de Algoritmos Estrutura de Dados II

Análise de algoritmos. Parte I

Análise de algoritmos

Introdução à Ciência da Computação II

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Medida do Tempo de Execução de um Programa

ANÁLISE DE ALGORITMOS: PARTE 1. Prof. André Backes. Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa

ESTRUTURAS DE DADOS prof. Alexandre César Muniz de Oliveira

Teoria da Computação Aula 9 Noções de Complexidade

Análise de algoritmos

Análise de Complexidade de Algoritmos

Aula 1. Teoria da Computação III

Análise de algoritmos. Parte I

Teoria da Computação Aula 8 Noções de Complexidade

Algoritmos Avançados Análise de Complexidade

Estruturas de Dados Algoritmos

Projeto e Análise de Algoritmos

Teoria da computabilidade Indecidíveis Decidíveis

MCTA028 Programação Estruturada Aula 19 Custos de um algoritmo e funções de complexidade

ANÁLISE DE ALGORITMOS: PARTE 3

Complexidade de Algoritmos

Análise de Complexidade de Algoritmos. mario alexandre gazziro

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

INF 1010 Estruturas de Dados Avançadas

Quantidade de memória necessária

Projeto e Análise de Algoritmos

Teoria da Computação. Computabilidade e complexidade computacional

Análise de Algoritmos

Análise de algoritmos Parte I

Algoritmos e Estruturas de Dados I Aula 06 Custos de um algoritmo

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

Algoritmos Genéticos Fernando Lobo

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

Divisão-e-Conquista ( ) CAL ( ) MIEIC/FEUP. ./rr (1) Técnicas de Concepção de Algoritmos

Análise de Algoritmos

Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo

COMPLEXIDADE DE ALGORITMOS

BCC202 - Estrutura de Dados I

Estrututas de Dados e Algoritmos. Estrutura de Dados e Algoritmos

ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 ANÁLISE DE ALGORITMOS. Armanda Rodrigues 3 de Outubro 2011

Complexidade de Algoritmos

Teoria dos Grafos Aula 7

Informática I. Aula 14. Aula 14-10/10/2007 1

Otimização Combinatória - Parte 4

Análise e Projeto de Algoritmos P R O F : L O A N A T. N O G U E I R A

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

15/03/2018. Professor Ariel da Silva Dias Algoritmo e Contagem de Instruções. Prof. Ariel da Silva Dias -

Complexidade de Algoritmos

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Arquitecturas Paralelas I Computação Paralela em Larga Escala LESI - 4º Ano. Desenvolvimento de Aplicações Paralelas

AED LEE-2003/2004. Análise de Algoritmos e Complexidade

Técnicas de Projeto de Algoritmos

Optimização de um Plano de Marketing Directo para o Sector da Banca Daniel Barata

Preliminares. Profa. Sheila Morais de Almeida. agosto

Engenharia de Software

AED Algoritmos e Estruturas de Dados LEEC/LEE / semestre. Motivação Problema da Conectividade

Tópicos Avançados em Algoritmos

Comportamento Assintótico. Algoritmos e Estruturas de Dados Flavio Figueiredo (

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 25

Introdução à Análise de Algoritmos

Análise e Complexidade de Algoritmos

IME, UFF 7 de novembro de 2013

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

TE231 Capitulo 2 Zeros de Funções; Prof. Mateus Duarte Teixeira

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15

Análise de algoritmos Parte I

Elementos de Análise Assintótica

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.

Teoria da Computação. Aula 3 Comportamento Assintótico 5COP096. Aula 3 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

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

Capítulo 6 Análise de Algoritmos Capítulo 6

Análise de Algoritmos

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

Análise e Projeto de Algoritmos

Os Problemas de Optimização Combinatória e a Teoria da Complexidade

ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão

a complexidade no desempenho de algoritmos

Projeto e Análise de Algoritmos

Análise e Complexidade de Algoritmos

Aula 1 - Introdução Cleverton Hentz

AULA 17. Melhores momentos. Segmento de soma máxima. Segmento de soma máxima. Conclusões. Algumas técnicas

MCTA028 Programação Estruturada Aula 20 Exercícios de custos de um algoritmo

Pesquisa: operação elementar

Análise empírica de algoritmos de ordenação

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO. 4 a Lista de Exercícios Gabarito de algumas questões.

Transcrição:

Algoritmos e Complexidade Ana Teresa Freitas INESC-ID/IST ID/IST 3/17/2005 1 O que é um algoritmo? Algoritmos: Sequência de instruções necessárias para a resolução de um problema bem formulado [passíveis de implementação em computador] Estruturas de Dados: forma ou processo de guardar informação Algoritmos eficientes usam "boas" estruturas de dados 3/17/2005 2 1

Algoritmos Estratégia: especificar (definir propriedades) arquitectura (algoritmo e estruturas de dados) Analise de complexidade (tempo de execução e memória) implementar (numa linguagem de programação) testar (submeter entradas e verificar observância das propriedades especificadas) 3/17/2005 3 Algoritmos como área de estudo e investigação Suficientemente antiga que os conceitos básicos e a informação essencial são bem conhecidos Suficientemente nova de forma a permitir novas descobertas e novos resultados Imensas áreas de aplicação: ciência engenharia comerciais 3/17/2005 4 2

Relação entre Algoritmos e Estruturas de Dados Algoritmos são métodos para resolver problemas problemas têm dados dados são tratados (neste contexto) computacionalmente O Processo de organização dos dados pode determinar a eficiência do algoritmo algoritmos simples podem requerer estruturas de dados complexas algoritmos complexos podem requerer estruturas de dados simples Para maximizar a eficiência de um algoritmo as estruturas de dados utilizadas têm de ser projectadas em simultâneo com o desenvolvimento do algoritmo 3/17/2005 5 Análise de Algoritmos Para avaliar e comparar o desempenho de dois algoritmos: executamos ambos (muitas vezes) para ver qual é mais rápido fornece indicações sobre o desempenho e informação sobre como efectuar uma análise mais profunda Que dados usar? dados reais: verdadeira medida do custo de execução dados aleatórios: assegura-nos que as experiências testam o algoritmo e não apenas os dados específicos Caso médio dados perversos: mostram que o algoritmo funciona com qualquer tipo de dados Pior caso! dados benéficos: Melhor caso 3/17/2005 6 3

Análise de Algoritmos Análise precisa é uma tarefa complicada algoritmo é implementado numa dada linguagem linguagem é compilada e programa é executado num dado computador difícil prever tempos de execução de cada instruções e antever optimizações muitos algoritmos são "sensíveis" aos dados de entrada muitos algoritmos não são bem compreendidos Para prever o tempo de execução de um programa apenas é necessário um pequeno conjunto de ferramentas matemáticas 3/17/2005 7 Análise: Crescimento de Funções O tempo de execução geralmente dependente de um único parâmetro N ordem de um polinómio tamanho de um ficheiro a ser processado, ordenado, etc ou medida abstracta do tamanho do problema a considerar (usualmente relacionado com o número de dados a processar) Quando há mais de um parâmetro procura-se exprimir todos os parâmetros em função de um só faz-se uma análise em separado para cada parâmetro 3/17/2005 8 4

Análise: Crescimento de Funções Os Algoritmos têm tempo de execução proporcional a 1 - muitas instruções são executadas uma só vez ou poucas vezes (se isto for verdade para todo o programa diz-se que o seu tempo de execução é constante) logn - tempo de execução é logarítmico (cresce ligeiramente à medida que N cresce) (quando N duplica log N aumenta mas muito pouco; apenas duplica quando N aumenta para N 2 ) N - tempo de execução é linear (típico quando algum processamento é feito para cada dado de entrada) (situação óptima quando é necessário processar N dados de entrada) (ou produzir N dados na saída) 3/17/2005 9 Análise: Crescimento de Funções N log N - típico quando se reduz um problema em subproblemas, se resolve estes separadamente e se combinam as soluções (se N é 1 milhão N log N é perto de 20 milhões) N 2 N 3 - tempo de execução quadrático (típico quando é preciso processar todos os pares de dados de entrada) (prático apenas em pequenos problemas, ex: produto matriz - vector) - tempo de execução cúbico (para N = 100, N 3 = 1 milhão, ex: produto de matrizes) 2 N - tempo de execução exponencial (provavelmente de pouca aplicação prática; típico em soluções de força bruta) (para N = 20, 2 N = 1 milhão; N duplica, tempo passa a ser o quadrado) 3/17/2005 10 5

Análise: Notação "O grande" A notação matemática que nos permite suprimir detalhes na análise de algoritmos Definição: uma função g(n) diz-se ser O(f(N)) se existem constantes c 0 e N 0 tais que g(n) < c 0 f(n) para qualquer N > N 0 A notação é usada com três objectivos: limitar o erro que é feito ao ignorar os termos menores nas fórmulas matemáticas limitar o erro que é feito na análise ao desprezar parte de um programa que contribui de forma mínima para o custo/complexidade total permitir-nos classificar algoritmos de acordo com limites superiores no seu tempo de execução 3/17/2005 11 Notação O grande - Representação Gráfica Limitar uma função com uma aproximação O g(n) = O(f(N)) N 0 c 0 f(n) - g(n) debaixo de uma curva com o andamento de f() a partir de um dado N g(n) f(n) 3/17/2005 12 6

Metodologia para determinação de complexidade Suponha o seguinte código for (i = 0; i < N; i++) { instruções; } contabilização do número de instruções é simples: N iterações e em cada uma são executadas um numero constante de instruções: O(N) Suponha o código seguinte: for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { instruções; } } contabilização do número de instruções é ainda simples: loop interno é O(N) e é executado N vezes: O(N 2 ) 3/17/2005 13 Algoritmos Tecnicas de projecto Procura exaustiva ou força bruta (Brute Force) O algoritmo examina todas as alternativas possíveis para encontrar uma solução particular Normalmente não encontra uma solução em tempo útil, mas garante que a encontra Branch-and-bound ( Pruning) Ignora um conjunto de alternativas desnecessárias Menor tempo de execução e garante que encontra a solução 3/17/2005 14 7

Algoritmos Tecnicas de projecto Procura ganânciosa (Greedy) Muitos algoritmos têm procedimentos iterativos e escolhem em cada iteração um número de possíveis alternativas Escolhe as alternativas mais atractivas, umas podem levar à solução outras não Pode não levar à solução correcta 3/17/2005 15 Algoritmos Tecnicas de projecto Programação dinâmica (Dynamic Programming) Parte o problema em sub-problemas e utiliza as soluções dos sub-problemas para construir a solução do problema original O número de sub-problemas pode se tornar demasiado grande Pode ser demasiado dispendioso relativamente ao tempo de execução 3/17/2005 16 8

Algoritmos Tecnicas de projecto Dividir para conquistar (Divide-and-Conquer) Resolver um problema grande pode ser muito difícil, mas resolver dois problemas menores pode se tornar significativamente mais simples Divide o problema em problemas menores e resolve cada um de uma forma independente Combina as soluções de todos os sub-problemas para obter a solução do problema original A etapa de recombinação das soluções é normalmente crítica e dispendiosa em termos de tempo 3/17/2005 17 Algoritmos Tecnicas de projecto Aprendizagem (Machine Learning) Baseiam a sua estratégia na análise computacional de dados previamente coleccionados Aleatórios (Randomized) Em cada passo pode ser atirada uma moeda ao ar para decidir o passo seguinte Existem problemas práticos onde estes algoritmos são competitivos relativamente aos algoritmos determinísticos 3/17/2005 18 9