Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar

arquivoescolar.org
from arquivoescolar.org More from this publisher
13.04.2013 Views

2. Análise de complexidade Componentes disjuntivas Componentes disjuntivas • Suponha um algoritmo c que consiste em duas componentes disjuntivas c1 e c2. Logo, e temos desemp[c] ≤ max(desemp[c1], desemp[c2]) cp[A] ≤ max(cp[c1], cp[c2]) Caso a expressão para o máximo de duas funções for difícil, podemos simplificar cp[A] ≤ max(cp[c1], cp[c2]) = O(max(cp[c1], cp[c2])). O condicional Seja C =se b então c1 senão c2 • O condicional consiste em – uma avaliação da condição b – uma avaliação do comando c1 ou c2 (componentes disjuntivas). • Aplicando as regras para componentes conjuntivas e disjuntivas obtemos cp[C] ≤ cp[b] + max(cp[c1], cp[c2]) Para se b então c1 obtemos com cp[skip] = 0 cp[C] ≤ cp[b] + cp[c1] Exemplo 2.5 Considere um algoritmo a que, dependendo do primeiro elemento de uma lista u, ordena a lista ou determina seu somatório: Exemplo 1 se hd(u) = 0 então 2 v := ordena(u) 3 senão 4 s := soma(u) 40

2.2. Complexidade pessimista Assumindo que o teste é possível em tempo constante, ele é absorvido pelo trabalho em ambos casos, tal que cp[A] ≤ max(cp[v := ordena(u)], cp[s := soma(u)]) e com, por exemplo, cp[v := ordena(u)](n) = n 2 e cp[s := soma(u)](n) = n temos cp[A](n) ≤ n 2 2.2.2. Exemplos Exemplo 2.6 (Bubblesort) Nesse exemplo vamos estudar o algoritmo Bubblesort de ordenação. Bubblesort Algoritmo 2.2 (Bubblesort) Entrada Uma sequência a1, . . . , an de números inteiros. Saída Uma sequência a π(1), . . . , a π(n) de números inteiros onde π uma permutação de [1, n] tal que para i < j temos a π(i) ≤ a π(j). 1 for i :=1 to n 2 { Inv : an−i+2 ≤ · · · ≤ an são os i − 1 maiores elementos } 3 for j :=1 to n − i 4 i f aj > aj+1 then 5 swap aj ,aj+1 6 end i f 7 end for 8 end for Bubblesort: Complexidade • A medida comum para algoritmos de ordenação: o número de comparações (de chaves). ♦ 41

2. Análise <strong>de</strong> <strong>complexida<strong>de</strong></strong><br />

Componentes disjuntivas<br />

Componentes disjuntivas<br />

• Suponha um algoritmo c que consiste em duas componentes disjuntivas<br />

c1 e c2. Logo,<br />

e temos<br />

<strong>de</strong>semp[c] ≤ max(<strong>de</strong>semp[c1], <strong>de</strong>semp[c2])<br />

cp[A] ≤ max(cp[c1], cp[c2])<br />

Caso a expressão para o máximo <strong>de</strong> duas funções for difícil, po<strong>de</strong>mos simplificar<br />

cp[A] ≤ max(cp[c1], cp[c2]) = O(max(cp[c1], cp[c2])).<br />

O condicional<br />

Seja C =se b então c1 senão c2<br />

• O condicional consiste em<br />

– uma avaliação da condição b<br />

– uma avaliação do comando c1 ou c2 (componentes disjuntivas).<br />

• Aplicando as regras para componentes conjuntivas e disjuntivas obtemos<br />

cp[C] ≤ cp[b] + max(cp[c1], cp[c2])<br />

Para se b então c1 obtemos com cp[skip] = 0<br />

cp[C] ≤ cp[b] + cp[c1]<br />

Exemplo 2.5<br />

Consi<strong>de</strong>re um algoritmo a que, <strong>de</strong>pen<strong>de</strong>ndo do primeiro elemento <strong>de</strong> uma lista<br />

u, or<strong>de</strong>na a lista ou <strong>de</strong>termina seu somatório:<br />

Exemplo<br />

1 se hd(u) = 0 então<br />

2 v := or<strong>de</strong>na(u)<br />

3 senão<br />

4 s := soma(u)<br />

40

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!