professor: m ario c esar san felice - dc - ufscarmario/ensino/2019s1/aed2/aula10... ·...

47
Ordena¸ ao por intercala¸ ao (mergeSort) Professor: M´ ario C´ esar San Felice Disciplina: Algoritmos e Estruturas de Dados 2 [email protected] 18 de abril de 2019

Upload: others

Post on 05-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Ordenacao por intercalacao (mergeSort)

Professor: Mario Cesar San Felice

Disciplina: Algoritmos e Estruturas de Dados 2

[email protected]

18 de abril de 2019

Page 2: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Recapitulando

Definicao de ordenacao (crescente):

Um vetor v [0..n − 1] esta ordenado sev [0] ≤ v [1] ≤ · · · ≤ v [n − 1].

Problema da ordenacao:

Dado um vetor v de tamanho n, permutar os elementos de v ateele ficar ordenado.

Exemplo:

Entrada0 7

77 55 11 44 33 22 88 66

Saıda0 7

11 22 33 44 55 66 77 88

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 2 / 47

Page 3: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Recapitulando

Vimos tres algoritmos iterativos e intuitivos:

insertionSort,

selectionSort,

bubbleSort.

No pior caso os tres levam tempo proporcional a O(n2).

Na aula de hoje:

Tecnica de projeto de algoritmos divisao-e-conquista.

Algoritmo de ordenacao mergeSort.

Arvore de recursao para analisar eficiencia de algoritmo recursivo.

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 3 / 47

Page 4: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Divisao-e-conquista

Uma das principais tecnicas de projeto de algoritmos.

Apresenta tres passos em cada nıvel da recursao:

Dividir o problema e dividido em subproblemas menores domesmo tipo.

Conquistar os subproblemas sao resolvidos recursivamente, sendoque os subproblemas pequenos (casos bases) saoresolvidos diretamente.

Combinar as solucoes dos subproblemas sao combinadas numasolucao do problema original.

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 4 / 47

Page 5: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Divisao-e-conquista e o mergeSort

Algoritmo usa abordagem nao trivial para vencer a barreira do n2.

Exemplo:

0 7

77 55 11 44 33 22 88 66

Dividir em dois subvetores.0 3

77 55 11 44

4 7

33 22 88 66

Conquistar recursivamente (lembrar dos casos base).

0 3

11 44 55 77

4 7

22 33 66 88

Combinar por intercalacao (merge).

0 7

11 22 33 44 55 66 77 88

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 5 / 47

Page 6: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Problema da intercalacao

Dados v [p..q− 1] e v [q..r − 1] ordenados, obter v [p..r − 1] ordenado.

Exemplo:

vetor vi = p q − 1

11 44 55 77

j = q r − 1

22 33 66 88

vetor wk = 0 r − p − 1

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 6 / 47

Page 7: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Exemplo: rotina de intercalacao

A cada iteracao o menor elemento e colocado em w .

Exemplo:

vetor vi

11 44 55 77

j

22 33 66 88

vetor wk

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 7 / 47

Page 8: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Exemplo: rotina de intercalacao

A cada iteracao o menor elemento e colocado em w .

Exemplo:

vetor vi

11 44 55 77

j

22 33 66 88

vetor wk

11

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 8 / 47

Page 9: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Exemplo: rotina de intercalacao

A cada iteracao o menor elemento e colocado em w .

Exemplo:

vetor vi

11 44 55 77

j

22 33 66 88

vetor wk

11 22

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 9 / 47

Page 10: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Exemplo: rotina de intercalacao

A cada iteracao o menor elemento e colocado em w .

Exemplo:

vetor vi

11 44 55 77

j

22 33 66 88

vetor wk

11 22 33

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 10 / 47

Page 11: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Exemplo: rotina de intercalacao

A cada iteracao o menor elemento e colocado em w .

Exemplo:

vetor vi

11 44 55 77

j

22 33 66 88

vetor wk

11 22 33 44

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 11 / 47

Page 12: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Exemplo: rotina de intercalacao

A cada iteracao o menor elemento e colocado em w .

Exemplo:

vetor vi

11 44 55 77

j

22 33 66 88

vetor wk

11 22 33 44 55

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 12 / 47

Page 13: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Exemplo: rotina de intercalacao

A cada iteracao o menor elemento e colocado em w .

Exemplo:

vetor vi

11 44 55 77

j

22 33 66 88

vetor wk

11 22 33 44 55 66

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 13 / 47

Page 14: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Exemplo: rotina de intercalacao

A cada iteracao o menor elemento e colocado em w .

Exemplo:

vetor v11 44 55 77

i j

22 33 66 88

vetor wk

11 22 33 44 55 66 77

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 14 / 47

Page 15: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Exemplo: rotina de intercalacao

A cada iteracao o menor elemento e colocado em w .

Exemplo:

vetor v11 44 55 77

i j

22 33 66 88

vetor wk

11 22 33 44 55 66 77 88

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 15 / 47

Page 16: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: rotina de intercalacao

Intercala subvetores ordenados v [p..q − 1] e v [q..r − 1].

v o i d i n t e r c a l a ( i n t ∗v , i n t p , i n t q , i n t r ) {

}Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 16 / 47

Page 17: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: rotina de intercalacao

Inicializa variaveis para percorrer os vetores.

v o i d i n t e r c a l a ( i n t ∗v , i n t p , i n t q , i n t r ) {i n t i = p , j = q , k = 0 ; i n t tam = r−p ;

}Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 17 / 47

Page 18: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: rotina de intercalacao

Aloca vetor auxiliar.

v o i d i n t e r c a l a ( i n t ∗v , i n t p , i n t q , i n t r ) {i n t i = p , j = q , k = 0 ; i n t tam = r−p ;i n t ∗ w = m a l l o c ( tam∗ s i z e o f ( i n t ) ) ;

}Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 18 / 47

Page 19: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: rotina de intercalacao

Enquanto vetor auxiliar nao estiver completo.

v o i d i n t e r c a l a ( i n t ∗v , i n t p , i n t q , i n t r ) {i n t i = p , j = q , k = 0 ; i n t tam = r−p ;i n t ∗ w = m a l l o c ( tam∗ s i z e o f ( i n t ) ) ;

w h i l e ( k < tam ) {

}

}Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 19 / 47

Page 20: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: rotina de intercalacao

Copia o menor elemento dentre os subvetores.

v o i d i n t e r c a l a ( i n t ∗v , i n t p , i n t q , i n t r ) {i n t i = p , j = q , k = 0 ; i n t tam = r−p ;i n t ∗ w = m a l l o c ( tam∗ s i z e o f ( i n t ) ) ;

w h i l e ( k < tam ) {i f ( v [ i ] <= v [ j ] ) w[ k++] = v [ i ++];

}

}Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 20 / 47

Page 21: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: rotina de intercalacao

Copia o menor elemento dentre os subvetores.

v o i d i n t e r c a l a ( i n t ∗v , i n t p , i n t q , i n t r ) {i n t i = p , j = q , k = 0 ; i n t tam = r−p ;i n t ∗ w = m a l l o c ( tam∗ s i z e o f ( i n t ) ) ;

w h i l e ( k < tam ) {i f ( v [ i ] <= v [ j ] ) w[ k++] = v [ i ++];e l s e /∗ v [ i ] > v [ j ] ∗/ w[ k++] = v [ j ++];

}

}Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 21 / 47

Page 22: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: rotina de intercalacao

Copia os elementos em ordem para o vetor original.

v o i d i n t e r c a l a ( i n t ∗v , i n t p , i n t q , i n t r ) {i n t i = p , j = q , k = 0 ; i n t tam = r−p ;i n t ∗ w = m a l l o c ( tam∗ s i z e o f ( i n t ) ) ;

w h i l e ( k < tam ) {i f ( v [ i ] <= v [ j ] ) w[ k++] = v [ i ++];e l s e /∗ v [ i ] > v [ j ] ∗/ w[ k++] = v [ j ++];

}

f o r ( k = 0 ; k < tam ; k++)v [ p+k ] = w[ k ] ;

f r e e (w ) ;}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 22 / 47

Page 23: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: rotina de intercalacao

O que acontece se i ≥ q ou j ≥ r no primeiro laco?

v o i d i n t e r c a l a ( i n t ∗v , i n t p , i n t q , i n t r ) {i n t i = p , j = q , k = 0 ; i n t tam = r−p ;i n t ∗ w = m a l l o c ( tam∗ s i z e o f ( i n t ) ) ;

w h i l e ( k < tam ) {i f ( v [ i ] <= v [ j ] ) w[ k++] = v [ i ++];e l s e /∗ v [ i ] > v [ j ] ∗/ w[ k++] = v [ j ++];

}

f o r ( k = 0 ; k < tam ; k++)v [ p+k ] = w[ k ] ;

f r e e (w ) ;}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 23 / 47

Page 24: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: rotina de intercalacao

O que acontece se i ≥ q ou j ≥ r no primeiro laco?

v o i d i n t e r c a l a ( i n t ∗v , i n t p , i n t q , i n t r ) {i n t i = p , j = q , k = 0 ; i n t tam = r−p ;i n t ∗ w = m a l l o c ( tam∗ s i z e o f ( i n t ) ) ;

w h i l e ( i < q && j < r ) {i f ( v [ i ] <= v [ j ] ) w[ k++] = v [ i ++];e l s e /∗ v [ i ] > v [ j ] ∗/ w[ k++] = v [ j ++];

}

f o r ( k = 0 ; k < tam ; k++)v [ p+k ] = w[ k ] ;

f r e e (w ) ;}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 24 / 47

Page 25: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: rotina de intercalacao

E se sobrarem elementos em um dos subvetores?

v o i d i n t e r c a l a ( i n t ∗v , i n t p , i n t q , i n t r ) {i n t i = p , j = q , k = 0 ; i n t tam = r−p ;i n t ∗ w = m a l l o c ( tam∗ s i z e o f ( i n t ) ) ;

w h i l e ( i < q && j < r ) {i f ( v [ i ] <= v [ j ] ) w[ k++] = v [ i ++];e l s e /∗ v [ i ] > v [ j ] ∗/ w[ k++] = v [ j ++];

}

f o r ( k = 0 ; k < tam ; k++)v [ p+k ] = w[ k ] ;

f r e e (w ) ;}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 25 / 47

Page 26: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: rotina de intercalacao

Copia os elementos que sobraram para o final de w .

v o i d i n t e r c a l a ( i n t ∗v , i n t p , i n t q , i n t r ) {i n t i = p , j = q , k = 0 ; i n t tam = r−p ;i n t ∗ w = m a l l o c ( tam∗ s i z e o f ( i n t ) ) ;

w h i l e ( i < q && j < r ) {i f ( v [ i ] <= v [ j ] ) w[ k++] = v [ i ++];e l s e /∗ v [ i ] > v [ j ] ∗/ w[ k++] = v [ j ++];

}w h i l e ( i < q ) w[ k++] = v [ i ++];w h i l e ( j < r ) w[ k++] = v [ j ++];f o r ( k = 0 ; k < tam ; k++)

v [ p+k ] = w[ k ] ;f r e e (w ) ;

}Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 26 / 47

Page 27: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Analise de corretude: rotina de intercalacao

Exercıcio: mostrar a corretude da rotina de intercalacao.

Dica: Provar por inducao usando os seguintes invariantes.

No inıcio de cada iteracao temos que:

w [0..k − 1] contem os elementos de v [p..i − 1] e v [q..j − 1],

w [0..k − 1] esta ordenado.

w [h] ≤ v [l ] para 0 ≤ h < k e i ≤ l < q.

w [h] ≤ v [l ] para 0 ≤ h < k e j ≤ l < r .

Estrutura da prova por inducao:

Caso base mostrar que vale quando k = 0.

Hipotese de Inducao o proprio invariante para k ′ < k .

Passo mostrar, usando a H.I., que o comportamento doalgoritmo preserva o invariante na iteracao k .

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 27 / 47

Page 28: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Analise de eficiencia: rotina de intercalacao

O numero de operacoes e proporcional ao tamanho do vetor,

ou seja, O(tam) = O(r − p).

Isso pode nao parecer evidente por conta dos varios lacos doalgoritmo.

No entanto, basta perceber que em cada iteracao, de qualquer laco, iou j sao incrementados.

Como i e sempre menor que q e j e sempre menor que r ,

temos no maximo (q − p) + (r − q) iteracoes.

Como (q − p) + (r − q) = r − p, o resultado segue.

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 28 / 47

Page 29: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Divisao-e-conquista e o mergeSort, o retorno

Sabendo como a intercalacao funciona, voltamos ao mergeSort.

Exemplo:

0 7

77 55 11 44 33 22 88 66

Dividir em dois subvetores.0 3

77 55 11 44

4 7

33 22 88 66

Conquistar recursivamente (lembrar dos casos base).

0 3

11 44 55 77

4 7

22 33 66 88

Combinar por intercalacao (merge).

0 7

11 22 33 44 55 66 77 88

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 29 / 47

Page 30: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: mergeSort

Ordena os elementos do vetor v entre as posicoes p e r − 1.

v o i d mergeSort ( i n t ∗v , i n t p , i n t r ) {

}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 30 / 47

Page 31: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: mergeSort

Dividir: Encontra o meio do vetor.

v o i d mergeSort ( i n t ∗v , i n t p , i n t r ) {i n t m;

m = ( p + r ) / 2 ;

}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 31 / 47

Page 32: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: mergeSort

Notem que (p + r)/2 = p + (r − p)/2 = p + tam/2.

v o i d mergeSort ( i n t ∗v , i n t p , i n t r ) {i n t m;

m = ( p + r ) / 2 ;

}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 32 / 47

Page 33: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: mergeSort

Conquistar: chamadas recursivas nos dois subvetores.

v o i d mergeSort ( i n t ∗v , i n t p , i n t r ) {i n t m;

m = ( p + r ) / 2 ;mergeSort ( v , p , m) ;mergeSort ( v , m, r ) ;

}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 33 / 47

Page 34: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: mergeSort

Combinar: intercala os dois subvetores ordenados.

v o i d mergeSort ( i n t ∗v , i n t p , i n t r ) {i n t m;

m = ( p + r ) / 2 ;mergeSort ( v , p , m) ;mergeSort ( v , m, r ) ;i n t e r c a l a ( v , p , m, r ) ;

}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 34 / 47

Page 35: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: mergeSort

Esse algoritmo para?

v o i d mergeSort ( i n t ∗v , i n t p , i n t r ) {i n t m;

m = ( p + r ) / 2 ;mergeSort ( v , p , m) ;mergeSort ( v , m, r ) ;i n t e r c a l a ( v , p , m, r ) ;

}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 35 / 47

Page 36: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: mergeSort

Tratar casos base em que o vetor tem tamanho 0 ou 1, i.e., r −p ≤ 1.

v o i d mergeSort ( i n t ∗v , i n t p , i n t r ) {i n t m;i f ( r − p > 1) {

m = ( p + r ) / 2 ;mergeSort ( v , p , m) ;mergeSort ( v , m, r ) ;i n t e r c a l a ( v , p , m, r ) ;

}}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 36 / 47

Page 37: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: mergeSort

Para ordenar o vetor v inteiro chamar a funcao com p = 0 e r = n.

v o i d mergeSort ( i n t ∗v , i n t p , i n t r ) {i n t m;i f ( r − p > 1) {

m = ( p + r ) / 2 ;mergeSort ( v , p , m) ;mergeSort ( v , m, r ) ;i n t e r c a l a ( v , p , m, r ) ;

}}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 37 / 47

Page 38: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Codigo: mergeSort

Bonus: calculo levemente diferente de m para evitar erro numerico.

v o i d mergeSort ( i n t ∗v , i n t p , i n t r ) {i n t m;i f ( r − p > 1) {

// m = ( p + r ) / 2 ;m = p + ( r − p ) / 2 ;mergeSort ( v , p , m) ;mergeSort ( v , m, r ) ;i n t e r c a l a ( v , p , m, r ) ;

}}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 38 / 47

Page 39: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Exemplo: mergeSort

Chamadas recursivas em paralelo para facilitar a compreensao.

Inıcio: 1 vetor de tamanho 8.0 7

77 55 11 44 33 22 88 66

Divisao: 2 vetores de tamanho 4.0 3

77 55 11 44

4 7

33 22 88 66

Divisao: 4 vetores de tamanho 2.0 1

77 55

2 3

11 44

4 5

33 22

6 7

88 66

Divisao: 8 vetores de tamanho 1.0

77

1

55

2

11

3

44

4

33

5

22

6

88

7

66

Caso base: vetores com tamanho 1.Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 39 / 47

Page 40: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Exemplo: mergeSort

Chamadas recursivas em paralelo para facilitar a compreensao.

Caso base: chamadas recursivas voltam.0

77

1

55

2

11

3

44

4

33

5

22

6

88

7

66

Combinar: intercalacao ordena 4 vetores de tamanho 2.0 1

55 77

2 3

11 44

4 5

22 33

6 7

66 88

Combinar: intercalacao ordena 2 vetores de tamanho 4.0 3

11 44 55 77

4 7

22 33 66 88

Combinar: intercalacao ordena 1 vetor de tamanho 8.0 7

11 22 33 44 55 66 77 88

Fim: o vetor inteiro foi ordenado.Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 40 / 47

Page 41: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Analise de corretude: mergeSort

Usamos inducao para mostrar que mergeSort ordena um vetor detamanho n = r − p.

Caso base: ocorre quando o vetor tem tamanho 0 ou 1, ja estandoordenado. Nestes casos r − p ≤ 1 e o algoritmo termina.

Hipotese de Inducao: o algoritmo ordena corretamente vetores detamanho menor que n = r − p.

Passo: quando o algoritmo recebe um vetor de tamanho n, odivide em dois subvetores menores. Pela H.I. sabemosque os subvetores sao ordenados corretamente.Finalmente, como a rotina de intercalacao funciona,obtemos um vetor ordenado de tamanho n.

Curiosidade: esta demonstracao nao usa o fato do mergeSort dividiro vetor ao meio.

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 41 / 47

Page 42: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Analise de eficiencia: mergeSort

No pior caso o mergeSort leva tempo proporcional a O(n log n).

Dicas para a analise:

Divida o trabalho realizado pelo mergeSort em local e recursivo.

Note que a funcao T (n) = 2T (n/2) + cn captura este trabalho.

Construa uma arvore binaria de recursao a partir de T (n).

Questoes:

Qual o numero de nıveis desta arvore?

Qual o numero de subproblemas no nıvel j da arvore?

Qual o tamanho de cada subproblema do nıvel j da arvore?

Curiosidade: a tecnica da arvore de recursao generaliza para oTeorema Mestre.

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 42 / 47

Page 43: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Analise de eficiencia: mergeSort

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 43 / 47

Page 44: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Caracterısticas adicionais

Estabilidade:

Ordenacao e estavel. Podemos mostrar isso usando inducao.

Eficiencia de espaco:

Ordenacao nao e in place, pois usa a rotina intercala que precisade vetor auxiliar (e portanto memoria) proporcional ao tamanhodos vetores sendo intercalados.

Curiosidade: podemos usar o algoritmo insertionSort como caso basedo mergeSort.

Isso traz vantagem pois o insertionSort tem constante menor queo mergeSort, sendo por isso mais rapido quando n e pequeno.

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 44 / 47

Page 45: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Comparacao de funcoes

Quao felizes devemos ficar com a melhoria que obtivemos?

Considere ordenar vetores num computador que faz 10 bilhoes deoperacoes por segundo (10GHz).

Quanto tempo ele leva para ordenar vetores de tamanho n?

n log n n log n tempo n2 tempo

103 ou 1K 10 10K < 1s 106 ou 1M < 1s106 ou 1M 20 20M < 1s 1012 ou 103G 100s109 ou 1G 30 30G 3s 1018 ou 109G 3, 17 anos

Vıdeo com algoritmos de ordenacao:https://www.youtube.com/watch?v=ZZuD6iUe3Pc.

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 45 / 47

Page 46: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Bonus: mergeSort iterativo

v o i d m e r g e S o r t I ( i n t v [ ] , i n t n ) {i n t b = 1 ;w h i l e ( b < n ) {

i n t p = 0 ;w h i l e ( p + b < n ) {

i n t r = p + 2 ∗ b ;i f ( r > n )

r = n ;i n t e r c a l a ( v , p , p + b , r ) ;p = p + 2 ∗ b ;

}b = 2 ∗ b ;

}}

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 46 / 47

Page 47: Professor: M ario C esar San Felice - DC - UFSCarmario/ensino/2019s1/aed2/aula10... · 2019-04-18 · T ecnica de projeto de algoritmosdivis~ao-e-conquista. Algoritmo de ordena˘c~aomergeSort

Cenas dos proximos capıtulos:

Na proxima aula: divisao-e-conquista junto com aleatoriedade parachegar ao mais rapido algoritmo de ordenacao baseado emcomparacoes, o quickSort.

Num topico relacionado: para fazer ordenacao externa saogeneralizadas as ideias do mergeSort e do intercala.

Professor: Mario Cesar San Felice Ordenacao por intercalacao (mergeSort) 18 de abril de 2019 47 / 47