Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Merge Sort
Profa. Sheila Morais de Almeida
DAINF-UTFPR-PG
junho - 2018
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 1 / 53
Este material é preparado usando como referências os textos dos seguintes
livros.
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 2 / 53
Divisão e Conquista
Divisão e Conquista é uma técnica de projeto de algoritmos que consiste
em dividir o problema original em subproblemas, resolver esses
subproblemas e combinar essas soluções para obter a solução do problema
original.
Dica: Normalmente, os resultados são melhores se você divide o problema
original em subproblemas de tamanhos parecidos (iguais, se possível).
Exemplo de algoritmo de Divisão e Conquista: MergeSort ou
ordenação por intercalação.
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 3 / 53
Divisão e Conquista: MergeSort
Você se lembra de como funciona o MergeSort?
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 4 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043 11 25 69 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 5 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84 9 43
11 25 69 7
7240
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 6 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84 9 43
84 9
11 25 69 7
7240
43
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 7 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84 9 43
84 9
84 9
11 25 69 7
7240
43
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 8 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84 9 43
84 9
9
11 25 69 7
7240
43
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 9 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84 9 43
84
9 84
11 25 69 7
7240
43
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 10 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84 9 43
849 43
11 25 69 7
7240
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 11 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
849 43
9
11 25 69 7
7240
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 12 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84 43
9 43
11 25 69 7
7240
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 13 / 53
Divisão e Conquista: MergeSort
43 84
84 9 72 11 25 6940 743
84 9 724043
84
9
11 25 69 7
7240
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 14 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84439
11 25 69 7
7240
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 15 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84439 7240
40 72
11 25 69 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 16 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84439
40 72
40
11 25 69 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 17 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84439 40
72
72
11 25 69 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 18 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84 9 724043
84439 40 72
11 25 69 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 19 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84439 40 72
9 11 25 69 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 20 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
8443 40 72
9 40 11 25 69 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 21 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
8443
40
72
9 43 11 25 69 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 22 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84
4340
72
9 72 11 25 69 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 23 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
84
4340 729 84 11 25 69 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 24 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
844340 729 11 25 69 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 25 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
844340 729 11 25 69 7
11 25
11 25
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 26 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
844340 729 11 25 69 7
11 25 7
769
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 27 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
844340 729 11 25 69 7
11 25 7
69
69
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 28 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
844340 729 11 25 69 7
11 25 7 69
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 29 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
844340 729 7
11 25 7 69
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 30 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
844340 729 117
11 25 69
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 31 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
844340 729 11 257
25 69
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 32 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
844340 729 11 257
69
69
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 33 / 53
Divisão e Conquista: MergeSort
84 9 72 11 25 6940 743
844340 729 11 257 69
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 34 / 53
Divisão e Conquista: MergeSort
7
844340 729 11 25 697
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 35 / 53
Divisão e Conquista: MergeSort
7
844340 729 11 25 69
9
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 36 / 53
Divisão e Conquista: MergeSort
7
844340 72 11 25 69
9 11
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 37 / 53
Divisão e Conquista: MergeSort
7
844340 72 25 69
9 11 25
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 38 / 53
Divisão e Conquista: MergeSort
7
844340 72 69
9 11 25 40
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 39 / 53
Divisão e Conquista: MergeSort
7
8443 72 69
9 11 25 40 43
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 40 / 53
Divisão e Conquista: MergeSort
7
8472 69
9 11 25 40 43 69
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 41 / 53
Divisão e Conquista: MergeSort
7
8472
9 11 25 40 43 69 72
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 42 / 53
Divisão e Conquista: MergeSort
7
84
9 11 25 40 43 69 72 84
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 43 / 53
Divisão e Conquista: MergeSort
7 9 11 25 40 43 69 72 84
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 44 / 53
Divisão e Conquista: MergeSort
Qual a complexidade do MergeSort?
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 45 / 53
Divisão e Conquista: MergeSort
Merge_Sort(V [ ], p, r)Se p < r , então:
q ←⌊ r+p
2
⌋Merge_Sort(V , p, q)Merge_Sort(V , q + 1, r)Merge(V , p, q, r)
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 46 / 53
Divisão e Conquista: MergeSort
Merge_Sort(V [ ], p, r)Se p < r , então: 1
q ←⌊ r+p
2
⌋3
Merge_Sort(V , p, q) T (n2)
Merge_Sort(V , q + 1, r) T (n2)
Merge(V , p, q, r) M(n)
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 47 / 53
Divisão e Conquista: MergeSort
Merge(V [ ], p, q, r)i ← p; j ← q + 1; h← 0; 4
Aloque vetor temporário W [0..r − 1]; assumindo que uma página
de memória é su�ciente, muito barato
Enquanto i ≤ q e j ≤ r faça: 2n (verdadeiro n-1 vezes)
Se V [i ] ≤ V [j ] então: n-1
W [h]← V [i ]; i ← i + 1; 3(n − 1)Senão:
W [h]← V [j ]; j ← j + 1; rodou a de cima, não roda nesta
h← h + 1 2(n − 1)Enquanto i ≤ q faça: 2
W [h]← V [i ]; h← h + 1; i ← i + 1; 5
Enquanto j ≤ r faça: 1 (falso aqui ou no de cima)
W [h]← V [j ]; h← h + 1; j ← j + 1; 0
Para i de p até r faça: 3(n + 1)− 1 = 3n + 2
V [i ]←W [i − p]; 2n
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 48 / 53
Divisão e Conquista: MergeSort
Complexidade da função Merge() em um vetor com n elementos:
M(n) = 13n + 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 49 / 53
Divisão e Conquista: MergeSort
Merge_Sort(V [ ], p, r)Se p < r , então: 1
q ←⌊ r+p
2
⌋3
Merge_Sort(V , p, q) T (n2)
Merge_Sort(V , q + 1, r) T (n2)
Merge(V , p, q, r) 13n + 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 50 / 53
Divisão e Conquista: MergeSort
Complexidade do Algoritmo Merge_Sort: análise de tempo em um vetor
com n elementos, onde: r − p + 1 = n.
T (n) =
{1, se n = 1;2T (
⌈n2
⌉) + 13n + 7, se n > 1.
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 51 / 53
Divisão e Conquista: MergeSort
Solução da relação de recorrência.n T (n)
1 = 20 1
2 = 21 2T (1) + 13(2) + 7 = 2+ 13(2) + 7
4 = 22 2T (2) + 13(22) + 7
= 22 + (13)22 + 2(7) + 13(22) + 7
= 22 + 2(22)(13) + 2(7) + 7 = 22 + 2(22)(13) + 2(7) + 7
8 = 23 2T (4) + 13(23) + 7
= 23 + 2(23)(13) + 22(7) + 2(7) + 13(23) + 7
= 23 + 3(23)(13) + 22(7) + 2(7) + 7
16 = 24 2T (8) + 13(24) + 7
= 24 + 3(24)(13) + 23(7) + 22(7) + 2(7) + 13(24) + 7
= 24 + 4(24)(13) + 23(7) + 22(7) + 2(7) + 7
2k 2k + k(2k)(13) + 2k−1(7) + 2k−2(7) + . . .+ 2(7) + 7
= 2k + k(2k)(13) +∑k−1
i=0 (2i (7))
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 52 / 53
Divisão e Conquista: MergeSort
Solução da relação de recorrência.
T (2k) = 2k + k(2k)(13) +∑k−1
i=0 (2i (7))
T (2k) = 2k + k(2k)(13) + 7∑k−1
i=0 (2i ) = 2k + k(2k)(13) + 7(2k − 1)
T (2k) = (1+ 13k)2k + 7(2k)− 7 = (13k + 8)2k − 7
Quando 2k = n temos k = log2 n,
T (n) = (13 log2 n + 8)n − 7 = 13n log2 n + 8n − 7
Sheila Almeida (DAINF-UTFPR-PG) Merge Sort junho - 2018 53 / 53