Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica...

25
Mergesort ICC2 Thiago A. S. Pardo

Transcript of Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica...

Page 1: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

MergesortICC2

Thiago A. S. Pardo

Page 2: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

Idéia básica Dividir para conquistar

Um vetor v é dividido em duas partes, recursivamente

Cada metade é ordenada e ambas são intercaladas formando o vetor ordenado

Usa um vetor auxiliar para intercalar

2

Page 3: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

3

Idéia básica Algoritmo de ordenação de arranjos por intercalação

Passo 1: divide-se um arranjo não ordenado em dois subarranjos

Passo 2: se os subarranjos não são unitários, cada subarranjo é submetido ao passo 1 anterior; caso contrário, eles são ordenados por intercalação dos elementos e isso é propagado para os subarranjos anteriores

Page 4: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

4

Ordenação por Intercalação

5 2 4 7 1 3 2 6

Page 5: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

5

Ordenação por Intercalação

5 2 4 7 1 3 2 6

5 2 4 7 1 3 2 6

Page 6: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

6

5 2 4 7 1 3 2 6

Ordenação por Intercalação

5 2 4 7 1 3 2 6

5 2 4 7 1 3 2 6

Page 7: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

7

5 2 4 7 1 3 2 6

Ordenação por Intercalação

5 2 4 7 1 3 2 6

5 2 4 7 1 3 2 6

5 2 4 7 1 3 2 6

divisão

Page 8: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

8

5 2 4 7 1 3 2 6

Ordenação por Intercalação

5 2 4 7 1 3 2 6

5 2 4 7 1 3 2 6

2 5 4 7 1 3 2 6

5 2 4 7 1 3 2 6

divisão

intercalação

Page 9: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

9

5 2 4 7 1 3 2 6

Ordenação por Intercalação

5 2 4 7 1 3 2 6

5 2 4 7 1 3 2 6

2 5 4 7 1 3 2 6

2 4 5 7 1 2 3 6

5 2 4 7 1 3 2 6

divisão

intercalação

Page 10: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

10

5 2 4 7 1 3 2 6

Ordenação por Intercalação

5 2 4 7 1 3 2 6

5 2 4 7 1 3 2 6

2 5 4 7 1 3 2 6

2 4 5 7 1 2 3 6

1 2 2 3 4 5 6 7

5 2 4 7 1 3 2 6

divisão

intercalação

Page 11: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

11

Ordenação por intercalação Exemplo com arranjo de 4 elementos

3 1 4 2

3 1 4 2

3 1 4 2

1 3 2 4

1 2 3 4

Divisão em arranjos menores

Intercalação em ordem

Arranjo inicial

Arranjo final ordenado

Page 12: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

12

Ordenação por intercalação Em duplas

Implemente a sub-rotina de intercalação de 2 subvetores ordenados

Page 13: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

13

Ordenação por intercalação Em duplas

Implemente a sub-rotina do mergesort Usando a sub-rotina de intercalação anterior

Page 14: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

Implementação 14

void intercala(int v[], int ini, int meio, int fim) { int i, j, k, n1, n2; n1=meio-ini+1; n2=fim-meio; int L[n1+1], R[n2+1]; for (i=0;i<n1;i++) L[i]=v[ini+i]; L[n1]=9999; for (j=0;j<n2;j++) R[j]=v[meio+j+1]; R[n2]=9999; i=j=0; for (k=ini;k<=fim;k++) if (L[i]<=R[j]) { v[k]=L[i]; i++; } else { v[k]=R[j]; j++; } }

void mergesort(int v[], int ini, int fim) { int meio; if (ini<fim) { meio=(ini+fim)/2; mergesort(v,ini,meio); mergesort(v,meio+1,fim); intercala(v,ini,meio,fim); }}

Page 15: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

Ordenação por intercalação Faça a análise do algoritmo

15

Page 16: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

16

Ordenação por intercalação Rotina principal: mergesort

Se n=1 elemento no arranjo, ordenação não é necessária: ?

Se n>1

O problema é inicialmente dividido em subproblemas: ?

Os subproblemas são processados: ?

As soluções são combinadas: complexidade da rotina auxiliar de intercalação

Page 17: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

17

Ordenação por intercalação Rotina principal: mergesort

Se n=1 elemento no arranjo, ordenação não é necessária: 1 operação é realizada, tempo constante O(c)

Se n>1

O problema é inicialmente dividido em subproblemas: 3 operações, tempo constante O(c)

Os subproblemas são processados: 2 subproblemas, sendo que cada um tem metade do tamanho original = 2T(n/2)

As soluções são combinadas: O(n)

Page 18: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

18

Ordenação por intercalação Equações de complexidade do algoritmo

???

Page 19: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

19

Ordenação por intercalação Equações de complexidade do algoritmo

T(n)=O(c)=1, se n=1

T(n)=2T(n/2) + O(c) + O(n), se n>1

O(n), já que c<n em geral

Page 20: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

20

Ordenação por intercalação Equações de complexidade do algoritmo

T(n)=1, se n=1

T(n)=2T(n/2) + O(n), se n>1

Page 21: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

21

Ordenação por intercalação Equações de complexidade do algoritmo

T(n)=1, se n=1

T(n)=2T(n/2) + n, se n>1

Page 22: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

22

Ordenação por intercalação Equações de complexidade do algoritmo

T(n)=1, se n=1

T(n)=2T(n/2) + n, se n>1

EQUAÇÃO DE RECORRÊNCIA, podendo ser resolvidavia árvore de recorrência

Page 23: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

23

Resolução de recorrências

Page 24: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

24

Resolução de recorrências

Page 25: Mergesort - USPwiki.icmc.usp.br/images/1/1f/ICC2_09.Ordenacao_merge.pdf · 3 Idéia básica Algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não

25

Resolução de recorrências Tem-se que:

Na parte (a), há T(n) ainda não expandido Na parte (b), T(n) foi dividido em árvores equivalentes

representando a recorrência com custos divididos (T(n/2) cada uma), sendo n o custo no nível superior da recursão (fora da recursão e, portanto, associado ao nó raiz)

... No fim, nota-se que a altura da árvore corresponde a (log

n)+1, o qual multiplica os valores obtidos em cada nível da árvore, os quais, nesse caso, são iguais Como resultado, tem-se n logn + n, ou seja, O(n log n)