• Nenhum resultado encontrado

Análise de Algoritmos

N/A
N/A
Protected

Academic year: 2022

Share "Análise de Algoritmos"

Copied!
50
0
0

Texto

(1)

Análise de Algoritmos

CLRS 3.1 e 3.2

(2)

Notação O

Intuitivamente. . .

O(f(n)) ≈ funções que não crescem mais rápido quef(n)

≈ funções menores ou iguais a um múltiplo def(n)

n2 (3/2)n2 9999n2 n2/1000 etc.

crescem todas com amesma velocidade

I n2+99n é O(n2)

I 33n2 é O(n2)

I 9n+2 é O(n2)

I 0,00001n3−200n2 não é O(n2)

Análise de Algoritmos — 2º sem 2018 2 / 50

(3)

Notação O

Intuitivamente. . .

O(f(n)) ≈ funções que não crescem mais rápido quef(n)

≈ funções menores ou iguais a um múltiplo def(n)

n2 (3/2)n2 9999n2 n2/1000 etc.

crescem todas com amesma velocidade

I n2+99n é O(n2)

I 33n2 é O(n2)

I 9n+2 é O(n2)

I 0,00001n3−200n2 não é O(n2)

(4)

Definição

SejamT(n)ef(n)funções dos inteiros nos reais.

Dizemos queT(n)éO(f(n))se existem constantes positivasc en0 tais que

T(n) ≤ cf(n) para todon ≥n0.

tempo

tamanho n

cg

f

Análise de Algoritmos — 2º sem 2018 4 / 50

(5)

Mais informal

T(n)éO(f(n))se existec>0 tal que T(n) ≤ cf(n) para todon suficientemente

GRANDE

.

tempo

tamanho n

cg

f

(6)

Ordenação por inserção

ORDENA-POR-INSERÇÃO(A,n) 1 paraj2aténfaça 2 chaveA[j] ij1 3 enquantoi1eA[i]>chavefaça 4 A[i+1]A[i] desloca

5 ii1

6 A[i+1]chave insere

linha consumo de todas as execuções da linha

1 O(n)

2 O(n)

3 O(n2) 4 O(n2) 5 O(n2)

6 O(n)

total O(3n2+3n) =O(n2)

Análise de Algoritmos — 2º sem 2018 6 / 50

(7)

Ordenação por inserção

ORDENA-POR-INSERÇÃO(A,n) 1 paraj2aténfaça 2 chaveA[j] ij1 3 enquantoi1eA[i]>chavefaça 4 A[i+1]A[i] desloca

5 ii1

6 A[i+1]chave insere

linha consumo de todas as execuções da linha

1 ?

2 ?

3 ?

4 ?

5 ?

6 ?

total ?

linha consumo de todas as execuções da linha

1 O(n)

2 O(n)

3 O(n2) 4 O(n2) 5 O(n2)

6 O(n)

total O(3n2+3n) =O(n2)

(8)

Ordenação por inserção

ORDENA-POR-INSERÇÃO(A,n) 1 paraj2aténfaça 2 chaveA[j] ij1 3 enquantoi1eA[i]>chavefaça 4 A[i+1]A[i] desloca

5 ii1

6 A[i+1]chave insere

linha consumo de todas as execuções da linha

1 O(n)

2 O(n)

3 O(n2) 4 O(n2) 5 O(n2)

6 O(n)

total O(3n2+3n) =O(n2)

Análise de Algoritmos — 2º sem 2018 8 / 50

(9)

Conclusão

O algoritmo ORDENA-POR-INSERÇÃOconsome O(n2)unidades de tempo.

Também escreve-se

O algoritmo ORDENA-POR-INSERÇÃOconsome tempoO(n2).

(10)

Cuidado 1

Algo que não foi mencionado:

Quais são asinstânciasdo problema, ou seja, quais são osdadosa que o algoritmo será aplicado.

A análise de ORDENA-POR-INSERÇÃOconsiderouimplicitamente todos os vetores possíveis como entrada. É o que se faz, normalmente.

Mas, se aplicarmos esse algoritmo só a vetores em que cada elemento está no máximo 10 posições distante da posição certa, teremos que oenquantoroda no máximo 10 vezes para cadaj,

e o tempo ficaO(n).

Análise de Algoritmos — 2º sem 2018 10 / 50

(11)

Cuidado 1

Algo que não foi mencionado:

Quais são asinstânciasdo problema, ou seja, quais são osdadosa que o algoritmo será aplicado.

A análise de ORDENA-POR-INSERÇÃOconsiderouimplicitamente todos os vetores possíveis como entrada. É o que se faz, normalmente.

Mas, se aplicarmos esse algoritmo só a vetores em que cada elemento está no máximo 10 posições distante da posição certa, teremos que oenquantoroda no máximo 10 vezes para cadaj,

e o tempo ficaO(n).

(12)

Cuidado 1

Algo que não foi mencionado:

Quais são asinstânciasdo problema, ou seja, quais são osdadosa que o algoritmo será aplicado.

A análise de ORDENA-POR-INSERÇÃOconsiderouimplicitamente todos os vetores possíveis como entrada. É o que se faz, normalmente.

Mas, se aplicarmos esse algoritmo só a vetores em que cada elemento está no máximo 10 posições distante da posição certa, teremos que oenquantoroda no máximo 10 vezes para cadaj,

e o tempo ficaO(n).

Análise de Algoritmos — 2º sem 2018 12 / 50

(13)

Cuidado 1

Algo que não foi mencionado:

Quais são asinstânciasdo problema, ou seja, quais são osdadosa que o algoritmo será aplicado.

A análise de ORDENA-POR-INSERÇÃOconsiderouimplicitamente todos os vetores possíveis como entrada. É o que se faz, normalmente.

Mas, se aplicarmos esse algoritmo só a vetores em que cada elemento está no máximo 10 posições distante da posição certa, teremos que oenquantoroda no máximo 10 vezes para cadaj,

e o tempo ficaO(n).

(14)

Cuidado 1

Algo que não foi mencionado:

Quais são asinstânciasdo problema, ou seja, quais são osdadosa que o algoritmo será aplicado.

A análise de ORDENA-POR-INSERÇÃOconsiderouimplicitamente todos os vetores possíveis como entrada. É o que se faz, normalmente.

Mas, se aplicarmos esse algoritmo só a vetores em que cada elemento está no máximo 10 posições distante da posição certa, teremos que oenquantoroda no máximo 10 vezes para cadaj,

e o tempo ficaO(n).

Análise de Algoritmos — 2º sem 2018 14 / 50

(15)

E o T(n)?

Para um dado algoritmo A e uma dada coleção de instâncias I ,

T (n ) = tempo máximo que A gasta entre todas instâncias

de tamanho ≤ n em I

(16)

Notação Omega

Dizemos queT(n)éÒ(f(n))se existem constantes positivasc en0 tais que

cf(n) ≤ T(n) para todon ≥n0.

tempo

tamanho n

f

cg

Análise de Algoritmos — 2º sem 2018 16 / 50

(17)

Mais informal

T(n) =Ò(f(n))se existec >0 tal que cf(n)≤T(n) para todon suficientemente

GRANDE

.

tempo

tamanho n

f

cg

(18)

Exemplos

Exemplo 1

SeT(n)≥0.001n2para todon ≥8, entãoT(n)éÒ(n2).

Prova:Aplique a definição comc =0.001en0=8.

Análise de Algoritmos — 2º sem 2018 18 / 50

(19)

Exemplos

Exemplo 1

SeT(n)≥0.001n2para todon ≥8, entãoT(n)éÒ(n2).

Prova:Aplique a definição comc =0.001en0=8.

(20)

Exemplo 2

O consumo de tempo doORDENA-POR-INSERÇÃO éO(n2)e éÒ(n).

linha todas as execuções da linha

1 = n

2-3 = n−1 4 ≥ n−1

5-6 ≥ 0

7 = n−1

total ≥ 4n−3= Ò(n)

Análise de Algoritmos — 2º sem 2018 20 / 50

(21)

Exemplo 2

O consumo de tempo doORDENA-POR-INSERÇÃO éO(n2)e éÒ(n).

ORDENA-POR-INSERÇÃO(A,n) 1 paraj←2aténfaça 2 chave←A[j] 3 i←j−1

4 enquantoi≥1eA[i]>chavefaça 5 A[i+1]←A[i] desloca

6 i←i−1

7 A[i+1]←chave insere

linha todas as execuções da linha

1 = n

2-3 = n−1 4 ≥ n−1

5-6 ≥ 0

7 = n−1

total ≥ 4n−3= Ò(n)

(22)

Exemplo 2

O consumo de tempo doORDENA-POR-INSERÇÃO éO(n2)e éÒ(n).

linha todas as execuções da linha

1 = n

2-3 = n−1 4 ≥ n−1

5-6 ≥ 0

7 = n−1

total ≥ 4n−3= Ò(n)

Análise de Algoritmos — 2º sem 2018 22 / 50

(23)

Cuidado 2

O exemplo anterior concentra a análise nos dados bons para o algoritmo.

Não dá uma boa idéia daruindadedo algoritmo.

Para isso, às vezes é preciso se concentrar numa coleção de entradas ruins.

No caso do ORDENA-POR-INSERÇÃO, podemos considerar só os vetores que entram revertidos. Em cada um deles, o tempo gasto é≥cn2.

(24)

Cuidado 2

O exemplo anterior concentra a análise nos dados bons para o algoritmo.

Não dá uma boa idéia daruindadedo algoritmo.

Para isso, às vezes é preciso se concentrar numa coleção de entradas ruins.

No caso do ORDENA-POR-INSERÇÃO, podemos considerar só os vetores que entram revertidos. Em cada um deles, o tempo gasto é≥cn2.

Análise de Algoritmos — 2º sem 2018 24 / 50

(25)

Cuidado 2

O exemplo anterior concentra a análise nos dados bons para o algoritmo.

Não dá uma boa idéia daruindadedo algoritmo.

Para isso, às vezes é preciso se concentrar numa coleção de entradas ruins.

No caso do ORDENA-POR-INSERÇÃO, podemos considerar só os vetores que entram revertidos. Em cada um deles, o tempo gasto é≥cn2.

(26)

Cuidado 2

O exemplo anterior concentra a análise nos dados bons para o algoritmo.

Não dá uma boa idéia daruindadedo algoritmo.

Para isso, às vezes é preciso se concentrar numa coleção de entradas ruins.

No caso do ORDENA-POR-INSERÇÃO, podemos considerar só os vetores que entram revertidos. Em cada um deles, o tempo gasto é≥cn2.

Análise de Algoritmos — 2º sem 2018 26 / 50

(27)

Ò no pior caso

Um algoritmo é Ò(f (n)) no pior caso se existe uma coleção de instâncias tal que o tempo T (n ) para essas instâncias satisfaz

T (n ) = Ò(f (n )) .

(28)

Notação Theta

SejamT(n)ef(n)funções dos inteiros no reais.

Dizemos queT(n)éÊ(f(n))se T(n)éO(f(n))e T(n)éÒ(f(n)).

tempo

tamanho n

cg f c2g

Análise de Algoritmos — 2º sem 2018 28 / 50

(29)

Notação Theta

Dizemos queT(n)éÊ(f(n))se se existem constantes positivas c1,c2en0tais que

c1f(n) ≤ T(n) ≤ c2f(n) para todon ≥n0.

tempo

tamanho n

cg f c2g

(30)

Intuitivamente

Comparaçãoassintótica, ou seja, paran

ENORME

.

comparação comparação assintótica T(n)≤f(n) T(n)éO(f(n))

T(n)≥f(n) T(n)éÒ(f(n)) T(n)=f(n) T(n)éÊ(f(n))

Análise de Algoritmos — 2º sem 2018 30 / 50

(31)

Tamanho máximo de problemas

Suponha que cada operação consome 1 microsegundo (1Þs).

consumo de Tamanho máximo de problemas(n) tempo (Þs) 1 segundo 1 minuto 1 hora 400n 2500 150000 9000000 20ndlgne 4096 166666 7826087

2n2 707 5477 42426

n4 31 88 244

2n 19 25 31

Michael T. Goodrich e Roberto Tamassia,Projeto de Algoritmos, Bookman.

(32)

Crescimento de algumas funções

n lgn

n nlgn n2 n3 2n

2 1 1,4 2 4 8 4

4 2 2 8 16 64 16

8 3 2,8 24 64 512 256

16 4 4 64 256 4096 65536

32 5 5,7 160 1024 32768 4294967296

64 6 8 384 4096 262144 1,8 1019

128 7 11 896 16384 2097152 3,4 1038

256 8 16 1048 65536 16777216 1,1 1077

512 9 23 4608 262144 134217728 1,3 10154 1024 10 32 10240 1048576 1,1 109 1,7 10308

Análise de Algoritmos — 2º sem 2018 32 / 50

(33)

Nomes de classes Ê

classe nome

Ê(1) constante

Ê(logn) logarítmica

Ê(n) linear

Ê(nlogn) nlogn

Ê(n2) quadrática

Ê(n3) cúbica

Ê(nk)comk≥1 polinomial Ê(2n) exponencial Ê(an)coma>1 exponencial

(34)

Palavras de Cautela

Suponha queAeBsão algoritmos para um mesmo problema.

Suponha que o consumo de tempo deAé “essencialmente”100n e que o consumo de tempo deBé “essencialmente”nlog10n.

100néÊ(n)enlog10néÊ(nlgn).

Logo,Aéassintoticamentemais eficiente queB.

Aé mais eficiente queBparan≥10100. 10100=umgoogol

≈número de átomos no universo observável

=número

ENORME

Análise de Algoritmos — 2º sem 2018 34 / 50

(35)

Palavras de Cautela

Suponha queAeBsão algoritmos para um mesmo problema.

Suponha que o consumo de tempo deAé “essencialmente”100n e que o consumo de tempo deBé “essencialmente”nlog10n.

100néÊ(n)enlog10néÊ(nlgn).

Logo,Aéassintoticamentemais eficiente queB.

Aé mais eficiente queBparan≥10100. 10100=umgoogol

≈número de átomos no universo observável

=número

ENORME

(36)

Palavras de Cautela

Suponha queAeBsão algoritmos para um mesmo problema.

Suponha que o consumo de tempo deAé “essencialmente”100n e que o consumo de tempo deBé “essencialmente”nlog10n.

100néÊ(n)enlog10néÊ(nlgn).

Logo,Aéassintoticamentemais eficiente queB.

Aé mais eficiente queBparan≥10100. 10100=umgoogol

≈número de átomos no universo observável

=número

ENORME

Análise de Algoritmos — 2º sem 2018 36 / 50

(37)

Palavras de Cautela

Conclusão:

Lembre das constantes e termos de baixa ordem que estão“escondidos”na notação assintótica.

Em geral um algoritmo que consome tempoÊ(nlgn), e com fatores constantes razoáveis, é bem eficiente.

Um algoritmo que consome tempoÊ(n2)pode, algumas vezes, ser satisfatório.

Um algoritmo que consome tempoÊ(2n)é dificilmente aceitável.

Do ponto de vista deAA,eficiente=polinomial.

(38)

Análise do caso médio

Consideremos que a entrada do algoritmo é uma permutação de 1 a nescolhida com probabilidade uniforme.

Qual é o número esperado de execuções da linha 4? ORDENA-POR-INSERÇÃO(A,n)

1 paraj ←2atén faça 2 chave←A[j] 3 i←j−1

4 enquantoi≥1eA[i]>chavefaça 5 A[i+1]←A[i] desloca

6 i←i−1

7 A[i+1]←chave insere

Análise de Algoritmos — 2º sem 2018 38 / 50

(39)

Análise do caso médio

Consideremos que a entrada do algoritmo é uma permutação de 1 a nescolhida com probabilidade uniforme.

Qual é o número esperado de execuções da linha 4?

ORDENA-POR-INSERÇÃO(A,n) 1 paraj ←2atén faça 2 chave←A[j] 3 i←j−1

4 enquantoi≥1eA[i]>chavefaça 5 A[i+1]←A[i] desloca

6 i←i−1

7 A[i+1]←chave insere

(40)

Análise do caso médio

Consideremos que a entrada do algoritmo é uma permutação de 1 a nescolhida com probabilidade uniforme.

Qual é o número esperado de execuções da linha 4?

ORDENA-POR-INSERÇÃO(A,n) 1 paraj←2aténfaça 2 chave←A[j] 3 i←j−1

4 enquantoi≥1eA[i]>chavefaça 5 A[i+1]←A[i] desloca

6 i←i−1

7 A[i+1]←chave insere

Análise de Algoritmos — 2º sem 2018 40 / 50

(41)

Análise do caso médio

ORDENA-POR-INSERÇÃO(A,n) 1 paraj←2aténfaça 2 chave←A[j] 3 i←j−1

4 enquantoi≥1eA[i]>chavefaça 5 A[i+1]←A[i] desloca

6 i←i−1

7 A[i+1]←chave insere

Para cada valor dej, a linha 4 é executada de 1 aj vezes.

Qual é a probabilidade dela ser executadatvezes? Esta probabilidade é 1/j.(Explicação na aula.)

(42)

Análise do caso médio

ORDENA-POR-INSERÇÃO(A,n) 1 paraj←2aténfaça 2 chave←A[j] 3 i←j−1

4 enquantoi≥1eA[i]>chavefaça 5 A[i+1]←A[i] desloca

6 i←i−1

7 A[i+1]←chave insere

Para cada valor dej, a linha 4 é executada de 1 aj vezes.

Qual é a probabilidade dela ser executadatvezes?

Esta probabilidade é 1/j.(Explicação na aula.)

Análise de Algoritmos — 2º sem 2018 42 / 50

(43)

Análise do caso médio

ORDENA-POR-INSERÇÃO(A,n) 1 paraj←2aténfaça 2 chave←A[j] 3 i←j−1

4 enquantoi≥1eA[i]>chavefaça 5 A[i+1]←A[i] desloca

6 i←i−1

7 A[i+1]←chave insere

Para cada valor dej, a linha 4 é executada de 1 aj vezes.

Qual é a probabilidade dela ser executadatvezes?

Esta probabilidade é 1/j.(Explicação na aula.)

(44)

Análise do caso médio

Para cada valor dej, a linha 4 é executada de 1 aj vezes.

Qual é a probabilidade dela ser executadatvezes?

Esta probabilidade é 1/j.

Portanto o número esperado de execuções da linha 4 é

j

¼

t=1

t1

j = 1

j

j

¼

t=1

t = 1 j

(j+1)j

2 = j+1 2 . E o número esperado de execuções da linha 4 no total é

n

¼

j=2

j+1

2 =1 2

n

¼

j=2

(j+1) = (n+4)(n−1)

4 = Ê(n2).

Análise de Algoritmos — 2º sem 2018 44 / 50

(45)

Análise do caso médio

Para cada valor dej, a linha 4 é executada de 1 aj vezes.

Qual é a probabilidade dela ser executadatvezes?

Esta probabilidade é 1/j.

Portanto o número esperado de execuções da linha 4 é

j

¼

t=1

t1

j = 1

j

j

¼

t=1

t = 1 j

(j+1)j

2 = j+1 2 .

E o número esperado de execuções da linha 4 no total é

n

¼

j=2

j+1

2 =1 2

n

¼

j=2

(j+1) = (n+4)(n−1)

4 = Ê(n2).

(46)

Análise do caso médio

Para cada valor dej, a linha 4 é executada de 1 aj vezes.

Qual é a probabilidade dela ser executadatvezes?

Esta probabilidade é 1/j.

Portanto o número esperado de execuções da linha 4 é

j

¼

t=1

t1

j = 1

j

j

¼

t=1

t = 1 j

(j+1)j

2 = j+1 2 . E o número esperado de execuções da linha 4 no total é

n

¼

j=2

j+1

2 =1 2

n

¼

j=2

(j+1) = (n+4)(n−1)

4 = Ê(n2).

Análise de Algoritmos — 2º sem 2018 46 / 50

(47)

Ordenação

A[1. .n]écrescenteseA[1]≤ · · · ≤A[n].

Problema:Rearranjar um vetorA[1. .n]de modo que ele fique crescente.

ORDENA-POR-INSERÇÃOconsome tempo O(n2)no pior caso eÊ(n2)no caso médio.

Conseguimos fazer melhor?

Sim! Usandodivisão e conquista!

CLRS 2.3, 4.1 e 4.2

(48)

Ordenação

A[1. .n]écrescenteseA[1]≤ · · · ≤A[n].

Problema:Rearranjar um vetorA[1. .n]de modo que ele fique crescente.

ORDENA-POR-INSERÇÃOconsome tempo O(n2)no pior caso eÊ(n2)no caso médio.

Conseguimos fazer melhor?

Sim! Usandodivisão e conquista!

CLRS 2.3, 4.1 e 4.2

Análise de Algoritmos — 2º sem 2018 48 / 50

(49)

Ordenação

A[1. .n]écrescenteseA[1]≤ · · · ≤A[n].

Problema:Rearranjar um vetorA[1. .n]de modo que ele fique crescente.

ORDENA-POR-INSERÇÃOconsome tempo O(n2)no pior caso eÊ(n2)no caso médio.

Conseguimos fazer melhor?

Sim! Usandodivisão e conquista!

CLRS 2.3, 4.1 e 4.2

(50)

Ordenação

A[1. .n]écrescenteseA[1]≤ · · · ≤A[n].

Problema:Rearranjar um vetorA[1. .n]de modo que ele fique crescente.

ORDENA-POR-INSERÇÃOconsome tempo O(n2)no pior caso eÊ(n2)no caso médio.

Conseguimos fazer melhor?

Sim! Usandodivisão e conquista!

CLRS 2.3, 4.1 e 4.2

Análise de Algoritmos — 2º sem 2018 50 / 50

Referências

Documentos relacionados

• Sejam e constantes, seja uma função definida sobre os inteiros não negativos pela recorrência. • então pode ser limitado assintoticamente como

• No caso médio, o PARTITION produz uma mistura de divisões BOAS e RUINS.. ▫ As divisões boas e ruins são

• Dado que em um vetor possui elementos inteiros menores ou iguais a k, escreva um algoritmo de seleção de tempo linear no pior caso. www.nakamura.eti.br/eduardo Análise de

• Como o nome sugere, trata-se de uma árvore binária otimizada para buscar seus elementos. • As chaves são sempre armazenadas segundo a

▫ Para cada nó, todos os caminhos do nodo até qualquer folha passa pelo mesmo número de

▫ Se as chaves não são números naturais, então precisamos encontrar uma forma de interpretá-las como

▫ Precisamos inserir a nova chave no nó correto da árvore, sem violar suas propriedades. • Como proceder se o nó

▫ Mapa de estradas: podemos usar algoritmos específicos para determinar o caminho mais curto entre dois pontos. ▫ Redes de computadores: cada terminal é um