Академический Документы
Профессиональный Документы
Культура Документы
BCC202 – Aula 14
Algoritmos e Estruturas de Dados I
DIVISÃO E CONQUISTA
Motivação
3
A técnica de Divisão e Conquista
4
A técnica de Divisão e Conquista
5
Quando utilizar?
6
Algoritmo Genérico
def divisao_e_conquista(x):
if x é pequeno ou simples:
return resolve(x)
else:
decompor x em n conjuntos menores x0,x1,...,xn-1
for i in [0,1,...,n-1]:
yi = divisao_e_conquista(xi)
combinar y0,y1,...,yn-1 em y
return y
7
ORDENAÇÃO POR INTERCALAÇÃO
MERGESORT
Abordagem com Balanceamento
• Principal diferença:
• QuickSort utiliza o conceito de elemento pivô para dividir o
problema em subproblemas
• MergeSort sempre divide o problema de forma balanceada
(gerando subproblemas de mesmo tamanho)
9
MergeSort: Execução
7 2 ⏐ 9 4 → 2 4 7 9
7 ⏐ 2 → 2 7 9 ⏐ 4 → 4 9
7 2 9 4 ⏐ 3 8 6 1 → 1 2 3 4 6 7 8 9
7 2 9 4 → 2 4 7 9 3 8 6 1 → 1 3 8 6
7 2 → 2 7 9 4 → 4 9 3 8 → 3 8 6 1 → 1 6
11
MergeSort: Exemplo de Execução (cont.)
7 2 9 4 ⏐ 3 8 6 1 → 1 2 3 4 6 7 8 9
7 2 ⏐ 9 4 → 2 4 7 9 3 8 6 1 → 1 3 8 6
7 2 → 2 7 9 4 → 4 9 3 8 → 3 8 6 1 → 1 6
12
MergeSort: Exemplo de Execução (cont.)
• Chamada recursiva
7 2 9 4 ⏐ 3 8 6 1 → 1 2 3 4 6 7 8 9
7 2 ⏐ 9 4 → 2 4 7 9 3 8 6 1 → 1 3 8 6
7 ⏐ 2 → 2 7 9 4 → 4 9 3 8 → 3 8 6 1 → 1 6
13
MergeSort: Exemplo de Execução (cont.)
7 2 9 4 ⏐ 3 8 6 1 → 1 2 3 4 6 7 8 9
7 2 ⏐ 9 4 → 2 4 7 9 3 8 6 1 → 1 3 8 6
7 ⏐ 2 → 2 7 9 4 → 4 9 3 8 → 3 8 6 1 → 1 6
14
MergeSort: Exemplo de Execução (cont.)
7 2 9 4 ⏐ 3 8 6 1 → 1 2 3 4 6 7 8 9
7 2 ⏐ 9 4 → 2 4 7 9 3 8 6 1 → 1 3 8 6
7 ⏐ 2 → 2 7 9 4 → 4 9 3 8 → 3 8 6 1 → 1 6
15
MergeSort: Exemplo de Execução (cont.)
7 2 9 4 ⏐ 3 8 6 1 → 1 2 3 4 6 7 8 9
7 2 ⏐ 9 4 → 2 4 7 9 3 8 6 1 → 1 3 8 6
7 ⏐ 2 → 2 7 9 4 → 4 9 3 8 → 3 8 6 1 → 1 6
16
MergeSort: Exemplo de Execução (cont.)
7 2 9 4 ⏐ 3 8 6 1 → 1 2 3 4 6 7 8 9
7 2 ⏐ 9 4 → 2 4 7 9 3 8 6 1 → 1 3 8 6
7 ⏐ 2 → 2 7 9 4 → 4 9 3 8 → 3 8 6 1 → 1 6
17
MergeSort: Exemplo de Execução (cont.)
7 2 9 4 ⏐ 3 8 6 1 → 1 2 3 4 6 7 8 9
7 2 ⏐ 9 4 → 2 4 7 9 3 8 6 1 → 1 3 8 6
7 ⏐ 2 → 2 7 9 4 → 4 9 3 8 → 3 8 6 1 → 1 6
18
MergeSort: Exemplo de Execução (cont.)
7 2 9 4 ⏐ 3 8 6 1 → 1 2 3 4 6 7 8 9
7 2 ⏐ 9 4 → 2 4 7 9 3 8 6 1 → 1 3 6 8
7 ⏐ 2 → 2 7 9 4 → 4 9 3 8 → 3 8 6 1 → 1 6
19
MergeSort: Exemplo de Execução (cont.)
7 2 9 4 ⏐ 3 8 6 1 → 1 2 3 4 6 7 8 9
7 2 ⏐ 9 4 → 2 4 7 9 3 8 6 1 → 1 3 6 8
7 ⏐ 2 → 2 7 9 4 → 4 9 3 8 → 3 8 6 1 → 1 6
20
MERGESORT
ANÁLISE DO ALGORITMO
Análise do MergeSort
h = O(log n)
22
MERGESORT
IMPLEMENTAÇÃO RECURSIVA
Algoritmo MergeSort
26
Implementação do MergeSort
27
MERGESORT
VANTAGENS/DESVANTAGENS
MergeSort
• Vantagens
• MergeSort é O(n log n)
• Indicado para aplicações que tem restrição de tempo
(executa sempre em um determinado tempo para n)
• Passível de ser transformado em estável
§ Tomando certos cuidados na implementação da intercalação
• Fácil Implementação
• Desvantagens
• Utiliza memória auxiliar – O(n)
• Na prática é mais lento que QuickSort no caso médio
29
MERGESORT
IMPLEMENTAÇÃO
NÃO-RECURSIVA
MergeSort Não Recursivo
31
Perguntas?
32
MERGESORT
EXERCÍCIO
Exercício
3492518
Ordene em ordem crescente utilizando o algoritmo
MergeSort, apresentado a sequência dos números a
cada passo do algoritmo.
34