2. Complexidade de Algoritmos

Documentos relacionados
2. Algoritmos. Prof. Renato Tinós. Local: Depto. de Computação e Matemática (FFCLRP/USP) Introdução à Computação I IBM1006

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

COMPLEXIDADE DE ALGORITMOS

Complexidade de algoritmos Notação Big-O

COMPLEXIDADE DE ALGORITMOS COMPLEXIDADE DE ALGORITMOS

Aula 1. Teoria da Computação III

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

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

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

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

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

4. Algoritmos de Busca em Vetores

Quantidade de memória necessária

Complexidade de Algoritmos

Análise de algoritmos

Análise de Algoritmos Estrutura de Dados II

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

Análise de algoritmos. Parte I

Análise de algoritmos. Parte I

Teoria dos Grafos Aula 7

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

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

Análise de Algoritmos

4. Algoritmos de Busca em Vetores

BCC202 - Estrutura de Dados I

Análise de Algoritmos

Medida do Tempo de Execução de um Programa

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

Análise de complexidade

Projeto e Análise de Algoritmos

Análise de algoritmos Parte I

Preliminares. Profa. Sheila Morais de Almeida. agosto

Análise de Complexidade de Algoritmos. mario alexandre gazziro

ANÁLISE DE ALGORITMOS: PARTE 3

Introdução à Análise de Algoritmos

1 a Lista Professor: Claudio Fabiano Motta Toledo Estagiário PAE: Jesimar da Silva Arantes

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

Universidade Federal de Alfenas

Melhores momentos AULA 1. Algoritmos p.38/86

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

Estruturas de Dados Algoritmos

Técnicas de análise de algoritmos

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

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

GBC015: INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO. Teoria de Algoritmos: Complexidade

Pra início de conversa... O que é um algoritmo? Exemplos de algoritmos. Como podemos descrever algoritmos? Como podemos descrever algoritmos?

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

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

Análise de algoritmos

Programação de Computadores

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Programação de Computadores

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

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

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

Breve Introdução à Complexidade Assintótica de Algoritmos Letícia Rodrigues Bueno

7. Introdução à Complexidade de Algoritmos

7. Introdução à Complexidade de Algoritmos

1.1 o que é um algoritmo... 6

Teoria da computabilidade Indecidíveis Decidíveis

Análise de algoritmos Parte I

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

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

a complexidade no desempenho de algoritmos

ESTRUTURAS DE DADOS E ALGORITMOS APRESENTAÇÃO DO CURSO E INTRODUÇÃO

Construção de Algoritmos II Aula 06

ESTRUTURA DE DADOS CIÊNCIA E TECNOLOGIA DO RIO. Curso de Tecnologia em Sistemas para Internet

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Comportamento assintótico

PDA - Repetição. Estruturas de repetição. Slides adaptação de Deise Saccol

Noções de complexidade de algoritmos

Programação de Computadores

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

Programação Estruturada

Estruturas de Repetição

Complexidade de Algoritmos. Edson Prestes

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

Projeto e Análise de Algoritmos

Classificação de Dados

INF 1010 Estruturas de Dados Avançadas

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

Análise e Projeto de Algoritmos

Lógica de Programação Completo

Elementos de Análise Assintótica

Análise de Complexidade de Algoritmos

Complexidade de Algoritmos

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

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

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

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: estruturas de repetição While / Do While / For

3. Linguagem de Programação C

ANÁLISE DE ALGORITMOS: PARTE 4

O que é um Algoritmo?

Módulo 7. Complexidade de Algoritmos. Algoritmos e Estruturas de Dados II C++ Rone Ilídio

ESTRUTURAS DE REPETIÇÃO - PARTE 1

Análise de Algoritmos Parte 4

Algoritmos Estrutura Condicional

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

Estruturas de Repetição. Estruturas de Repetição. Estruturas de Repetição. Estruturas de Repetição. Estruturas de Repetição Condicionais

Complexidade de Algoritmos

Transcrição:

Introdução à Computação II 5952011 2. Complexidade de Algoritmos Prof. Renato Tinós Depto. de Computação e Matemática (FFCLRP/USP) 1

Principais Tópicos 2.1. Introdução 2.1.1. Revisão de Pseudo-Código 2.1.2. Uma Rápida Revisão Matemática 2.2. Análise de Algoritmos 2.2.1. Análise por Operações Primitivas 2.2.2. Análise do Pior Caso e e do Caso Médio 2.3. Notação Assintótica 2.3.1. Notação O 2.3.2. Notação 2.3.3. Notação 2.3.4. Outras Notações 2.4. Análise Assintótica 2

2.1.1. Revisão de Pseudo-Código Pseudo-Código Descrição em alto nível que combina» Linguagem natural» Estruturas familiares de linguagem de programação Escrito para ser interpretado por um ser-humano, e não por um computador Mais compacto que o código na linguagem de programação Facilita a análise das estruturas de dados ou dos algoritmos 3

2.1.1. Revisão de Pseudo-Código Exemplo 2.1. Pseudo-Código Algoritmo maxelemento(): Entrada: vetor A com n inteiros Saída: elemento máximo de A maximo A[0] para i 1 até n-1 faça se A[i] > maximo então maximo A[i] fim se fim para retorne maximo 4

2.1.1. Revisão de Pseudo-Código Estruturas de linguagem de programação utilizadas Expressões» Atribuição:» Relação de igualdade: = Declarações de Rotinas: Algoritmo (par1,...) Chamadas de sub-rotinas: subrotina (par1,...) Retorno de sub-rotinas: retorne... (em inglês: return...) 5

2.1.1. Revisão de Pseudo-Código (continuação) Estruturas de Decisão: se...então...senão... (em inglês: if...then...else... ) Loops» enquanto...faça... (em inglês: while...do... )» repita...até que... (em inglês: repeat...until... )» para...faça... (em inglês: for...do... ) Indexação: A [ i ] 6

Logaritmos e Expoentes 2.1.2. Revisão Matemática log b a = c a = b c Obs: em computação, é comum não escrever o valor da base quando b=2 (Exemplo: log 1024 = 10) 7

8 2.1.2. Revisão Matemática Algumas propriedades de somatórios Proposição 2.1. Para: dois inteiros nm0, duas funções f(i) e g(i) e uma constante c, n m i n m i n m i i g i f i g i f ) ( ) ( ) ( ) ( 1 1 m n n m i n m i n m i i f c i f c

9 2.1.2. Revisão Matemática Série Aritmética Proposição 2.2. Para qualquer inteiro n1, 6 1 2 1 1 2 n n n i n i 2 1 1 n n i n i 4 1 2 2 1 3 n n i n i

Série Geométrica 2.1.2. Revisão Matemática Proposição 2.3. Para qualquer inteiro n0 e qualquer número real 0 < a 1, então n n i 1 a a 1 a i0 1 10

2.1.2. Revisão Matemática Definições x : maior inteiro menor ou igual a x (piso ou chão) x : menor inteiro maior ou igual a x (teto) 11

2.2. Análise de Algoritmos Análise de algoritmos: prever os recursos de que o algoritmo vai necessitar Exemplos» Memória» Largura da banda de comunicação» Hardware» Tempo de execução O tempo de execução pode ser estudado através da análise experimental 12

2.2. Análise de Algoritmos o : computador 1 + : computador 2 Figura 2.1. Resultados de um estudo experimental do tempo de execução (t) para diferentes entradas (n) 13

Desvantagens dos estudos experimentais Limitado conjunto de entradas para teste Dificuldade de comparar a eficiência de dois ou mais algoritmos Necessidade de implementar e executar o algoritmo Existe outro método? Método analítico 2.2. Análise de Algoritmos» Independe do computador utilizado 14

2.2.1. Análise por Operações Primitivas Pode ser implementada em Pseudo- Código Independe da linguagem de programação Independe do hardware 15

2.2.1. Análise por Operações Primitivas Operações Primitivas Atribuição Chamada de uma sub-rotina Operação aritmética Operação lógica Indexação em um vetor Retorno de uma sub-rotina Referência a um objeto 16

2.2.1. Análise por Operações Primitivas Exemplo 2.2. Faça a análise por operações primitivas dos algoritmos apresentados abaixo a) Algoritmo fnum(a,b): Entrada: inteiros a e b Saída: valor da operação matemática soma a + b soma 0.8 * soma retorne soma 17

2.2.1. Análise por Operações Primitivas Exemplo 2.2. Faça a análise por operações primitivas dos algoritmos apresentados abaixo b) Algoritmo impvetor(a): Entrada: vetor A com n inteiros para i 0 até n-1 faça fim para retorne imprime ( A[ i ] ) 18

2.2.1. Análise por Operações Primitivas Exemplo 2.2. Faça a análise por operações primitivas dos algoritmos apresentados abaixo c) Algoritmo maxnum(a,b): Entrada: inteiros a e b Saída: elemento máximo entre a e b maximo a se a < b então fim se maximo b retorne maximo 19

2.2.1. Análise por Operações Primitivas Exemplo 2.2. Faça a análise por operações primitivas dos algoritmos apresentados abaixo d) Algoritmo maxelemento(a): Entrada: vetor A com n inteiros Saída: elemento máximo de A maximo A[0] para i 1 até n-1 faça se A[i] > maximo então maximo A[i] fim se fim para retorne maximo 20

2.2.1. Análise por Operações Primitivas Exercício 2.1. Escreva, utilizando pseudo-código, um algoritmo que imprima a média aritmética de n números digitados pelo usuário. Exercício 2.2. Faça a análise por operações primitivas do algoritmo criado no Exercício 2.1. Exercício 2.3. Escreva, utilizando pseudo-código, um algoritmo que tenha como entrada um vetor de inteiros com tamanho n e que verifique se um determinado número digitado pelo usuário está presente. Exercício 2.4. Faça a análise por operações primitivas do algoritmo criado no Exercício 2.3. 21

2.2.1. Análise por Operações Primitivas Exercício 2.5. Escreva, utilizando pseudocódigo, uma função que receba duas matrizes reais quadradas (com n linhas) e gere a sua soma. Exercício 2.6. Faça a análise por operações primitivas do algoritmo criado no Exercício 2.1 22

2.2.2. Análise do Pior Caso e do Caso Médio Complexidade Definição 2.1. seja A um algoritmo, {E 1,..., E m } o conjunto de todas as entradas possíveis de A. Denote por t i o número de passos efetuados por A, quando a entrada for E i. Definemse Complexidade do pior caso = Complexidade do melhor caso = Complexidade do caso médio =. max t i t na qual p i é a probabilidade de ocorrência da entrada E i E i min m i1 E E p i t i i E i 23

2.2.2. Análise do Pior Caso e do Caso Médio pior caso caso médio? melhor caso 24

2.2.2. Análise do Pior Caso e do Caso Médio Análise do caso médio e do pior caso Análise do tempo médio requer conhecimento das distribuições de probabilidades das entradas A análise do pior caso é geralmente utilizada 25

2.2.2. Análise do Pior Caso e do Caso Médio Analisando detalhadamente o tempo de execução, surgem as seguintes questões Este nível de detalhamento é realmente importante? Será tão importante definir o número exato de operações primitivas executadas pelo algoritmo? Quão cuidadosamente deve-se definir o conjunto de operações primitivas? Exemplo: y = a*x + b 26

2.3. Notação Assintótica Simplificação da análise Análise da taxa de crescimento Ex.: o algoritmo maxelemento» pior caso: 8n-2» cresce proporcionalmente a n Despreza os fatores constantes Ex.: n 2 c 1 n 2 c 2 27

2.3. Notação Assintótica Utilizadas para analisar o tempo de execução Notação O : limite assintótico superior» Pior caso Notação : limite assintótico inferior Notação : limite assintótico restrito 28

2.3.1. Notação O Definição 2.2. Sejam f(n) e g(n) duas funções mapeando inteiros não-negativos para números reais. Então f(n) é O(g(n)) se existem uma constante real c>0 e uma constante inteira n 0 1 tal que: 0 f(n) c g(n) para todo n n 0 29

Tempo de Execução Ilustração da Notação O 2.3.1. Notação O c g(n) f(n) n o 30

2.3.1. Notação O Exemplo 2.3. 8n 2 é O(n)? 31

2.3.1. Notação O Permite dizer que uma função de n é menor que ou igual a outra função Até um fator constante no sentido assintótico, já que n cresce para o infinito Fornece um limite assintótico superior para o tempo de execução 32

2.3.1. Notação O Proposição 2.3. O tempo de execução do algoritmo maxelemento para a computação do máximo elemento em um vetor de n inteiros é O(n) Justificativa: - O número de operações primitivas para o pior caso (Exemplo 1) é 8n-2 - Considerando que existe uma constante k dependente do tempo de execução, o tempo de execução do algoritmo é k(8n-2) -Considerando que c=8k e n 0 =1, o tempo de execução do algoritmo maxelemento é O(n). 33

2.3.1. Notação O Exemplo 2.4. Mostre que 20n 3 + 10n (log n) + 5 é O(n 3 ) De fato, qualquer polinômio a k n k + a k-1 n k-1 +...+a 0 é sempre O(n k ) 34

2.3.1. Notação O Exercício 2.7. Mostre que a) 3 (log n) + 5 ( log (log n) ) é O(log n) b) 5/n é O(1/n ) c) 2 100 é O(1) d) (n+1) 5 é O(n 5 ) 35

2.3.1. Notação O Terminologia para classes de funções Logarítmica: O(log n) Linear: O(n) Quadrática: O(n 2 ) Polinomial: O(n k ) (k1) Exponencial: O(a n ) (a>1) Fatorial: O(n!) 36

2.3.1. Notação O log 2 n n n log 2 n n 2 n 3 2 n 0 1 0 1 1 2 1 2 2 4 8 4 2 4 8 16 64 16 3 8 24 64 512 256 4 16 64 256 4096 65536 5 32 160 1024 32768 4294967296 6 64 384 4096 262144 1,84467E+19 7 128 896 16384 2097152 3,40282E+38 65536 32768 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1 2 n n 3 n 2 n log 2 n n log 2 n 1 2 4 8 16 32 64 128 256 37

2.3.2. Notação Definição 2.3. Sejam f(n) e g(n) duas funções mapeando inteiros não-negativos para números reais. Então f(n) é (g(n)) se existem uma constante real c>0 e uma constante inteira n 0 1 tal que: 0 c g(n) f(n) para todo n n 0 38

Tempo de Execução Ilustração da Notação 2.3.2. Notação f(n) c g(n) n o 39

2.3.2. Notação Permite dizer que uma função de n é maior que ou igual a outra função Até um fator constante e no sentido assintótico já que n cresce para o infinito Fornece um limite assintótico inferior para o tempo de execução 40

2.3.3. Notação Definição 2.4. Sejam f(n) e g(n) duas funções mapeando inteiros não-negativos para números reais. Então f(n) é (g(n)) se existem constantes reais c 1 >0 e c 2 >0 e uma constante inteira n 0 1 tal que: 0 c 1 g(n) f(n) c 2 g(n) para todo n n 0 41

Tempo de Execução 2.3.3. Notação Ilustração da Notação c 2 g(n) f(n) c 1 g(n) n o 42

2.3.3. Notação Permite dizer que duas funções são assintoticamente iguais até um fator constante Fornece um limite assintótico restrito para o tempo de execução 43

2.3.4. Outras Notações Notações o e Parentes, respectivamente, das notações O e Denotam limites que não são assintoticamente restritos (n 0 >0)» Exemplo: o 0 f(n) < c g(n) para todo n n 0 44

2.4. Análise Assintótica Permite analisar os tempos de execução dos algoritmos por meio das Notações Assintóticas Determinação da ordem de crescimento (em função do tamanho das entradas) do tempo de execução de um programa» sem haver preocupação com o valor das constantes envolvidas 45

2.4. Análise Assintótica Utiliza técnicas de matemática discreta Envolvendo contagem dos elementos que possuam uma propriedade comum Infelizmente, não existe um conjunto completo de regras para a análise de programas No entanto, podemos enumerar alguns princípios a serem seguidos 46

2.4. Análise Assintótica Princípios para a análise de algoritmos 1. O tempo de execução de um comando simples de atribuição, leitura ou escrita pode ser considerado como O(1) 2. O tempo de execução de um bloco de comandos é determinado pelo maior tempo de execução de um comando deste bloco 3. O tempo de execução de um comando de decisão é composto pelo tempo de execução de seu bloco de comandos condicionais, mais o tempo para avaliar as suas condições (que geralmente Introdução à Computação são O(1) II 5952011 ) 47

2.4. Análise Assintótica Princípios para a análise de algoritmos 4. O tempo para executar um anel (loop) é a soma do tempo de execução do bloco de comandos (corpo) do anel mais o tempo para avaliar a condição de parada, multiplicado pelo número de iterações deste anel 5. Quando o programa possui procedimentos nãorecursivos, o tempo de execução de cada procedimento deve ser computado separadamente, iniciando com os procedimentos que não chamam outros procedimentos 48

Exemplo 2.5. Análise Assintótica 2.4. Análise Assintótica Algoritmo prefixmedia1(x): Entrada: vetor X com n números Saída: vetor A com n números tal que A[i] é a média dos elementos X[0],...,X[i] Seja A um vetor com n números. para i 0 até n-1 faça a 0 0+1+2+...+n-1=n(n-1)/2 para j 0 até i faça a a+x[j] fim para A[i] a/(i+1) fim para retorne A 49

Exemplo 2.6. Análise Assintótica Algoritmo prefixmedia2(x): Entrada: vetor X com n números Análise Assintótica Saída: vetor A com n números tal que A[i] é a média dos elementos X[0],...,X[i] Seja A um vetor com n números. s 0 para i 0 até n-1 faça n s s+x[i] A[i] s/(i+1) fim para retorne A 50

Exemplo 2.6. Análise Assintótica (continuação) Análise Assintótica O tempo de execução do algoritmo prefixmedia1() é O(n 2 ) enquanto que o do algoritmo prefixmedia2() é O(n) Assim, levando-se em conta a análise assintótica do tempo de execução, o algoritmo prefixmedia2() é mais interessante que o do algoritmo prefixmedia1() 51

Exercícios Exercício 2.8. Faça a análise assintótica (Notação O ) do tempo de execução do Algoritmo maxelemento() apresentado no Exemplo 2.1. Exercício 2.9. Faça a análise por operações primitivas e análise assintótica de um algoritmo que verifique se um determinado valor digitado pelo usuário está presente em uma matriz n x m 52

Exercícios Exercício 2.10. Implemente os algoritmos desenvolvidos nos Exercícios 2.1, 2.3 e 2.5, e Obtenha os tempos de execução para n=3000, n=10000 e n=30000 Faça a análise assintótica 53