Upload
daniel-campos
View
8
Download
0
Embed Size (px)
Citation preview
Engenharia de Computação
ALGORITMOS E ESTRUTURA DE DADOS II
Professora Andriana Susana Lopes de OliveiraCampanharo
Pontifícia Universidade Católica de Minas GeraisBelo Horizonte - MG
Setembro de 2011
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Análise de algoritmos
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
É uma metodologia utilizada para estimar os recursos exigidospor um algoritmo.
A análise de algoritmos permite comparar os custos relativosde dois ou mais algoritmos na resolução de um mesmoproblema.
Um recurso levado em consideração para analisar umalgoritmo é, em geral, o tempo necessário para a execução domesmo.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
É uma metodologia utilizada para estimar os recursos exigidospor um algoritmo.
A análise de algoritmos permite comparar os custos relativosde dois ou mais algoritmos na resolução de um mesmoproblema.
Um recurso levado em consideração para analisar umalgoritmo é, em geral, o tempo necessário para a execução domesmo.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
É uma metodologia utilizada para estimar os recursos exigidospor um algoritmo.
A análise de algoritmos permite comparar os custos relativosde dois ou mais algoritmos na resolução de um mesmoproblema.
Um recurso levado em consideração para analisar umalgoritmo é, em geral, o tempo necessário para a execução domesmo.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Função de complexidade de tempo: f (n) mede o temponecessário para executar um algoritmo em um problema detamanho n.
A análise do tempo de execução de um algoritmo estárelacionada com o número de operações básicas utilizadaspelo algoritmo.
Um outro recurso levado em consideração para analisar umalgoritmo é o espaço de memória exigido por suas estruturasde dados.
Função de complexidade de espaço: f (n) mede o espaço dememória necessário para a execução de um algoritmo em umproblema de tamanho n.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Função de complexidade de tempo: f (n) mede o temponecessário para executar um algoritmo em um problema detamanho n.
A análise do tempo de execução de um algoritmo estárelacionada com o número de operações básicas utilizadaspelo algoritmo.
Um outro recurso levado em consideração para analisar umalgoritmo é o espaço de memória exigido por suas estruturasde dados.
Função de complexidade de espaço: f (n) mede o espaço dememória necessário para a execução de um algoritmo em umproblema de tamanho n.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Função de complexidade de tempo: f (n) mede o temponecessário para executar um algoritmo em um problema detamanho n.
A análise do tempo de execução de um algoritmo estárelacionada com o número de operações básicas utilizadaspelo algoritmo.
Um outro recurso levado em consideração para analisar umalgoritmo é o espaço de memória exigido por suas estruturasde dados.
Função de complexidade de espaço: f (n) mede o espaço dememória necessário para a execução de um algoritmo em umproblema de tamanho n.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Função de complexidade de tempo: f (n) mede o temponecessário para executar um algoritmo em um problema detamanho n.
A análise do tempo de execução de um algoritmo estárelacionada com o número de operações básicas utilizadaspelo algoritmo.
Um outro recurso levado em consideração para analisar umalgoritmo é o espaço de memória exigido por suas estruturasde dados.
Função de complexidade de espaço: f (n) mede o espaço dememória necessário para a execução de um algoritmo em umproblema de tamanho n.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Para analisar a performance de um algoritmo, levamos emconsideração o número de operações básicas exigidas paraprocessar um input de um dado tamanho.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 1
Consideremos um algoritmo para determinar o maior valor emuma vetor de n posições. O algoritmo pesquisa cada número,salvando o maior valor encontrado. Ou seja:
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 1
Consideremos um algoritmo para determinar o maior valor emuma vetor de n posições. O algoritmo pesquisa cada número,salvando o maior valor encontrado. Ou seja:
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 1
Neste exemplo, o tamanho do problema é n, o número deinteiros armazenados no vetor vet[n]. A cada iteração, aoperação básica é comparar dois inteiros.
O fator determinante, que afeta o tempo de execução doprograma anterior, é o tamanho do input (n). Ou seja, quantomaior o tamanho de vet[n], maior o número de comparaçõesa serem feitas na busca pelo seu maior valor.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 1
Neste exemplo, o tamanho do problema é n, o número deinteiros armazenados no vetor vet[n]. A cada iteração, aoperação básica é comparar dois inteiros.
O fator determinante, que afeta o tempo de execução doprograma anterior, é o tamanho do input (n). Ou seja, quantomaior o tamanho de vet[n], maior o número de comparaçõesa serem feitas na busca pelo seu maior valor.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 1
Se c é o tempo necessário para examinar um valor, entãoT (n) = cn.
O tempo c inclui o tempo necessário para incrementar avariável i e atribuir à variável maior_valor o maior valorencontrado até aquele momento. Ou seja, não estamospreocupados com o valor exato de c.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 1
Se c é o tempo necessário para examinar um valor, entãoT (n) = cn.
O tempo c inclui o tempo necessário para incrementar avariável i e atribuir à variável maior_valor o maior valorencontrado até aquele momento. Ou seja, não estamospreocupados com o valor exato de c.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 2
O tempo de execução para atribuir a primeira posição de umvetor de inteiros para uma variável é simplesmente o temponecessário para copiar o valor da primeira posição do vetor. Aequação para este algoritmo é:T (n) = c1indicando que o tamanho do input não afeta o tempo deexecução (ou seja, o tempo de execução é constante).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 3
Qual é o tempo de execução do trecho do programa acima? Aoperação básica em questão é o incremento da variável sum.
Assumindo que cada incremento consome c2 unidades detempo, o tempo de execução do programa é T (n) = c2n2.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 3
Qual é o tempo de execução do trecho do programa acima? Aoperação básica em questão é o incremento da variável sum.
Assumindo que cada incremento consome c2 unidades detempo, o tempo de execução do programa é T (n) = c2n2.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 3
Qual é o tempo de execução do trecho do programa acima? Aoperação básica em questão é o incremento da variável sum.
Assumindo que cada incremento consome c2 unidades detempo, o tempo de execução do programa é T (n) = c2n2.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 4
Qual é o tempo de execução do trecho do programa acima? Aoperação básica em questão é o incremento da variável sum.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 4
Qual é o tempo de execução do trecho do programa acima? Aoperação básica em questão é o incremento da variável sum.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 4
A instrução 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 Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 4
A instrução 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 Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 4
A instrução 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 Computação
Engenharia de Computação
Análise de algoritmos
Exemplo 4
A instrução 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 Computação
Engenharia de Computação
Análise 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 detempo, o tempo de execução do programa é T (n) = c3
n(n+1)2 .
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise 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 detempo, o tempo de execução do programa é T (n) = c3
n(n+1)2 .
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 1
Qual é o tempo de execução do trecho do programa acima?
O loop externo é executado log2 n + 1 (já que a cada iteração ké multiplicado por 2 até atingir n).
O loop interno é executado n vezes.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 1
Qual é o tempo de execução do trecho do programa acima?
O loop externo é executado log2 n + 1 (já que a cada iteração ké multiplicado por 2 até atingir n).
O loop interno é executado n vezes.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 1
Qual é o tempo de execução do trecho do programa acima?
O loop externo é executado log2 n + 1 (já que a cada iteração ké multiplicado por 2 até atingir n).
O loop interno é executado n vezes.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 1
Qual é o tempo de execução do trecho do programa acima?
O loop externo é executado log2 n + 1 (já que a cada iteração ké multiplicado por 2 até atingir n).
O loop interno é executado n vezes.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 1
Logo, o custo total é dado por:
log2 n∑k=0
n = n log2 n + n = n(log2 n + 1)
Assumindo que cada incremento de sum1 consome c unidadesde tempo, o tempo de execução do programa é:T (n) = cn(log2 n + 1)
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 1
Logo, o custo total é dado por:
log2 n∑k=0
n = n log2 n + n = n(log2 n + 1)
Assumindo que cada incremento de sum1 consome c unidadesde tempo, o tempo de execução do programa é:T (n) = cn(log2 n + 1)
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 2
Qual é o tempo de execução do trecho do programa acima?
O loop externo é executado log2 n + 1 (já que a cada iteração ké multiplicado por 2 até atingir n).
O loop interno tem um custo k que dobra a cada iteração.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 2
Qual é o tempo de execução do trecho do programa acima?
O loop externo é executado log2 n + 1 (já que a cada iteração ké multiplicado por 2 até atingir n).
O loop interno tem um custo k que dobra a cada iteração.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 2
Qual é o tempo de execução do trecho do programa acima?
O loop externo é executado log2 n + 1 (já que a cada iteração ké multiplicado por 2 até atingir n).
O loop interno tem um custo k que dobra a cada iteração.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 2
Qual é o tempo de execução do trecho do programa acima?
O loop externo é executado log2 n + 1 (já que a cada iteração ké multiplicado por 2 até atingir n).
O loop interno tem um custo k que dobra a cada iteração.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 2
Logo, o custo total é dado por:
log2 n∑k=0
2k = 2log2 n+1 − 1 = 2n − 1
Assumindo que cada incremento de sum2 consome c unidadesde tempo, o tempo de execução do programa é:T (n) = c(2n − 1)
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Análise de algoritmos
Exercício 2
Logo, o custo total é dado por:
log2 n∑k=0
2k = 2log2 n+1 − 1 = 2n − 1
Assumindo que cada incremento de sum2 consome c unidadesde tempo, o tempo de execução do programa é:T (n) = c(2n − 1)
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Para valores suficientemente pequenos de n, qualqueralgoritmo custa pouco para ser executado, mesmo osineficientes.
A escolha do algoritmo não é um problema crítico paraproblemas de tamanho pequeno.
Logo, a análise de algoritmos é realizada para valores grandesde n.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Para valores suficientemente pequenos de n, qualqueralgoritmo custa pouco para ser executado, mesmo osineficientes.
A escolha do algoritmo não é um problema crítico paraproblemas de tamanho pequeno.
Logo, a análise de algoritmos é realizada para valores grandesde n.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Para valores suficientemente pequenos de n, qualqueralgoritmo custa pouco para ser executado, mesmo osineficientes.
A escolha do algoritmo não é um problema crítico paraproblemas de tamanho pequeno.
Logo, a análise de algoritmos é realizada para valores grandesde n.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Estuda-se o comportamento assintótico das funções de custo(comportamento de suas funções de custo para valoresgrandes de n).
O comportamento assintótico de f (n) representa o limite docomportamento do custo quando n cresce.
Logo, a análise de algoritmos é realizada para valores grandesde n.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Estuda-se o comportamento assintótico das funções de custo(comportamento de suas funções de custo para valoresgrandes de n).
O comportamento assintótico de f (n) representa o limite docomportamento do custo quando n cresce.
Logo, a análise de algoritmos é realizada para valores grandesde n.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Estuda-se o comportamento assintótico das funções de custo(comportamento de suas funções de custo para valoresgrandes de n).
O comportamento assintótico de f (n) representa o limite docomportamento do custo quando n cresce.
Logo, a análise de algoritmos é realizada para valores grandesde n.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Dominação assintótica
A análise de um algoritmo geralmente conta com apenasalgumas operações elementares.
A medida de custo ou medida de complexidade relata ocrescimento assintótico da operação considerada.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Dominação assintótica
A análise de um algoritmo geralmente conta com apenasalgumas operações elementares.
A medida de custo ou medida de complexidade relata ocrescimento assintótico da operação considerada.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Dominação assintótica
Definição
Uma função f (n) domina assintoticamente outra função g(n)se existem duas constantes positivas c e m tais que, paran ≥ m, temos |g(n)| ≤ c|f (n)|.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Dominação assintótica
Definição
Uma função f (n) domina assintoticamente outra função g(n)se existem duas constantes positivas c e m tais que, paran ≥ m, temos |g(n)| ≤ c|f (n)|.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Notação O
Definição
Uma função g(n) é O(f (n)) se existem duas constantespositivas c e m tais que g(n) ≤ cf (n), para todo n ≥ m.
Escrevemos g(n) = O(f (n)) para expressar que f (n) dominaassintoticamente g(n). Lê-se g(n) é da ordem no máximo f (n).
Exemplo: quando dizemos que o tempo de execução T (n) deum programa é O(n2), significa que existem constantes c e mtais que, para valores de n ≥ m, T (n) ≤ cn2.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Notação O
Definição
Uma função g(n) é O(f (n)) se existem duas constantespositivas c e m tais que g(n) ≤ cf (n), para todo n ≥ m.
Escrevemos g(n) = O(f (n)) para expressar que f (n) dominaassintoticamente g(n). Lê-se g(n) é da ordem no máximo f (n).
Exemplo: quando dizemos que o tempo de execução T (n) deum programa é O(n2), significa que existem constantes c e mtais que, para valores de n ≥ m, T (n) ≤ cn2.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Notação O
Definição
Uma função g(n) é O(f (n)) se existem duas constantespositivas c e m tais que g(n) ≤ cf (n), para todo n ≥ m.
Escrevemos g(n) = O(f (n)) para expressar que f (n) dominaassintoticamente g(n). Lê-se g(n) é da ordem no máximo f (n).
Exemplo: quando dizemos que o tempo de execução T (n) deum programa é O(n2), significa que existem constantes c e mtais que, para valores de n ≥ m, T (n) ≤ cn2.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Notação 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 Computação
Engenharia de Computação
Comportamento assintótico de funções
Notação 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 Computação
Engenharia de Computação
Comportamento assintótico de funções
Notação 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 Computação
Engenharia de Computação
Comportamento assintótico de funções
Notação O
Mostrar que g(n) = 3n3 + 2n2 + n é O(n3).
Basta mostrar que 3n3 + 2n2 + n ≤ 6n3, para n ≥ 0.
A função g(n) = 3n3 + 2n2 + n é também O(n4), entretantoesta afirmação é mais fraca do que dizer que g(n) é O(n3).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Notação O
Mostrar que g(n) = 3n3 + 2n2 + n é O(n3).
Basta mostrar que 3n3 + 2n2 + n ≤ 6n3, para n ≥ 0.
A função g(n) = 3n3 + 2n2 + n é também O(n4), entretantoesta afirmação é mais fraca do que dizer que g(n) é O(n3).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Notação O
Mostrar que g(n) = 3n3 + 2n2 + n é O(n3).
Basta mostrar que 3n3 + 2n2 + n ≤ 6n3, para n ≥ 0.
A função g(n) = 3n3 + 2n2 + n é também O(n4), entretantoesta afirmação é mais fraca do que dizer que g(n) é O(n3).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Operação com a notação O
O(f(n)) + O(g(n)) = O(max(f(n),g(n))).
Suponha três trechos cujos tempos de execução são O(n),O(n2) e O(n log n).
O tempo de execução dos dois primeiros trechos éO(max(n,n2)), que é O(n2).
O tempo de execução de todos os três trechos é entãoO(max(n2,n log n)), que é O(n2).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Operação com a notação O
O(f(n)) + O(g(n)) = O(max(f(n),g(n))).
Suponha três trechos cujos tempos de execução são O(n),O(n2) e O(n log n).
O tempo de execução dos dois primeiros trechos éO(max(n,n2)), que é O(n2).
O tempo de execução de todos os três trechos é entãoO(max(n2,n log n)), que é O(n2).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Operação com a notação O
O(f(n)) + O(g(n)) = O(max(f(n),g(n))).
Suponha três trechos cujos tempos de execução são O(n),O(n2) e O(n log n).
O tempo de execução dos dois primeiros trechos éO(max(n,n2)), que é O(n2).
O tempo de execução de todos os três trechos é entãoO(max(n2,n log n)), que é O(n2).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Operação com a notação O
O(f(n)) + O(g(n)) = O(max(f(n),g(n))).
Suponha três trechos cujos tempos de execução são O(n),O(n2) e O(n log n).
O tempo de execução dos dois primeiros trechos éO(max(n,n2)), que é O(n2).
O tempo de execução de todos os três trechos é entãoO(max(n2,n log n)), que é O(n2).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Operação com a notação O
O tempo de execução dos dois trechos é O(max(n2,n3)), queé O(n3).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
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 Computação
Engenharia de Computação
Comportamento assintótico de funções
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 Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(log(n)) - algoritmos de complexidade logarítmica.
Quando n = 1000, log10 n = 3, quando n = 1000000,log10 n = 6.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(log(n)) - algoritmos de complexidade logarítmica.
Quando n = 1000, log10 n = 3, quando n = 1000000,log10 n = 6.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(n) - algoritmos de complexidade linear.
Cada vez que n dobra de tamanho, o tempo de execuçãotambém dobra.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(n) - algoritmos de complexidade linear.
Cada vez que n dobra de tamanho, o tempo de execuçãotambém dobra.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(n log n)
Quando n é 1 milhão, n log10 n é 6 milhões.
Quando n é 2 milhões, n log10 n é cerca de 13 milhões, poucomais do que o dobro.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(n log n)
Quando n é 1 milhão, n log10 n é 6 milhões.
Quando n é 2 milhões, n log10 n é cerca de 13 milhões, poucomais do que o dobro.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(n log n)
Quando n é 1 milhão, n log10 n é 6 milhões.
Quando n é 2 milhões, n log10 n é cerca de 13 milhões, poucomais do que o dobro.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(n2) - algoritmos de complexidade quadrática.
Ocorrem quando os itens de dados são processados aospares, muitas vezes em um anel dentro de outro.Quando n é 1000, o número de operações é da ordem de1 milhão.Sempre que n dobra, o tempo de execução é multiplicadopor 4.Úteis para resolver problemas de tamanhos relativamentepequenos.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(n2) - algoritmos de complexidade quadrática.
Ocorrem quando os itens de dados são processados aospares, muitas vezes em um anel dentro de outro.Quando n é 1000, o número de operações é da ordem de1 milhão.Sempre que n dobra, o tempo de execução é multiplicadopor 4.Úteis para resolver problemas de tamanhos relativamentepequenos.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(n3) - algoritmos de complexidade cúbica.
Úteis apenas para resolver pequenos problemas.Quando n é 100, o número de operações é da ordem de 1milhão.Sempre que n dobra, o tempo de execução ficamultiplicado por 8.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(n3) - algoritmos de complexidade cúbica.
Úteis apenas para resolver pequenos problemas.Quando n é 100, o número de operações é da ordem de 1milhão.Sempre que n dobra, o tempo de execução ficamultiplicado por 8.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(2n) - algoritmos de complexidade exponencial.
Quando n é 20, o tempo de execução é cerca de 1 milhão.Ocorrem na solução de problemas quando se usa forçabruta para resolvê-los.Geralmente não são úteis sob o ponto de vista prático.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
f (n) = O(2n) - algoritmos de complexidade exponencial.
Quando n é 20, o tempo de execução é cerca de 1 milhão.Ocorrem na solução de problemas quando se usa forçabruta para resolvê-los.Geralmente não são úteis sob o ponto de vista prático.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
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 número com19 dígitos.n = 40⇒ um número com 48 dígitos.Geralmente ocorrem quando se usa força bruta para nasolução do problema.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
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 número com19 dígitos.n = 40⇒ um número com 48 dígitos.Geralmente ocorrem quando se usa força bruta para nasolução do problema.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Principais Classes de Problemas
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Comparações de programas
Um programa com tempo de execução O(n) é melhor queoutro com tempo O(n2). Porém, as constantes deproporcionalidade podem alterar esta consideração.
Exemplo: um programa leva 100n unidades de tempo para serexecutado e outro leva 2n2
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Comparações de programas
Um programa com tempo de execução O(n) é melhor queoutro com tempo O(n2). Porém, as constantes deproporcionalidade podem alterar esta consideração.
Exemplo: um programa leva 100n unidades de tempo para serexecutado e outro leva 2n2
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Comparações de programas
Qual dos dois programas é melhor? Depende do tamanho doproblema!
Para n < 50, o programa com tempo 2n2 é melhor do que oque possui tempo 100n.
Para problemas com entrada de dados pequena é preferívelusar o programa cujo tempo de execução é O(n2).
Entretanto, quando n cresce, o programa com tempo deexecução O(n2) leva muito mais tempo que o programa O(n).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Comparações de programas
Qual dos dois programas é melhor? Depende do tamanho doproblema!
Para n < 50, o programa com tempo 2n2 é melhor do que oque possui tempo 100n.
Para problemas com entrada de dados pequena é preferívelusar o programa cujo tempo de execução é O(n2).
Entretanto, quando n cresce, o programa com tempo deexecução O(n2) leva muito mais tempo que o programa O(n).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Comparações de programas
Qual dos dois programas é melhor? Depende do tamanho doproblema!
Para n < 50, o programa com tempo 2n2 é melhor do que oque possui tempo 100n.
Para problemas com entrada de dados pequena é preferívelusar o programa cujo tempo de execução é O(n2).
Entretanto, quando n cresce, o programa com tempo deexecução O(n2) leva muito mais tempo que o programa O(n).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Comparações de programas
Qual dos dois programas é melhor? Depende do tamanho doproblema!
Para n < 50, o programa com tempo 2n2 é melhor do que oque possui tempo 100n.
Para problemas com entrada de dados pequena é preferívelusar o programa cujo tempo de execução é O(n2).
Entretanto, quando n cresce, o programa com tempo deexecução O(n2) leva muito mais tempo que o programa O(n).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Melhor Caso, Pior Caso e Caso Médio
Melhor casoMenor tempo de execução sobre todas as entradas detamanho n.
Pior casoMaior tempo de execução sobre todas as entradas de tamanhon.
Se f é uma função de complexidade baseada na análise depior caso, o custo de aplicar o algoritmo nunca é maior do quef (n).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Melhor Caso, Pior Caso e Caso Médio
Melhor casoMenor tempo de execução sobre todas as entradas detamanho n.
Pior casoMaior tempo de execução sobre todas as entradas de tamanhon.
Se f é uma função de complexidade baseada na análise depior caso, o custo de aplicar o algoritmo nunca é maior do quef (n).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Melhor Caso, Pior Caso e Caso Médio
Melhor casoMenor tempo de execução sobre todas as entradas detamanho n.
Pior casoMaior tempo de execução sobre todas as entradas de tamanhon.
Se f é uma função de complexidade baseada na análise depior caso, o custo de aplicar o algoritmo nunca é maior do quef (n).
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Melhor Caso, Pior Caso e Caso Médio
Caso médioCaso médio (ou caso esperado): média dos tempos deexecução de todas as entradas de tamanho n.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Exemplo
Dado um vetor int v[n], determinar em qual posição de v seencontra um inteiro qualquer.
Melhor casoElemento procurado é o primeiro consultado.f (n) = 1
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Exemplo
Dado um vetor int v[n], determinar em qual posição de v seencontra um inteiro qualquer.
Melhor casoElemento procurado é o primeiro consultado.f (n) = 1
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Exemplo
Pior casoElemento procurado é o último consultado ou não estápresente no vetor.f (n) = n
Caso médiof (n) = (n + 1)/2
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Exemplo
Pior casoElemento procurado é o último consultado ou não estápresente no vetor.f (n) = n
Caso médiof (n) = (n + 1)/2
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Maior e Menor Elemento (1)
Considere o problema de encontrar o maior e o menorelemento de um vetor de inteiros A[n]; n ≥ 1.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Maior e Menor Elemento (1)
Considere o problema de encontrar o maior e o menorelemento de um vetor de inteiros A[n]; n ≥ 1.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Maior e Menor Elemento (1)
Seja f (n) o número de comparações entre os elementos de A,se A contiver n elementos.
Melhor casoLogo f (n) = 2(n − 1) para n > 0, para o melhor caso, pior casoe caso médio.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Maior e Menor Elemento (1)
Seja f (n) o número de comparações entre os elementos de A,se A contiver n elementos.
Melhor casoLogo f (n) = 2(n − 1) para n > 0, para o melhor caso, pior casoe caso médio.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Maior e Menor Elemento (2)
O algoritmo anterior pode ser facilmente melhorado: acomparação A[i] < Min só é necessária quando acomparação A[i] > Max dá falso.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Maior e Menor Elemento (2)
O algoritmo anterior pode ser facilmente melhorado: acomparação A[i] < Min só é necessária quando acomparação A[i] > Max dá falso.
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Maior e Menor Elemento (2)
Melhor casoQuando os elementos estão em ordem crescente.f (n) = n − 1
Pior casoQuando os elementos estão em ordem decrescente.f (n) = 2(n − 1)
Caso médioNo caso médio, A[i] é maior do que Max a metade das vezes.f (n) = (3n − 3)/2
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Maior e Menor Elemento (2)
Melhor casoQuando os elementos estão em ordem crescente.f (n) = n − 1
Pior casoQuando os elementos estão em ordem decrescente.f (n) = 2(n − 1)
Caso médioNo caso médio, A[i] é maior do que Max a metade das vezes.f (n) = (3n − 3)/2
Professora Andriana S. L. O. Campanharo Engenharia de Computação
Engenharia de Computação
Comportamento assintótico de funções
Maior e Menor Elemento (2)
Melhor casoQuando os elementos estão em ordem crescente.f (n) = n − 1
Pior casoQuando os elementos estão em ordem decrescente.f (n) = 2(n − 1)
Caso médioNo caso médio, A[i] é maior do que Max a metade das vezes.f (n) = (3n − 3)/2
Professora Andriana S. L. O. Campanharo Engenharia de Computação