Buscar

29 complexidade

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 20 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

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 6, do total de 20 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

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 9, do total de 20 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

Prévia do material em texto

Custo de Computação
INF05008 - Fundamentos de algoritmos
Instituto de Informática
Universidade Federal do Rio Grande do Sul
Porto Alegre, Brasil
http://www.inf.ufrgs.br
2011/2
Custo de uma Computação
I Tempo?
I Espaço?
Concreto × Abstrato?
INF05008 Cap. 29 - Custo de Computação 2/16
Exemplo 1
(define (quantos? lista)
(cond
[(empty? lista) 0]
[else (+ (quantos? (rest lista)) 1)]))
(quantos? (list ’a ’b ’c))
= (+ (quantos? (list ’b ’c)) 1)
= (+ (+ (quantos? (list ’c)) 1) 1)
= (+ (+ (+ (quantos? empty) 1) 1) 1) = 3
I Qual é a relação entre o comprimento da entrada e o
número de recursões?
INF05008 Cap. 29 - Custo de Computação 3/16
Exemplo 1 (cont.)
(define (quantos? lista)
(cond
[(empty? lista) 0]
[else (+ (quantos? (rest lista)) 1)]))
(quantos? (list ’a ’b ’c))
= (+ (quantos? (list ’b ’c)) 1)
= (+ (+ (quantos? (list ’c)) 1) 1)
= (+ (+ (+ (quantos? empty) 1) 1) 1) = 3
I Quanto mais longa a entrada, mais passos de recursão são
necessários
I O número de passos entre as chamadas recursivas é
sempre o mesmo
INF05008 Cap. 29 - Custo de Computação 4/16
Érika
Realce
Função de Custo (Abstrato)
I Escolher unidade de medida: chamadas recursivas;
I Usar tamanho da entrada como variável
INF05008 Cap. 29 - Custo de Computação 5/16
Função de Custo (Abstrato)
I Qual computação custará mais?
I (quantos? (list ’a ’d ’b)),
I (quantos? (list ’a ’b ’c)), ou
I (quantos? (list ’b ’b ’b))?
INF05008 Cap. 29 - Custo de Computação 6/16
Exemplo 2
(define (contém-b? lds)
(cond
[(empty? lds) false]
[else (cond
[(symbol=? (first lds) ’b) true]
[else (contém-b? (rest lds))])]))
I O número de passos necessários varia conforme a estrutura da
entrada. Considerar melhor caso, pior caso ou caso médio?
I O tempo de cada recursão é abstrato. Portanto, podemos ignorar
constantes e usar Ordens de Grandeza
I O número de passos (chamadas recursivas) para esta função chegar
ao resultado é, em média, N/2, sendo N o tamanho da entrada.
Portanto, este algoritmo é da ordem de N passos, ou O(N).
INF05008 Cap. 29 - Custo de Computação 7/16
Exemplo 2
(define (contém-b? lds)
(cond
[(empty? lds) false]
[else (cond
[(symbol=? (first lds) ’b) true]
[else (contém-b? (rest lds))])]))
I O número de passos necessários varia conforme a estrutura da
entrada. Considerar melhor caso, pior caso ou caso médio?
I O tempo de cada recursão é abstrato. Portanto, podemos ignorar
constantes e usar Ordens de Grandeza
I O número de passos (chamadas recursivas) para esta função chegar
ao resultado é, em média, N/2, sendo N o tamanho da entrada.
Portanto, este algoritmo é da ordem de N passos, ou O(N).
INF05008 Cap. 29 - Custo de Computação 7/16
Érika
Realce
Exemplo 2
(define (contém-b? lds)
(cond
[(empty? lds) false]
[else (cond
[(symbol=? (first lds) ’b) true]
[else (contém-b? (rest lds))])]))
I O número de passos necessários varia conforme a estrutura da
entrada. Considerar melhor caso, pior caso ou caso médio?
I O tempo de cada recursão é abstrato. Portanto, podemos ignorar
constantes e usar Ordens de Grandeza
I O número de passos (chamadas recursivas) para esta função chegar
ao resultado é, em média, N/2, sendo N o tamanho da entrada.
Portanto, este algoritmo é da ordem de N passos, ou O(N).
INF05008 Cap. 29 - Custo de Computação 7/16
Érika
Realce
Exemplo 2
(define (contém-b? lds)
(cond
[(empty? lds) false]
[else (cond
[(symbol=? (first lds) ’b) true]
[else (contém-b? (rest lds))])]))
I O número de passos necessários varia conforme a estrutura da
entrada. Considerar melhor caso, pior caso ou caso médio?
I O tempo de cada recursão é abstrato. Portanto, podemos ignorar
constantes e usar Ordens de Grandeza
I O número de passos (chamadas recursivas) para esta função chegar
ao resultado é, em média, N/2, sendo N o tamanho da entrada.
Portanto, este algoritmo é da ordem de N passos, ou O(N).
INF05008 Cap. 29 - Custo de Computação 7/16
Érika
Realce
Função de Custo usando O(N)
I Qual computação custará mais?
I (contém-b? (list ’a ’d ’b)),
I (contém-b? (list ’a ’b ’c)), ou
I (contém-b? (list ’b ’b ’b))?
I Qual é o valor de N em cada caso?
INF05008 Cap. 29 - Custo de Computação 8/16
Exemplo 3
I Quantos passos (chamadas recursivas) esta função executa
em média para chegar ao resultado?
(define (ordena ldn)
(cond
[(empty? ldn) empty]
[(cons? ldn) (insere (first ldn) (ordena (rest ldn)))]))
(define (insere n ldn)
(cond
[(empty? ldn) (cons n empty)]
[else (cond
[(>= n (first ldn)) (cons n ldn)]
[(< n (first ldn)) (cons (first ldn)
(insere n (rest ldn)))])]))
INF05008 Cap. 29 - Custo de Computação 9/16
Exemplo de execução de ordena
(ordena (list 3 1 2))
= (insere 3 (ordena (list 1 2)))
= (insere 3 (insere 1 (ordena (list 2))))
= (insere 3 (insere 1 (insere 2 (ordena empty))))
= (insere 3 (insere 1 (insere 2 empty)))
= (insere 3 (insere 1 (list 2)))
= (insere 3 (cons 2 (insere 1 empty)))
= (insere 3 (cons 2 (list 1)))
= (insere 3 (list 2 1)) = (list 3 2 1)
INF05008 Cap. 29 - Custo de Computação 10/16
Exemplo 3
(define (ordena ldn)
(cond
[(empty? ldn) empty]
[(cons? ldn) (insere (first ldn) (ordena (rest ldn)))]))
(define (insere n ldn)
(cond
[(empty? ldn) (cons n empty)]
[else (cond
[(>= n (first ldn)) (cons n ldn)]
[(< n (first ldn)) (cons (first ldn)
(insere n (rest ldn)))])]))
I Sendo N o tamanho da lista de entrada, temos, em média:
I O(N) chamadas de ordena
I O(N2) chamadas de insere
INF05008 Cap. 29 - Custo de Computação 11/16
Exemplo 4
;; maior : lista-de-números -> número
;; Determina o maior de uma lista não vazia de números
(define (maior ldn)
(cond
[(empty? (rest ldn)) (first ldn)]
[else
(cond
[(> (maior (rest ldn)) (first ldn)) (maior (rest ldn))]
[else (first ldn)])]))
Expressão Requer 2 avaliações de
(maior (list 0 1 2 3)) (maior (list 1 2 3))
(maior (list 1 2 3)) (maior (list 2 3))
(maior (list 2 3)) (maior (list 3))
INF05008 Cap. 29 - Custo de Computação 12/16
Exemplo 4
;; maior : lista-de-números -> número
;; Determina o maior de uma lista não vazia de números
(define (maior ldn)
(cond
[(empty? (rest ldn)) (first ldn)]
[else
(cond
[(> (maior (rest ldn)) (first ldn)) (maior (rest ldn))]
[else (first ldn)])]))
Expressão Requer 2 avaliações de
(maior (list 0 1 2 3)) (maior (list 1 2 3))
(maior (list 1 2 3)) (maior (list 2 3))
(maior (list 2 3)) (maior (list 3))
INF05008 Cap. 29 - Custo de Computação 12/16
Exemplo 4
;; maior2 : lista-de-números -> número
;; Determina o maior de uma lista não vazia de números
(define (maior2 ldn)
(cond
[(empty? (rest ldn)) (first ldn)]
[else (local (
(define maior-do-resto (maior2 (rest ldn))) )
(cond
[(> maior-do-resto (first ldn)) maior-do-resto]
[else (first ldn)])])))}
INF05008 Cap. 29 - Custo de Computação 13/16
Ordens de Grandeza
I O custo de um programa, com relação ao tamanho da
entrada, pode ser de ordem:
I Constante: O(1)
I Linear: O(N)
I Logarítmica: O(log(N))
I Polinomial: O(NC), onde C ∈ R
I Fatorial: O(!N)
I Exponencial: O(CN ), onde C ∈ R e C > 1
INF05008 Cap. 29 - Custo de Computação 14/16
Ordens de Grandeza
I Usando esse custo, pode-se dividir os problemas computáveis
em classes
I A partir da classe do problema, podemos saber se existe ou
não um algoritmo eficiente que possa resolvê-lo
I Um algoritmo eficiente é aquele que resolve o problema dentro
de um tempo razoável
I Um algoritmo O(1) para resolver um determinado problema é
chamado de algoritmo ótimo, porém encontrar tal algoritmo é
geralmente improvável, ou até impossível...
INF05008 Cap. 29 - Custo de Computação 15/16
Em outras disciplinas...
I Estruturas de Dados (INA-2)
I Lógica para Computação (INT-2)I Teoria dos Grafos e Análise Combinatória (INT-2)
I Classificação e Pesquisa de Dados (INA-3)
I Teoria da Computação (INT-3)
I Linguagens Formais e Autômatos (INT-4)
I Complexidade de Algoritmos (INT-4)
I Semântica Formal (INT-5)
INF05008 Cap. 29 - Custo de Computação 16/16

Outros materiais