Divis ˜ao e Conquista
Talles Brito Viana
*Apresentac¸˜ao baseada na discuss˜ao apresentada em “Algoritmos: Teoria e Pr´atica’ de Thomas H. Cormen
Bolsa de valores
O problemaSuponha que lhe tenha sido oferecida a oportunidade de investir nas ac¸˜oes de uma empresa X.
O prec¸o da ac¸˜ao empresa X ´e bastante vol´atil. Existem algumas restric¸˜oes importantes:
Vocˆe s´o pode comprar uma ´unica unidade de ac¸˜ao somente uma vez e ent˜ao vendˆe-la em data posterior.
As operac¸˜oes de compra e venda s´o podem ser executadas ap´os o fechamento do preg˜ao do dia.
Bolsa de valores
O problemaSuponha que lhe tenha sido oferecida a oportunidade de investir nas ac¸˜oes de uma empresa X.
O prec¸o da ac¸˜ao empresa X ´e bastante vol´atil. Existem algumas restric¸˜oes importantes:
Vocˆe s´o pode comprar uma ´unica unidade de ac¸˜ao somente uma vez e ent˜ao vendˆe-la em data posterior.
As operac¸˜oes de compra e venda s´o podem ser executadas ap´os o fechamento do preg˜ao do dia.
Bolsa de valores
O problemaA meta ´e: maximizar o lucro! Mas como maximizar o lucro?
Bolsa de valores
O problemaA meta ´e: maximizar o lucro! Mas como maximizar o lucro?
Bolsa de valores
ExemploSoluc¸˜ao: Comprar ap´os fechamento do preg˜ao do dia 7 e vender no fechamento do preg˜ao do dia 11.
Bolsa de valores
Uma soluc¸ ˜ao?N˜ao faz sentido comprar no fechamento do preg˜ao do dia 1 e vender no fechamento do preg˜ao do dia 7.
Bolsa de valores
Uma soluc¸ ˜ao?Bastaria obter o m´aximo e o m´ınimo? N˜ao faz sentido comprar no fechamento do preg˜ao do dia 1 e vender no fechamento do
Bolsa de valores
Uma segunda soluc¸ ˜ao?Uma segunda soluc¸˜ao:
Determine a ac¸˜ao de valor m´aximo e valor m´ınimo.
Do prec¸o mais alto localize o prec¸o mais baixo anterior (esquerda).
Do prec¸o mais baixo localize o prec¸o mais alto posterior (direita).
Bolsa de valores
Uma segunda soluc¸ ˜ao?Uma segunda soluc¸˜ao:
Determine a ac¸˜ao de valor m´aximo e valor m´ınimo. Do prec¸o mais alto localize o prec¸o mais baixo anterior (esquerda).
Do prec¸o mais baixo localize o prec¸o mais alto posterior (direita).
Bolsa de valores
Uma segunda soluc¸ ˜ao?Uma segunda soluc¸˜ao:
Determine a ac¸˜ao de valor m´aximo e valor m´ınimo. Do prec¸o mais alto localize o prec¸o mais baixo anterior (esquerda).
Do prec¸o mais baixo localize o prec¸o mais alto posterior (direita).
Bolsa de valores
Uma segunda soluc¸ ˜ao?Uma segunda soluc¸˜ao:
Determine a ac¸˜ao de valor m´aximo e valor m´ınimo. Do prec¸o mais alto localize o prec¸o mais baixo anterior (esquerda).
Do prec¸o mais baixo localize o prec¸o mais alto posterior (direita).
Bolsa de valores
Uma segunda soluc¸ ˜ao?Bolsa de valores
Uma segunda soluc¸ ˜ao?Bolsa de valores
Uma segunda soluc¸ ˜ao?Funciona neste caso?
O lucro m´aximo nem sempre comec¸a no prec¸o mais baixo ou termina no prec¸o mais alto.
Comprar ap´os o fechamento do preg˜ao do dia 2 e vender ap´os o fechamento do preg˜ao do dia 3 ´e a soluc¸˜ao.
Bolsa de valores
Uma segunda soluc¸ ˜ao?Funciona neste caso? O lucro m´aximo nem sempre comec¸a no prec¸o mais baixo ou termina no prec¸o mais alto.
Comprar ap´os o fechamento do preg˜ao do dia 2 e vender ap´os o fechamento do preg˜ao do dia 3 ´e a soluc¸˜ao.
Bolsa de valores
Uma transformac¸ ˜aoUma transformac¸˜ao para o problema:
Queremos determinar uma sequˆencia de dias a qual a mudanc¸a l´ıquida desde o primeiro dia at´e o ´ultimo ´e m´axima.
Vamos considerar a alterac¸˜ao (mudanc¸a) di´aria nos prec¸os.
A mudanc¸a no dia i ´e a diferenc¸a entre os prec¸os ap´os o
fechamento do preg˜ao no dia i − 1 e ap´os o fechamento do preg˜ao do dia i.
Devemos determinar a sequˆencia de dias tal que a soma das diferenc¸as ´e m´axima.
O problema do subarranjo m ´aximo
Definic¸ ˜aoO problema do subarranjo m ´aximo
Tomando um arranjo A, determine o subarranjo A0n˜ao vazio cont´ıguo
de A cujos valores tenham a maior soma. Este subarranjo A0 ´e
O problema do subarranjo m ´aximo
ExemploA0[8..11] ´e um subarranjo m´aximo de A com soma 43.
A ac¸˜ao deve ser comprada ap´os o fechamento do preg˜ao do dia 7 e vendida no fechamento do preg˜ao do dia 11.
O problema do subarranjo m ´aximo
Uma primeira soluc¸ ˜aoPodemos testar a soma dos seguintes subconjuntos:
1 -4 3 -4 soma= 1 1 -4 3 -4 soma= −3 1 -4 3 -4 soma= 0 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −5 1 -4 3 -4 soma= 3 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −4
O problema do subarranjo m ´aximo
Uma primeira soluc¸ ˜aoPodemos testar a soma dos seguintes subconjuntos:
1 -4 3 -4 soma= 1 1 -4 3 -4 soma= −3 1 -4 3 -4 soma= 0 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −5 1 -4 3 -4 soma= 3 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −4
O problema do subarranjo m ´aximo
Uma primeira soluc¸ ˜aoPodemos testar a soma dos seguintes subconjuntos:
1 -4 3 -4 soma= 1 1 -4 3 -4 soma= −3 1 -4 3 -4 soma= 0 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −5 1 -4 3 -4 soma= 3 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −4
O problema do subarranjo m ´aximo
Uma primeira soluc¸ ˜aoPodemos testar a soma dos seguintes subconjuntos:
1 -4 3 -4 soma= 1 1 -4 3 -4 soma= −3 1 -4 3 -4 soma= 0 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −5 1 -4 3 -4 soma= 3 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −4
O problema do subarranjo m ´aximo
Uma primeira soluc¸ ˜aoPodemos testar a soma dos seguintes subconjuntos:
1 -4 3 -4 soma= 1 1 -4 3 -4 soma= −3 1 -4 3 -4 soma= 0 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −5 1 -4 3 -4 soma= 3 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −4
O problema do subarranjo m ´aximo
Uma primeira soluc¸ ˜aoPodemos testar a soma dos seguintes subconjuntos:
1 -4 3 -4 soma= 1 1 -4 3 -4 soma= −3 1 -4 3 -4 soma= 0 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −5 1 -4 3 -4 soma= 3 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −4
O problema do subarranjo m ´aximo
Uma primeira soluc¸ ˜aoPodemos testar a soma dos seguintes subconjuntos:
1 -4 3 -4 soma= 1 1 -4 3 -4 soma= −3 1 -4 3 -4 soma= 0 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −5 1 -4 3 -4 soma= 3 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −4
O problema do subarranjo m ´aximo
Uma primeira soluc¸ ˜aoPodemos testar a soma dos seguintes subconjuntos:
1 -4 3 -4 soma= 1 1 -4 3 -4 soma= −3 1 -4 3 -4 soma= 0 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −5 1 -4 3 -4 soma= 3 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −4
O problema do subarranjo m ´aximo
Uma primeira soluc¸ ˜aoPodemos testar a soma dos seguintes subconjuntos:
1 -4 3 -4 soma= 1 1 -4 3 -4 soma= −3 1 -4 3 -4 soma= 0 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −5 1 -4 3 -4 soma= 3 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −4
O problema do subarranjo m ´aximo
Uma primeira soluc¸ ˜aoPodemos testar a soma dos seguintes subconjuntos:
1 -4 3 -4 soma= 1 1 -4 3 -4 soma= −3 1 -4 3 -4 soma= 0 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −4 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −5 1 -4 3 -4 soma= 3 1 -4 3 -4 soma= −1 1 -4 3 -4 soma= −4
O problema do subarranjo m ´aximo
Uma primeira soluc¸ ˜aoAlgoritmo: SUBARRANJO-M ´AXIMO (A, n)
Dados: Um arranjo A de tamanho n
Resultado: O subarranjo m´aximo de A: (esq, dir, soma) de valor
soma, inicia em esq e termina em dir
1 soma–max ←− −∞;
2 para i ←− 1 at ´e n fac¸a
3 soma←− 0;
4 para j ←− i at ´e n fac¸a
5 soma←− soma + A[j];
6 se soma > soma–max ent ˜ao
7 soma–max ←− soma;
8 esq←− i;
9 dir←− j;
O problema do subarranjo m ´aximo
An ´alise da primeira soluc¸ ˜aoAlgoritmo: SUBARRANJO-M ´AXIMO (A, n)
Dados: Um arranjo A de tamanho n
Resultado: O subarranjo m´aximo de A: (esq, dir, soma)
1 soma–max ←− −∞;
2 para i ←− 1 at ´e n fac¸a
3 soma←− 0;
4 para j ←− i at ´e n fac¸a
5 soma←− soma + A[j];
6 sesoma> soma–maxent ˜ao
7 soma–max ←− soma;
8 esq←− i;
O problema do subarranjo m ´aximo
An ´alise da primeira soluc¸ ˜aoPara n = 4, o total de comparac¸˜oes ´e:
1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 4 comparac¸˜oes. 1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 3 comparac¸˜oes. 1 -4 3 -4 1 -4 3 -4 2 comparac¸˜oes. 1 -4 3 -4 1 comparac¸˜ao. Logo, f (4) = 4 + 3 + 2 + 1 = 10.
O problema do subarranjo m ´aximo
An ´alise da primeira soluc¸ ˜aoPara n = 4, o total de comparac¸˜oes ´e:
1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 4 comparac¸˜oes. 1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 3 comparac¸˜oes. 1 -4 3 -4 1 -4 3 -4 2 comparac¸˜oes. 1 -4 3 -4 1 comparac¸˜ao. Logo, f (4) = 4 + 3 + 2 + 1 = 10.
O problema do subarranjo m ´aximo
An ´alise da primeira soluc¸ ˜aoPara n = 4, o total de comparac¸˜oes ´e:
1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 4 comparac¸˜oes. 1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 3 comparac¸˜oes. 1 -4 3 -4 1 -4 3 -4 2 comparac¸˜oes. 1 -4 3 -4 1 comparac¸˜ao. Logo, f (4) = 4 + 3 + 2 + 1 = 10.
O problema do subarranjo m ´aximo
An ´alise da primeira soluc¸ ˜aoPara n = 4, o total de comparac¸˜oes ´e:
1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 4 comparac¸˜oes. 1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 3 comparac¸˜oes. 1 -4 3 -4 1 -4 3 -4 2 comparac¸˜oes. 1 -4 3 -4 1 comparac¸˜ao. Logo, f (4) = 4 + 3 + 2 + 1 = 10.
O problema do subarranjo m ´aximo
An ´alise da primeira soluc¸ ˜aoPara n = 4, o total de comparac¸˜oes ´e:
1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 4 comparac¸˜oes. 1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 3 comparac¸˜oes. 1 -4 3 -4 1 -4 3 -4 2 comparac¸˜oes. 1 -4 3 -4 1 comparac¸˜ao. Logo, f (4) = 4 + 3 + 2 + 1 = 10.
O problema do subarranjo m ´aximo
An ´alise da primeira soluc¸ ˜aoPara n qualquer, a quantidade de comparac¸˜oes f (n) ´e dada por: f(n) = 1 + 2 + 3 + 4 + 5 + ... + (n − 2) + (n − 1) + n
S ´erie aritm ´etica
O somat´orioPn
k=1k ´e uma s´erie aritm´etica e tem o valor:
n X k=1 k= 1 2n(n + 1) Logo, f (n) = 12n2+12n.
O problema do subarranjo m ´aximo
An ´alise da primeira soluc¸ ˜aoPara n qualquer, a quantidade de comparac¸˜oes f (n) ´e dada por: f(n) = 1 + 2 + 3 + 4 + 5 + ... + (n − 2) + (n − 1) + n
S ´erie aritm ´etica
O somat´orioPn
k=1k ´e uma s´erie aritm´etica e tem o valor:
n X k=1 k= 1 2n(n + 1) Logo, f (n) = 12n2+12n.
Crescimento de polin ˆomios
Como determinar o crescimentoCrescimento de polin ˆomios
Dado um inteiro n˜ao negativo d, um polinˆomio em n de grau d ´e uma
func¸˜ao p(n) da forma p(n) =Pd
i=0ainionde as constantes
a0, a1, ..., ads˜ao os coeficientes do polinˆomio e ad 6= 0. Um
polinˆomio ´e assintoticamente positivo se e somente se ad > 0. No
caso de um polinˆomio assintoticamente positivo p(n) de grau d, temos
que p(n) = θ(nd).
Divis ˜ao e conquista
Definic¸ ˜aoDe acordo com o paradigma de Divis˜ao e Conquista resolvemos um problema recursivamente aplicando as seguintes trˆes etapas:
Dividir o problema em certo n´umero de subproblemas que s˜ao instˆancias menores do mesmo problema.
Conquistar os subproblemas resolvendo-os recursivamente. Caso os problemas sejam suficiente pequenos basta resolvˆe-los diretamente.
Combinar as soluc¸˜oes dos subproblemas na soluc¸˜ao do problema original.
O problema do subarranjo m ´aximo
Uma soluc¸ ˜ao de divis ˜ao e conquistaSuponha que queremos determinar um subarranjo m´aximo do subarranjo A[baixo..alto].
Por Divis˜ao e Conquista dividimos o subarranjo em dois subarranjos (com tamanhos mais iguais dentro do poss´ıvel). Suponha que meio ´e o ponto m´edio do subarranjo A[baixo..alto]. Qualquer subarranjo A[i..j] de A[baixo..alto] encontra-se em:
Inteiramente em A[baixo..meio], tal que baixo ≤ i ≤ j ≤ meio. Inteiramente em A[meio + 1..alto], tal que meio < i ≤ j ≤ alto. Cruzando o ponto m´edio, tal que baixo ≤ i ≤ meio < j ≤ alto.
O problema do subarranjo m ´aximo
Uma soluc¸ ˜ao de divis ˜ao e conquistaPoss´ıveis localizac¸˜oes de subarranjos A[i..j] dentro de A[baixo..alto].
O problema do subarranjo m ´aximo
Uma soluc¸ ˜ao de divis ˜ao e conquistaQualquer subarranjo A[i..j] dentro de A[baixo..alto] que cruze o ponto m´edio compreende dois subarranjos A[i..meio] e
O problema do subarranjo m ´aximo
Uma soluc¸ ˜ao de divis ˜ao e conquistaUm subarranjo m´aximo deve ter a maior soma dentre todos os subarranjos inteiramente em A[baixo..meio], ou inteiramente em A[meio + 1..alto], ou cruzando o ponto m´edio.
Os subarranjos m´aximos de A[baixo..meio] e A[meio + 1..alto] podem ser determinados de maneira recursiva: s˜ao subproblemas (instˆancias menores) de um problemas original.
Apesar disso, resta ainda encontrar um subarranjo m´aximo que cruze o ponto m´edio (este problema n˜ao ´e uma instˆancia menor).
O problema do subarranjo m ´aximo
Subarranjo m ´aximo que cruza o ponto m ´edioAlgoritmo: CRUZAMENTO-M ´AXIMO (A, baixo, meio, alto)
Dados: Um subarranjo A que inicia em baixo, termina em alto e tem
ponto m´edio em meio
Resultado: O subarranjo m´aximo que cruza o ponto m´edio de A:
(esq, dir, soma) de valor soma, inicia na posic¸˜ao esq e termina na posic¸˜ao dir
1 soma–esq ←− −∞;
2 soma←− 0;
3 para i ←− meio at ´e baixo fac¸a //decremento
4 soma←− soma + A[i];
5 se soma > soma–esq ent ˜ao
O problema do subarranjo m ´aximo
Subarranjo m ´aximo que cruza o ponto m ´edioAlgoritmo: CRUZAMENTO-M ´AXIMO (A, baixo, meio, alto)
Dados: Um subarranjo A que inicia em baixo, termina em alto e tem
ponto m´edio em meio
Resultado: O subarranjo m´aximo que cruza o ponto m´edio de A:
(esq, dir, soma) de valor soma, inicia na posic¸˜ao esq e termina na posic¸˜ao dir
8 soma–dir ←− −∞;
9 soma←− 0;
10 para j ←− meio + 1 at ´e alto fac¸a
11 soma←− soma + A[j];
12 se soma > soma–dir ent ˜ao
13 soma–dir ←− soma;
14 max–dir ←− j;
O problema do subarranjo m ´aximo
Exemplo: Subarranjo m ´aximo que cruza o ponto m ´edioUm exemplo: 1 -4 3 -4 soma–esq = −∞ 1 -4 3 -4 soma–esq = −4 1 -4 3 -4 soma–esq = −3 1 -4 3 -4 soma–dir = −∞ 1 -4 3 -4 soma–dir = 3 1 -4 3 -4 soma–dir = 3
Neste caso, o subarranjo m´aximo que cruza o ponto m´edio ´e A[1..3] com soma 0.
O problema do subarranjo m ´aximo
Exemplo: Subarranjo m ´aximo que cruza o ponto m ´edioUm exemplo: 1 -4 3 -4 soma–esq = −∞ 1 -4 3 -4 soma–esq = −4 1 -4 3 -4 soma–esq = −3 1 -4 3 -4 soma–dir = −∞ 1 -4 3 -4 soma–dir = 3 1 -4 3 -4 soma–dir = 3
Neste caso, o subarranjo m´aximo que cruza o ponto m´edio ´e A[1..3] com soma 0.
O problema do subarranjo m ´aximo
Exemplo: Subarranjo m ´aximo que cruza o ponto m ´edioUm exemplo: 1 -4 3 -4 soma–esq = −∞ 1 -4 3 -4 soma–esq = −4 1 -4 3 -4 soma–esq = −3 1 -4 3 -4 soma–dir = −∞ 1 -4 3 -4 soma–dir = 3 1 -4 3 -4 soma–dir = 3
Neste caso, o subarranjo m´aximo que cruza o ponto m´edio ´e A[1..3] com soma 0.
O problema do subarranjo m ´aximo
Exemplo: Subarranjo m ´aximo que cruza o ponto m ´edioUm exemplo: 1 -4 3 -4 soma–esq = −∞ 1 -4 3 -4 soma–esq = −4 1 -4 3 -4 soma–esq = −3 1 -4 3 -4 soma–dir = −∞ 1 -4 3 -4 soma–dir = 3 1 -4 3 -4 soma–dir = 3
Neste caso, o subarranjo m´aximo que cruza o ponto m´edio ´e A[1..3] com soma 0.
O problema do subarranjo m ´aximo
Exemplo: Subarranjo m ´aximo que cruza o ponto m ´edioUm exemplo: 1 -4 3 -4 soma–esq = −∞ 1 -4 3 -4 soma–esq = −4 1 -4 3 -4 soma–esq = −3 1 -4 3 -4 soma–dir = −∞ 1 -4 3 -4 soma–dir = 3 1 -4 3 -4 soma–dir = 3
Neste caso, o subarranjo m´aximo que cruza o ponto m´edio ´e A[1..3] com soma 0.
O problema do subarranjo m ´aximo
Exemplo: Subarranjo m ´aximo que cruza o ponto m ´edioUm exemplo: 1 -4 3 -4 soma–esq = −∞ 1 -4 3 -4 soma–esq = −4 1 -4 3 -4 soma–esq = −3 1 -4 3 -4 soma–dir = −∞ 1 -4 3 -4 soma–dir = 3 1 -4 3 -4 soma–dir = 3
Neste caso, o subarranjo m´aximo que cruza o ponto m´edio ´e A[1..3] com soma 0.
O problema do subarranjo m ´aximo
Exemplo: Subarranjo m ´aximo que cruza o ponto m ´edioUm exemplo: 1 -4 3 -4 soma–esq = −∞ 1 -4 3 -4 soma–esq = −4 1 -4 3 -4 soma–esq = −3 1 -4 3 -4 soma–dir = −∞ 1 -4 3 -4 soma–dir = 3 1 -4 3 -4 soma–dir = 3
Neste caso, o subarranjo m´aximo que cruza o ponto m´edio ´e A[1..3] com soma 0.
Subarranjo m ´aximo que cruza o ponto m ´edio
An ´aliseQual o custo de CRUZAMENTO-M ´AXIMO?
Cada elemento do subarranjo A ´e somado, ap´os isso, o valor de soma m´axima ´e comparado com a soma atual.
Para n elementos de A s˜ao executadas n comparac¸˜oes de soma m´axima.
Subarranjo m ´aximo que cruza o ponto m ´edio
An ´aliseQual o custo de CRUZAMENTO-M ´AXIMO?
Cada elemento do subarranjo A ´e somado, ap´os isso, o valor de soma m´axima ´e comparado com a soma atual.
Para n elementos de A s˜ao executadas n comparac¸˜oes de soma m´axima.
Subarranjo m ´aximo que cruza o ponto m ´edio
An ´aliseQual o custo de CRUZAMENTO-M ´AXIMO?
Cada elemento do subarranjo A ´e somado, ap´os isso, o valor de soma m´axima ´e comparado com a soma atual.
Para n elementos de A s˜ao executadas n comparac¸˜oes de soma m´axima.
O problema do subarranjo m ´aximo
Uma soluc¸ ˜ao eficienteAlgoritmo: SUBARRANJO-M ´AXIMO (A, baixo, alto)
Dados: Um subarranjo A que inicia em baixo e termina em alto
Resultado: O subarranjo m´aximo de A: (esq, dir, soma) de valor soma, inicia em esq e
termina em dir
1 se alto == baixo ent ˜ao
2 retorna (baixo, alto, A[baixo]); 3 sen ˜ao
4 meio←− b(baixo + alto)/2c;
5 (baixo–esq, alto–esq, soma–esq) ←− SUBARRANJO-M ´AXIMO (A, baixo, meio);
6 (baixo–dir, alto–dir, soma–dir) ←− SUBARRANJO-M ´AXIMO (A, meio + 1, alto);
7 (baixo–crz, alto–crz, soma–crz) ←− CRUZAMENTO-M ´AXIMO (A, baixo, meio, alto);
8 se soma–esq ≥ soma–dir e soma–esq ≥ soma–crz ent ˜ao
9 retorna (baixo–esq, alto–esq, soma–esq);
10 sen ˜ao se soma–dir ≥ soma–esq e soma–dir ≥ soma–crz ent ˜ao 11 retorna (baixo–dir, alto–dir, soma–dir);
O problema do subarranjo m ´aximo
Exemplo: soluc¸ ˜ao de divis ˜ao e conquistaUm exemplo: A[1..1] : soma–esq = 1 A[2..2] : soma–dir = −4 A[1..2] : soma–crz = −3 1 -4 3 -4 1 -4 3 -4 1 -4 3 -4 A[1..1] : soma–esq = 1 A[3..3] : soma–dir = 3 A[1..3] : soma–crz = 0 A[3..3] : soma–esq = 3 A[4..4] : soma–dir = −4 A[3..4] : soma–crz = −1
Soluc¸ ˜ao de divis ˜ao e conquista
An ´aliseQual o custo de SUBARRANJO-M ´AXIMO?
Denotamos T(n) como o tempo de execuc¸˜ao de
SUBARRANJO-M ´AXIMO para um subarranjo de n elementos.
Para simplificac¸˜ao de an´alise: o tamanho original do problema ´e uma potˆencia de 2.
Soluc¸ ˜ao de divis ˜ao e conquista
An ´aliseQual o custo de SUBARRANJO-M ´AXIMO?
Denotamos T(n) como o tempo de execuc¸˜ao de
SUBARRANJO-M ´AXIMO para um subarranjo de n elementos.
Para simplificac¸˜ao de an´alise: o tamanho original do problema ´e uma potˆencia de 2.
Soluc¸ ˜ao de divis ˜ao e conquista
An ´aliseCaso recursivo: quando n > 1 temos o tempo de:
Teste do caso: θ(1).
Custo da resoluc¸˜ao de cada subproblema: T(n/2). Custo de CRUZAMENTO-M ´AXIMO: θ(n).
Custo das comparac¸˜oes finais (para combinac¸˜ao): θ(1).
No caso recursivo:
Soluc¸ ˜ao de divis ˜ao e conquista
An ´aliseTempo de execuc¸ ˜ao T(n) para SUBARRANJO-M ´AXIMO
T(n) = (
θ(1), se n = 1
2T(n/2) + θ(n), se n > 1
Podemos reescrever a equac¸˜ao da seguinte forma (c ´e uma constante):
Equac¸ ˜ao de recorr ˆencia T(n) para SUBARRANJO-M ´AXIMO
T(n) = (
c, se n = 1
O problema do subarranjo m ´aximo
´Arvore de recurs ˜ao
´
Arvore de recurs˜ao: lg n + 1 n´ıveis, cada um com custo cn. Soluc¸˜ao: T(n) = (lg n + 1)(cn) = cn lg n + cn = θ(n lg n).