Вы находитесь на странице: 1из 105

Engenharia de Computao

ALGORITMOS E ESTRUTURA DE DADOS II


Professora Andriana Susana Lopes de Oliveira Campanharo
Pontifcia Universidade Catlica de Minas Gerais Belo Horizonte - MG

Setembro de 2011

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Anlise de algoritmos

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

uma metodologia utilizada para estimar os recursos exigidos por um algoritmo.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

uma metodologia utilizada para estimar os recursos exigidos por um algoritmo. A anlise de algoritmos permite comparar os custos relativos de dois ou mais algoritmos na resoluo de um mesmo problema.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

uma metodologia utilizada para estimar os recursos exigidos por um algoritmo. A anlise de algoritmos permite comparar os custos relativos de dois ou mais algoritmos na resoluo de um mesmo problema. Um recurso levado em considerao para analisar um algoritmo , em geral, o tempo necessrio para a execuo do mesmo.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Funo de complexidade de tempo: f (n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Funo de complexidade de tempo: f (n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n. A anlise do tempo de execuo de um algoritmo est relacionada com o nmero de operaes bsicas utilizadas pelo algoritmo.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Funo de complexidade de tempo: f (n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n. A anlise do tempo de execuo de um algoritmo est relacionada com o nmero de operaes bsicas utilizadas pelo algoritmo. Um outro recurso levado em considerao para analisar um algoritmo o espao de memria exigido por suas estruturas de dados.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Funo de complexidade de tempo: f (n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n. A anlise do tempo de execuo de um algoritmo est relacionada com o nmero de operaes bsicas utilizadas pelo algoritmo. Um outro recurso levado em considerao para analisar um algoritmo o espao de memria exigido por suas estruturas de dados. Funo de complexidade de espao: f (n) mede o espao de memria necessrio para a execuo de um algoritmo em um problema de tamanho n.
Professora Andriana S. L. O. Campanharo Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Para analisar a performance de um algoritmo, levamos em considerao o nmero de operaes bsicas exigidas para processar um input de um dado tamanho.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 1
Consideremos um algoritmo para determinar o maior valor em uma vetor de n posies. O algoritmo pesquisa cada nmero, salvando o maior valor encontrado. Ou seja:

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 1
Consideremos um algoritmo para determinar o maior valor em uma vetor de n posies. O algoritmo pesquisa cada nmero, salvando o maior valor encontrado. Ou seja:

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 1

Neste exemplo, o tamanho do problema n, o nmero de inteiros armazenados no vetor vet[n]. A cada iterao, a operao bsica comparar dois inteiros.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 1

Neste exemplo, o tamanho do problema n, o nmero de inteiros armazenados no vetor vet[n]. A cada iterao, a operao bsica comparar dois inteiros. O fator determinante, que afeta o tempo de execuo do programa anterior, o tamanho do input (n). Ou seja, quanto maior o tamanho de vet[n], maior o nmero de comparaes a serem feitas na busca pelo seu maior valor.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 1

Se c o tempo necessrio para examinar um valor, ento T (n) = cn.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 1

Se c o tempo necessrio para examinar um valor, ento T (n) = cn. O tempo c inclui o tempo necessrio para incrementar a varivel i e atribuir varivel maior_valor o maior valor encontrado at aquele momento. Ou seja, no estamos preocupados com o valor exato de c.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 2

O tempo de execuo para atribuir a primeira posio de um vetor de inteiros para uma varivel simplesmente o tempo necessrio para copiar o valor da primeira posio do vetor. A equao para este algoritmo : T (n) = c1 indicando que o tamanho do input no afeta o tempo de execuo (ou seja, o tempo de execuo constante).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 3

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 3

Qual o tempo de execuo do trecho do programa acima? A operao bsica em questo o incremento da varivel sum.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 3

Qual o tempo de execuo do trecho do programa acima? A operao bsica em questo o incremento da varivel sum. Assumindo que cada incremento consome c2 unidades de tempo, o tempo de execuo do programa T (n) = c2 n2 .

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 4

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 4

Qual o tempo de execuo do trecho do programa acima? A operao bsica em questo o incremento da varivel sum.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 4

A instruo sum++ ser executada: 1 vez quando i=1;

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 4

A instruo sum++ ser executada: 1 vez quando i=1; 2 vezes quando i=2;

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 4

A instruo sum++ ser executada: 1 vez quando i=1; 2 vezes quando i=2; ...

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 4

A instruo sum++ ser executada: 1 vez quando i=1; 2 vezes quando i=2; ... n vezes quando i = n

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 4

O total de vezes ser: 1 + 2 + . . . + n =

n i=1 i

n(n+1) 2

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exemplo 4

O total de vezes ser: 1 + 2 + . . . + n =

n i=1 i

n(n+1) 2

Assumindo que cada incremento consome c3 unidades de tempo, o tempo de execuo do programa T (n) = c3 n(n+1) . 2

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 1

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 1

Qual o tempo de execuo do trecho do programa acima?

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 1

Qual o tempo de execuo do trecho do programa acima? O loop externo executado log2 n + 1 (j que a cada iterao k multiplicado por 2 at atingir n).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 1

Qual o tempo de execuo do trecho do programa acima? O loop externo executado log2 n + 1 (j que a cada iterao k multiplicado por 2 at atingir n). O loop interno executado n vezes.
Professora Andriana S. L. O. Campanharo Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 1

Logo, o custo total dado por:


log2 n

n = n log2 n + n = n(log2 n + 1)
k =0

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 1

Logo, o custo total dado por:


log2 n

n = n log2 n + n = n(log2 n + 1)
k =0

Assumindo que cada incremento de sum1 consome c unidades de tempo, o tempo de execuo do programa : T (n) = cn(log2 n + 1)

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 2

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 2

Qual o tempo de execuo do trecho do programa acima?

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 2

Qual o tempo de execuo do trecho do programa acima? O loop externo executado log2 n + 1 (j que a cada iterao k multiplicado por 2 at atingir n).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 2

Qual o tempo de execuo do trecho do programa acima? O loop externo executado log2 n + 1 (j que a cada iterao k multiplicado por 2 at atingir n). O loop interno tem um custo k que dobra a cada iterao.
Professora Andriana S. L. O. Campanharo Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 2

Logo, o custo total dado por:


log2 n

2k = 2log2 n+1 1 = 2n 1
k =0

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Anlise de algoritmos

Exerccio 2

Logo, o custo total dado por:


log2 n

2k = 2log2 n+1 1 = 2n 1
k =0

Assumindo que cada incremento de sum2 consome c unidades de tempo, o tempo de execuo do programa : T (n) = c(2n 1)

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Para valores sucientemente pequenos de n, qualquer algoritmo custa pouco para ser executado, mesmo os inecientes.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Para valores sucientemente pequenos de n, qualquer algoritmo custa pouco para ser executado, mesmo os inecientes. A escolha do algoritmo no um problema crtico para problemas de tamanho pequeno.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Para valores sucientemente pequenos de n, qualquer algoritmo custa pouco para ser executado, mesmo os inecientes. A escolha do algoritmo no um problema crtico para problemas de tamanho pequeno. Logo, a anlise de algoritmos realizada para valores grandes de n.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Estuda-se o comportamento assinttico das funes de custo (comportamento de suas funes de custo para valores grandes de n).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Estuda-se o comportamento assinttico das funes de custo (comportamento de suas funes de custo para valores grandes de n). O comportamento assinttico de f (n) representa o limite do comportamento do custo quando n cresce.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Estuda-se o comportamento assinttico das funes de custo (comportamento de suas funes de custo para valores grandes de n). O comportamento assinttico de f (n) representa o limite do comportamento do custo quando n cresce. Logo, a anlise de algoritmos realizada para valores grandes de n.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Dominao assinttica

A anlise de um algoritmo geralmente conta com apenas algumas operaes elementares.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Dominao assinttica

A anlise de um algoritmo geralmente conta com apenas algumas operaes elementares. A medida de custo ou medida de complexidade relata o crescimento assinttico da operao considerada.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Dominao assinttica
Denio Uma funo f (n) domina assintoticamente outra funo g(n) se existem duas constantes positivas c e m tais que, para n m, temos |g(n)| c|f (n)|.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Dominao assinttica
Denio Uma funo f (n) domina assintoticamente outra funo g(n) se existem duas constantes positivas c e m tais que, para n m, temos |g(n)| c|f (n)|.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Notao O
Denio Uma funo g(n) O(f (n)) se existem duas constantes positivas c e m tais que g(n) cf (n), para todo n m.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Notao O
Denio Uma funo g(n) O(f (n)) se existem duas constantes positivas c e m tais que g(n) cf (n), para todo n m. Escrevemos g(n) = O(f (n)) para expressar que f (n) domina assintoticamente g(n). L-se g(n) da ordem no mximo f (n).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Notao O
Denio Uma funo g(n) O(f (n)) se existem duas constantes positivas c e m tais que g(n) cf (n), para todo n m. Escrevemos g(n) = O(f (n)) para expressar que f (n) domina assintoticamente g(n). L-se g(n) da ordem no mximo f (n). Exemplo: quando dizemos que o tempo de execuo T (n) de um programa O(n2 ), signica que existem constantes c e m tais que, para valores de n m, T (n) cn2 .

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Notao O

Seja g(n) = (n + 1)2 .

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Notao O

Seja g(n) = (n + 1)2 . g(n) O(n2 ) pois para m = 1 e c = 4, temos:

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Notao O

Seja g(n) = (n + 1)2 . g(n) O(n2 ) pois para m = 1 e c = 4, temos: (n + 1)2 4n2 para n 1.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Notao O

Mostrar que g(n) = 3n3 + 2n2 + n O(n3 ).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Notao O

Mostrar que g(n) = 3n3 + 2n2 + n O(n3 ). Basta mostrar que 3n3 + 2n2 + n 6n3 , para n 0.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Notao O

Mostrar que g(n) = 3n3 + 2n2 + n O(n3 ). Basta mostrar que 3n3 + 2n2 + n 6n3 , para n 0. A funo g(n) = 3n3 + 2n2 + n tambm O(n4 ), entretanto esta armao mais fraca do que dizer que g(n) O(n3 ).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Operao com a notao O


O(f(n)) + O(g(n)) = O(max(f(n),g(n))).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Operao com a notao O


O(f(n)) + O(g(n)) = O(max(f(n),g(n))). Suponha trs trechos cujos tempos de execuo so O(n), O(n2 ) e O(n log n).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Operao com a notao O


O(f(n)) + O(g(n)) = O(max(f(n),g(n))). Suponha trs trechos cujos tempos de execuo so O(n), O(n2 ) e O(n log n). O tempo de execuo dos dois primeiros trechos O(max(n, n2 )), que O(n2 ).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Operao com a notao O


O(f(n)) + O(g(n)) = O(max(f(n),g(n))). Suponha trs trechos cujos tempos de execuo so O(n), O(n2 ) e O(n log n). O tempo de execuo dos dois primeiros trechos O(max(n, n2 )), que O(n2 ). O tempo de execuo de todos os trs trechos ento O(max(n2 , n log n)), que O(n2 ).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Operao com a notao O

O tempo de execuo dos dois trechos O(max(n2 , n3 )), que O(n3 ).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(1) - algoritmos de complexidade constante.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(1) - algoritmos de complexidade constante. Uso do algoritmo independe do tamanho da entrada n.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(log(n)) - algoritmos de complexidade logartmica.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(log(n)) - algoritmos de complexidade logartmica. Quando n = 1000, log10 n = 3, quando n = 1000000, log10 n = 6.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(n) - algoritmos de complexidade linear.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(n) - algoritmos de complexidade linear. Cada vez que n dobra de tamanho, o tempo de execuo tambm dobra.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(n log n)

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(n log n) Quando n 1 milho, n log10 n 6 milhes.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(n log n) Quando n 1 milho, n log10 n 6 milhes. Quando n 2 milhes, n log10 n cerca de 13 milhes, pouco mais do que o dobro.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas


f (n) = O(n2 ) - algoritmos de complexidade quadrtica.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas


f (n) = O(n2 ) - algoritmos de complexidade quadrtica. Ocorrem quando os itens de dados so processados aos pares, muitas vezes em um anel dentro de outro. Quando n 1000, o nmero de operaes da ordem de 1 milho. Sempre que n dobra, o tempo de execuo multiplicado por 4. teis para resolver problemas de tamanhos relativamente pequenos.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(n3 ) - algoritmos de complexidade cbica.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(n3 ) - algoritmos de complexidade cbica. teis apenas para resolver pequenos problemas. Quando n 100, o nmero de operaes da ordem de 1 milho. Sempre que n dobra, o tempo de execuo ca multiplicado por 8.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(2n ) - algoritmos de complexidade exponencial.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(2n ) - algoritmos de complexidade exponencial. Quando n 20, o tempo de execuo cerca de 1 milho. Ocorrem na soluo de problemas quando se usa fora bruta para resolv-los. Geralmente no so teis sob o ponto de vista prtico.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(n!) - algoritmos de complexidade exponencial, , apesar de O(n!) ter comportamento muito pior do que O(2n ).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

f (n) = O(n!) - algoritmos de complexidade exponencial, , apesar de O(n!) ter comportamento muito pior do que O(2n ). n = 20 20! = 2432902008176640000, um nmero com 19 dgitos. n = 40 um nmero com 48 dgitos. Geralmente ocorrem quando se usa fora bruta para na soluo do problema.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Principais Classes de Problemas

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Comparaes de programas

Um programa com tempo de execuo O(n) melhor que outro com tempo O(n2 ). Porm, as constantes de proporcionalidade podem alterar esta considerao.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Comparaes de programas

Um programa com tempo de execuo O(n) melhor que outro com tempo O(n2 ). Porm, as constantes de proporcionalidade podem alterar esta considerao. Exemplo: um programa leva 100n unidades de tempo para ser executado e outro leva 2n2

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Comparaes de programas
Qual dos dois programas melhor? Depende do tamanho do problema!

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Comparaes de programas
Qual dos dois programas melhor? Depende do tamanho do problema! Para n < 50, o programa com tempo 2n2 melhor do que o que possui tempo 100n.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Comparaes de programas
Qual dos dois programas melhor? Depende do tamanho do problema! Para n < 50, o programa com tempo 2n2 melhor do que o que possui tempo 100n. Para problemas com entrada de dados pequena prefervel usar o programa cujo tempo de execuo O(n2 ).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Comparaes de programas
Qual dos dois programas melhor? Depende do tamanho do problema! Para n < 50, o programa com tempo 2n2 melhor do que o que possui tempo 100n. Para problemas com entrada de dados pequena prefervel usar o programa cujo tempo de execuo O(n2 ). Entretanto, quando n cresce, o programa com tempo de execuo O(n2 ) leva muito mais tempo que o programa O(n).
Professora Andriana S. L. O. Campanharo Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Melhor Caso, Pior Caso e Caso Mdio


Melhor caso Menor tempo de execuo sobre todas as entradas de tamanho n.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Melhor Caso, Pior Caso e Caso Mdio


Melhor caso Menor tempo de execuo sobre todas as entradas de tamanho n. Pior caso Maior tempo de execuo sobre todas as entradas de tamanho n.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Melhor Caso, Pior Caso e Caso Mdio


Melhor caso Menor tempo de execuo sobre todas as entradas de tamanho n. Pior caso Maior tempo de execuo sobre todas as entradas de tamanho n. Se f uma funo de complexidade baseada na anlise de pior caso, o custo de aplicar o algoritmo nunca maior do que f (n).

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Melhor Caso, Pior Caso e Caso Mdio

Caso mdio Caso mdio (ou caso esperado): mdia dos tempos de execuo de todas as entradas de tamanho n.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Exemplo

Dado um vetor int v[n], determinar em qual posio de v se encontra um inteiro qualquer.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Exemplo

Dado um vetor int v[n], determinar em qual posio de v se encontra um inteiro qualquer. Melhor caso Elemento procurado o primeiro consultado. f (n) = 1

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Exemplo

Pior caso Elemento procurado o ltimo consultado ou no est presente no vetor. f (n) = n

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Exemplo

Pior caso Elemento procurado o ltimo consultado ou no est presente no vetor. f (n) = n Caso mdio f (n) = (n + 1)/2

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Maior e Menor Elemento (1)


Considere o problema de encontrar o maior e o menor elemento de um vetor de inteiros A[n]; n 1.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Maior e Menor Elemento (1)


Considere o problema de encontrar o maior e o menor elemento de um vetor de inteiros A[n]; n 1.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Maior e Menor Elemento (1)

Seja f (n) o nmero de comparaes entre os elementos de A, se A contiver n elementos.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Maior e Menor Elemento (1)

Seja f (n) o nmero de comparaes entre os elementos de A, se A contiver n elementos. Melhor caso Logo f (n) = 2(n 1) para n > 0, para o melhor caso, pior caso e caso mdio.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Maior e Menor Elemento (2)


O algoritmo anterior pode ser facilmente melhorado: a comparao A[i] < Min s necessria quando a comparao A[i] > Max d falso.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Maior e Menor Elemento (2)


O algoritmo anterior pode ser facilmente melhorado: a comparao A[i] < Min s necessria quando a comparao A[i] > Max d falso.

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Maior e Menor Elemento (2)


Melhor caso Quando os elementos esto em ordem crescente. f (n) = n 1

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Maior e Menor Elemento (2)


Melhor caso Quando os elementos esto em ordem crescente. f (n) = n 1 Pior caso Quando os elementos esto em ordem decrescente. f (n) = 2(n 1)

Professora Andriana S. L. O. Campanharo

Engenharia de Computao

Engenharia de Computao Comportamento assinttico de funes

Maior e Menor Elemento (2)


Melhor caso Quando os elementos esto em ordem crescente. f (n) = n 1 Pior caso Quando os elementos esto em ordem decrescente. f (n) = 2(n 1) Caso mdio No caso mdio, A[i] maior do que Max a metade das vezes. f (n) = (3n 3)/2
Professora Andriana S. L. O. Campanharo Engenharia de Computao

Вам также может понравиться