• Nenhum resultado encontrado

Divisao e conquista

N/A
N/A
Protected

Academic year: 2021

Share "Divisao e conquista"

Copied!
22
0
0

Texto

(1)

Divis˜

ao & Conquista

Prof. MSc. Claudia Akemi Izeki

Universidade Federal de Itajub´a - Campus Itabira

(2)

ecnica de Divis˜

ao e Conquista

Considere um problema cujo tamanho seja igual a N: Divida o problema em k instˆancias disjuntas, na qual 1 <= k <= N, que correspondem a k subproblemas distintos.

Os subproblemas s˜ao resolvidos separadamente.

Encontra-se uma forma de combinar as solu¸c˜oes parciais para se obter a solu¸c˜ao que servir´a para resolver o problema

original.

(3)

ecnica de Divis˜

ao e Conquista

O paradigma de dividir e conquistar envolve trˆes passos em cada n´ıvel da recurs˜ao (CORMEN et al., 2002):

1 Dividir o problema em um determinado n´umero de

subproblemas.

2 Conquistar os subproblemas, resolvendo-os recursivamente.

Por´em, se os tamanhos dos subproblemas forem pequenos o bastante, basta resolver os subproblemas de maneira direta.

3 Combinar as solu¸c˜oes dadas aos subproblemas, a fim de

(4)

An´

alise de Algoritmos de Dividir e Conquistar

Uma recorrˆencia para o tempo de execu¸c˜ao de um algoritmo de dividir e conquistar se baseia nos trˆes passos do

paradigma b´asico.

Seja T(n) o tempo de execu¸c˜ao sobre um problema de tamanho n.

Vamos supor que o problema seja dividido em a subproblemas, cada um dos quais com 1/b do tamanho do problema original. Se levarmos D(n) para dividir o problema em subproblemas e o tempo C(n) para combinar as solu¸c˜oes dadas aos

subproblemas na solu¸c˜ao para o problema original, obteremos a recorrˆencia:

(5)

Algoritmos baseados em Divis˜

ao e Conquista

Busca Bin´aria Mergesort Quicksort

(6)

Algoritmo de Busca Bin´

aria

Problema:

Encontrar um determinado elemento (chave) em um vetor ordenado de tamanho n: A1, A2, A3, ..., An.

(7)

Algoritmo de Busca Bin´

aria

Pode-se tirar proveito do fato do vetor estar ordenado: Verificar se a chave est´a na posi¸c˜ao m = bn/2c:

Se estiver, encontrou!

Se n˜ao estiver, realizar a busca bin´aria nos subvetores: Ainicio at´e Am−1, sechave < Am, ou

Am+1at´e Afimsechave > Am.

Divis˜ao: Divida o vetorA[inicio..fim] em dois subconjuntosA[inicio..m − 1]eA[m + 1..fim], sendom =n

2



.

Conquista: Verifique se o elemento desejado est´a emA[inicio..m − 1]ou emA[m + 1..fim], caso n˜ao encontre, particione o primeiro ou segundo subvetor at´e que o tamanho do subconjunto seja igual a 1.

(8)

Algoritmo de Busca Bin´

aria

int busca binaria (int a[], int elem, int inicio, int fim) {

int m;

if (inicio>fim) return -1; m = (inicio+fim)/2; if(elem == a[m]) return m; if (elem < a[m])

return busca binaria (a, elem, inicio, m-1)); else

return busca binaria (a, elem, m+1, fim); }

(9)

Desempenho do Algoritmo de Busca Bin´

aria

O algoritmo de Busca Bin´aria sempre particiona o conjunto de dados em duas partes do tamanho original, seja escolhendo a metade esquerda ou direita.

Detalhando mais o comportamento do algoritmo, pode-se chegar ao seguinte comportamento matem´atico:

T (N) = T (N/2) + 1

A constante 1 justifica-se pelo fato de sempre testar qual metade do problema ser´a considerada na pr´oxima chamada recursiva do algoritmo. Deve-se observar que para um N = 1, o custo do algoritmo ´e T (1) = 1.

(10)

Resolvendo a recorrˆ

encia da Busca Bin´

aria

T (N) = T (N 2) + 1, T (1) = 1 (1) T (N 2) = T ( N 2 2) + 1 = T ( N 4) + 1 (2) T (N) =  T (N 4) + 1  + 1 = T (N 4) + 2 (3) T (N 4) = T ( N 4 2) + 1 = T ( N 8) + 1 (4) T (N) =  T (N 8) + 1  + 2 = T (N 8) + 3 (5) T (N) = T (N 23) + 3 (6)

(11)

Resolvendo a recorrˆ

encia da Busca Bin´

aria

Considerando uma vari´avel k = 3, a equa¸c˜ao da linha (6), T (N) = T (2N3) + 3 fica da seguinte forma:

T (N) = T (N

2k) + k (7)

Como T (1) = 1, pode-se estabelecer a seguinte rela¸c˜ao,

T (N

2k) = T (1) (8)

N

(12)

Resolvendo a recorrˆ

encia da Busca Bin´

aria

Com a rela¸c˜ao estabelecida em (10) e retornando ao item (7), tem-se o resultado: T (N) = T (2 k 2k) + k (11) T (N) = T (1) + k (12) T (N) = 1 + k (13)

(13)

Resolvendo a recorrˆ

encia da Busca Bin´

aria

Como N = 2k (10), uma forma de obtermos o valor de k ´e utilizando a fun¸c˜ao de log nesta igualdade.

log2N = log22k (14)

log2N = k × log22, log22 = 1 (15)

log2N = k × 1 (16)

k = log2N (17)

Retornando em T (N) = 1 + k = 1 + log2N.

(14)

Algoritmo Quicksort

´

E um algoritmo de ordena¸c˜ao cujo tempo de execu¸c˜ao no pior caso ´e O(N2).

Apesar deste tempo lento de execu¸c˜ao no pior caso, Quicksort ´

e, frequentemente, a melhor escolha pr´atica para a

ordena¸c˜ao devido a sua eficiˆencia no caso m´edio, cujo tempo de execu¸c˜ao ´e O(N × log2N) e os fatores constantes

impl´ıcitos s˜ao de pequeno valor.

Divis˜ao: O vetorA[p..r ]´e particionado em dois subvetoresA[p..q − 1]eA[q + 1..r ]

tais que cada elemento deA[p..q − 1]´e menor que ou igual aA[q]que, por sua vez, ´e igual ou menor a cada elemento deA[q + 1..r ]. O ´ındice q ´e calculado como parte desse procedimento de particionamento.

Conquista: Os dois vetoresA[p..q − 1]eA[q + 1..r ]s˜ao ordenados a cada chamada recursiva do Quicksort.

Combina¸c˜ao: Como os subvetores s˜ao ordenados localmente, n˜ao ´e necess´ario nenhum trabalho para combin´a-los: o vetorA[p..r ]inteiro agora est´a ordenado.

(15)

Algoritmo Quicksort

O tempo de execu¸c˜ao do algoritmo Quicksort depende se o

funcionamento ´e balanceado ou n˜ao, e isto depende dos elementos que s˜ao escolhidos para o particionamento.

Se o particionamento ´e balanceado, a execu¸c˜ao ´e r´apida. Se o particionamento ´e desbalanceado, a execu¸c˜ao do algoritmo pode ser lenta.

A fun¸c˜ao de particionamento possui complexidade Θ(N).

QUICKSORT(A, p, r) 1 se (p < r)

2 q ← PARTICIONE (A, p, r)

3 QUICKSORT (A, p, q-1) // ordena o vetor de p at´e q-1

(16)

Algoritmo PARTICIONE do Quicksort

PARTICIONE(A, p, r)

1 x ← A[r]

2 i ← p-1

3 para j← p at´e r-1 fa¸ca

4 se A[j] ≤ x ent~ao

5 i ← i+1

6 A[i] ↔ A[j]

7 A[i+1] ↔ A[r]

(17)

Desempenho do Quicksort

O tempo de execu¸c˜ao do Quicksort depende do fato de o particionamento ser ou n˜ao balanceado, que por sua vez depende de quais elementos s˜ao usados para balancear. Melhor Caso: A fun¸c˜ao de recorrˆencia T (N) ´e composta por: uma chamada para a fun¸c˜ao de parti¸c˜ao que possui

complexidade Θ(N) e duas chamadas recursivas para cada metade do vetor, ou seja, 2 × T (N/2).

T (N) = 2 × T (N/2) + N, T (0) = 1

T (N) = O(NlogN)

Pior Caso: A fun¸c˜ao de recorrˆencia, T (N) acontece quando a rotina de particionamento produz um subproblema com n − 1 elementos e um com 0 elementos. A fun¸c˜ao de parti¸c˜ao do

(18)

Desempenho do Quicksort

Caso M´edio

O tempo de execu¸c˜ao do caso m´edio est´a muito mais pr´oximo do melhor caso do que do pior caso.

Suponha, por exemplo, que o algoritmo de particionamento produza uma divis˜ao proporcional de 9 para 1, que a princ´ıpio parece bastante desequilibrada. Ent˜ao obtemos a recorrˆencia:

T (N) = T (9N/10) + T (N/10) + cN que ´e O(N logN).

(19)

Algoritmo de M´

aximo e M´ınimo de um vetor

Determinar o valor m´aximo e m´ınimo de um vetor j´a foi visto anteriormente com trˆes algoritmos. Por´em, este algoritmo ´e igual `a terceira vers˜ao vista anteriormente, mas recursiva.

ALGORITMO M´aximo M´ınimo

Divis˜ao: Divida o vetorv [inf ..sup]em dois subvetoresv [inf ..meio] ev [meio + 1..sup], ondemeio = b(inf + sup)/2c.

Conquista: S˜ao verificados e retornados os menores e maiores ele-mentos de cada subvetor v [inf ..meio] e v [meio + 1..sup] a cada chamada recursiva.

Combina¸c˜ao: S˜ao combinadas as solu¸c˜oes de cada subproblema, ou seja, como cada subproblema retorna o maior e menor elementos, na combina¸c˜ao verifica-se qual ´e o menor e o maior elementos de

(20)

Algoritmo de M´

aximo e M´ınimo de um vetor

int* maxMin4 (int v[], int inf, int sup)

{

int *maxMin = new int[2]; if (sup - inf <= 1){

if (v[inf] < v[sup]){maxMin[0] = v[sup]; maxMin[1] = v[inf];} else {maxMin[0] = v[inf]; maxMin[1] = v[sup];}

} else{

int meio = (inf+sup)/2;

maxMin = maxMin4(v, inf, meio);

int max1 = maxMin[0], min1 = maxMin[1];

maxMin = maxMin4(v, meio+1, sup);

int max2 = maxMin[0], min2 = maxMin[1];

if (max1 > max2) maxMin[0] = max1; else maxMin[0] = max2; if (min1 < min2) maxMin[1] = min1; else maxMin[1] = min2; }

return maxMin; }

(21)

Algoritmo de M´

aximo e M´ınimo de um vetor

Seja T(n) uma fun¸c˜ao de complexidade tal que T(n) ´e o n´umero de compara¸c˜oes entre os elementos de v. Logo:

A constante 2 justifica-se pelo fato das condicionais max 1 > max 2 e min1 < min2 na fase de Combina¸c˜ao da Divis˜ao e Conquista.

(22)

Bibliografia

CORMEN, Thomas H. et al. Algoritmos: teoria e pr´atica. [Introduction to algorithms, 2nd ed. ISBN 0070131511 (inglˆes)]. Tradu¸c˜ao de Vanderberg D. de Souza, Revis˜ao t´ecnica de Jussara Pimenta Matos. 13 reimpr. Rio de Janeiro: Elsevier, 2002. xvii, 916 p. Inclui bibliografia e ´ındice; il. tab. graf. org.; 28cm. ISBN 8535209263.

NAGAI, W. A. ECO014 - Complexidade de Algoritmos. Notas de Aula, 2010.

ZIVIANI, N. Projeto de Algoritmos com Implementa¸c˜oes em Java e C++, S˜ao Paulo, Brazil, Thomson Learning, ISBN 85-221-0525-1, 2007, 641 pages.

Referências

Documentos relacionados

E nessa incursão, é válido mencionar, os sujeitos – sejam os do ensino (aluno e professor), sejam eles os aqui constituídos em objetos de investigação –

Figura 1 - Eletronmicrografias de varredura de fêmeas ingurgitadas do carrapato Rhipicephalus sanguineus em vários tempos após a infecção experimental com suspensão conidial

Grundfos GO rakenduse Apple iOS seadmele saab tasuta alla laadida või seda saab tasuta uuendada Apple'i App Store'i kaudu. Minge Apple'i

O propósito desta dissertação é analisar a cosmologia e a compreensão astrológica do mundo presentes na obra Astronomica, de Marcus Manilius, um poema astrológico romano escrito

Por meio de um deslocamento da metodologia da Autoconfrontação, originalmente elaborada pelo linguista francês Daniel Faïta (1992; 1995; 2005) no contexto da Clínica

A aplicação de tecnologias acessíveis da Internet tem ocorrido em grande escala na construção de projetos acadêmicos e corporativos simples e complexos, muitas

Objetivando-se conhecer a realidade do cooperativismo entre os produtores da Cooperativa dos Produtores de Mel de Pedro Osório (COOMELPO), foram coletados dados

Caso não estejam reunidos os condicionalismos previstos na verba 5.5 da lista I, anexa ao CIVA, a transmissão da &#34;Biomassa Florestal&#34; transformada está sujeita a imposto