Solved Exercises 1 Finding the Peak Let A



![Solução “força bruta” Existem O(n 2) intervalos Para calcular s[i, j ] gasta-se O(j-i)=O(n) Solução “força bruta” Existem O(n 2) intervalos Para calcular s[i, j ] gasta-se O(j-i)=O(n)](https://slidetodoc.com/presentation_image/0482d1163a87da17d4fafd288363dfc2/image-4.jpg)

![Preprocessamento. . . Calculando s[1, i], para 1≤ i ≤ n, podemos calcular as Preprocessamento. . . Calculando s[1, i], para 1≤ i ≤ n, podemos calcular as](https://slidetodoc.com/presentation_image/0482d1163a87da17d4fafd288363dfc2/image-6.jpg)
![Preprocessamento. . . Para i: =0 até n Prefix[i] 0 Para i: =1 até Preprocessamento. . . Para i: =0 até n Prefix[i] 0 Para i: =1 até](https://slidetodoc.com/presentation_image/0482d1163a87da17d4fafd288363dfc2/image-7.jpg)




- Slides: 11
Solved Exercises 1. Finding the Peak. Let A= a 1, …, an be a sequence of n numbers with the following property: there is p in {1, …, n} for which (i) the subsequence a 1, . . , ap is increasing and (ii) the subsequence ap, …, an is decreasing. Find p in O( log n) time. Exemplo A=13568 6432 p=5
Solved Exercises 2. Subcadeia de Soma Máxima Entrada a = (a 1, a 2, … , a. N) um vetor de inteiros Saída: i e j tais que S[i , j ]= ai + ai+1 + … + aj é máximo. quando todos os valores de a são negativos, então a subsequencia vazia é escolhida e o valor máximo da soma é considerado 0. Exemplo: a = (-2, 11, -4, 13, -5, -2) Solução i=2 e j=4 s[2, 4]= 11 - 4 + 13 = 20
Solução “força bruta” Existem O(n 2) intervalos Para calcular s[i, j ] gasta-se O(j-i)=O(n) Complexidade de tempo O(n 3)
Solução “força bruta” Smax 0 Para i: =1 até n faça Para j: =i ate n faça S A[i] Para k: =i+1 até j faça S S+A[k] if S > Smax then Smax S
Preprocessamento. . . Calculando s[1, i], para 1≤ i ≤ n, podemos calcular as demais somas em O(1): S[ i , j ]= s[ 1, j ] –s[ 1 , i-1 ] O(n 2) intervalos => Complexidade de tempo O(n 2)
Preprocessamento. . . Para i: =0 até n Prefix[i] 0 Para i: =1 até n Prefix[i+1] Prefix[i] + A[i] Smax 0 Para i: =1 até n faça Para j: =i ate n faça if Prefix[j] – Prefix[i-1] > Smax then Smax Prefix[j] – Prefix[i-1]
. . . “dividir-e-conquistar” Quebrar em dois subvetores menores resposta a direita resposta no centro resposta a esquerda a 1 a 2
. . . “dividir-e-conquistar” Quebrar em dois subvetores menores resposta no centro a 1 a 2 T(esq): subsequencia de soma máxima que começa em algum i* menor ou igual a n/2 e termina em n/2 T(dir): subsequencia de soma máxima que começa em n/2 e termina em algum j* maior ou igual a n/2 Melhor resposta no centro igual a s[ i*, j* ]
…“dividir-e-conquistar” T(n) = esforço para resolver instancia de tamanho n T(n) = n + 2. T(n/2) T(1) = O(1) T(n) = O(n. lg(n)) + O(n) = O(n. lg(n)) Complexidade de tempo O(n log n)
…“ É possível melhorar ? ” n n Programação Dinâmica Tempo Linear











