13.04.2013 Views

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

B. Soluções dos exercícios<br />

9 return true<br />

10 end i f<br />

11 end i f<br />

12 end for<br />

13 return f a l s e<br />

e tem <strong>complexida<strong>de</strong></strong> O(n). A corretu<strong>de</strong> resulta <strong>de</strong> observação que para cada<br />

subsequência possível temos outra subsequência que escolhe o elemento mais<br />

esquerda em S. Portanto, po<strong>de</strong>mos sempre escolher gulosamente o primeiro<br />

elemento da sequência maior.<br />

Solução do exercício 4.2.<br />

O seguinte algoritmo resolve o problema:<br />

Algoritmo B.2 (Bases)<br />

Entrada Uma sequência <strong>de</strong> posições xi <strong>de</strong> n cida<strong>de</strong>s, 1 ≤ i ≤ n.<br />

Saída Uma sequência mínima <strong>de</strong> posições bi <strong>de</strong> bases.<br />

1 Sejam S = x ′ 1 . . . x ′ n as p o s i ç õ e s em or<strong>de</strong>m c r e s c e n t e<br />

2 B = ɛ<br />

3 while S ɛ do<br />

4 Seja S = x ′ S ′<br />

5 B := B, (x ′ + 4) { aumenta a sequência B }<br />

6 Remove todos os elementos x ≤ x ′ + 8 <strong>de</strong> S<br />

7 end while<br />

O algoritmo tem <strong>complexida<strong>de</strong></strong> O(n) porque o laço tem ao máximo n iterações.<br />

Prova <strong>de</strong> corretu<strong>de</strong>: Seja bi as posições do algoritmo guloso acima, e b ′ i as<br />

posições <strong>de</strong> alguma outra solução. Afirmação: bi ≥ b ′ i . Portanto, a solução<br />

gulosa não contém mais bases que alguma outra solução. Prova da afirmação<br />

com indução: A base b1 ≥ b ′ 1 é correto porque toda solução tem que alimentar<br />

a primeira casa e o algoritmo guloso escolhe a última posição possível. Passo:<br />

Seja bi ≥ b ′ i e sejam h, h′ as posições da próximas casas sem base. O algoritmo<br />

guloso escolha h + 4, mas como bi ≥ b ′ i e h ≥ h′ temos b ′ i+1 ≤ h′ + 4 porque<br />

h ′ precisa uma base. Logo, xi+1 = h + 4 ≥ h ′ + 4 ≥ b ′ i+1 .<br />

316

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

Saved successfully!

Ooh no, something went wrong!