105
Engenharia de Computação ALGORITMOS E ESTRUTURA DE DADOS II Professora Andriana Susana Lopes de Oliveira Campanharo Pontifícia Universidade Católica de Minas Gerais Belo Horizonte - MG Setembro de 2011 Professora Andriana S. L. O. Campanharo Engenharia de Computação

471355_complexidade

Embed Size (px)

Citation preview

Page 1: 471355_complexidade

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

Page 2: 471355_complexidade

Engenharia de Computação

Análise de algoritmos

Análise de algoritmos

Professora Andriana S. L. O. Campanharo Engenharia de Computação

Page 3: 471355_complexidade

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

Page 4: 471355_complexidade

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

Page 5: 471355_complexidade

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

Page 6: 471355_complexidade

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

Page 7: 471355_complexidade

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

Page 8: 471355_complexidade

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

Page 9: 471355_complexidade

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

Page 10: 471355_complexidade

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

Page 11: 471355_complexidade

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

Page 12: 471355_complexidade

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

Page 13: 471355_complexidade

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

Page 14: 471355_complexidade

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

Page 15: 471355_complexidade

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

Page 16: 471355_complexidade

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

Page 17: 471355_complexidade

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

Page 18: 471355_complexidade

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

Page 19: 471355_complexidade

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

Page 20: 471355_complexidade

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

Page 21: 471355_complexidade

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

Page 22: 471355_complexidade

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

Page 23: 471355_complexidade

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

Page 24: 471355_complexidade

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

Page 25: 471355_complexidade

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

Page 26: 471355_complexidade

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

Page 27: 471355_complexidade

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

Page 28: 471355_complexidade

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

Page 29: 471355_complexidade

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

Page 30: 471355_complexidade

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

Page 31: 471355_complexidade

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

Page 32: 471355_complexidade

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

Page 33: 471355_complexidade

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

Page 34: 471355_complexidade

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

Page 35: 471355_complexidade

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

Page 36: 471355_complexidade

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

Page 37: 471355_complexidade

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

Page 38: 471355_complexidade

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

Page 39: 471355_complexidade

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

Page 40: 471355_complexidade

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

Page 41: 471355_complexidade

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

Page 42: 471355_complexidade

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

Page 43: 471355_complexidade

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

Page 44: 471355_complexidade

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

Page 45: 471355_complexidade

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

Page 46: 471355_complexidade

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

Page 47: 471355_complexidade

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

Page 48: 471355_complexidade

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

Page 49: 471355_complexidade

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

Page 50: 471355_complexidade

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

Page 51: 471355_complexidade

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

Page 52: 471355_complexidade

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

Page 53: 471355_complexidade

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

Page 54: 471355_complexidade

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

Page 55: 471355_complexidade

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

Page 56: 471355_complexidade

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

Page 57: 471355_complexidade

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

Page 58: 471355_complexidade

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

Page 59: 471355_complexidade

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

Page 60: 471355_complexidade

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

Page 61: 471355_complexidade

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

Page 62: 471355_complexidade

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

Page 63: 471355_complexidade

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

Page 64: 471355_complexidade

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

Page 65: 471355_complexidade

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

Page 66: 471355_complexidade

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

Page 67: 471355_complexidade

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

Page 68: 471355_complexidade

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

Page 69: 471355_complexidade

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

Page 70: 471355_complexidade

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

Page 71: 471355_complexidade

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

Page 72: 471355_complexidade

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

Page 73: 471355_complexidade

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

Page 74: 471355_complexidade

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

Page 75: 471355_complexidade

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

Page 76: 471355_complexidade

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

Page 77: 471355_complexidade

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

Page 78: 471355_complexidade

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

Page 79: 471355_complexidade

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

Page 80: 471355_complexidade

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

Page 81: 471355_complexidade

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

Page 82: 471355_complexidade

Engenharia de Computação

Comportamento assintótico de funções

Principais Classes de Problemas

Professora Andriana S. L. O. Campanharo Engenharia de Computação

Page 83: 471355_complexidade

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

Page 84: 471355_complexidade

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

Page 85: 471355_complexidade

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

Page 86: 471355_complexidade

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

Page 87: 471355_complexidade

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

Page 88: 471355_complexidade

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

Page 89: 471355_complexidade

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

Page 90: 471355_complexidade

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

Page 91: 471355_complexidade

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

Page 92: 471355_complexidade

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

Page 93: 471355_complexidade

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

Page 94: 471355_complexidade

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

Page 95: 471355_complexidade

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

Page 96: 471355_complexidade

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

Page 97: 471355_complexidade

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

Page 98: 471355_complexidade

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

Page 99: 471355_complexidade

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

Page 100: 471355_complexidade

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

Page 101: 471355_complexidade

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

Page 102: 471355_complexidade

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

Page 103: 471355_complexidade

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

Page 104: 471355_complexidade

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

Page 105: 471355_complexidade

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