Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


10 - divisao - conquista, Notas de estudo de Engenharia Telemática

10 ATAL - Análise e Técnicas de Algoritmos UFCG

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 27/11/2010

samuel-santos-22
samuel-santos-22 🇧🇷

4.6

(41)

262 documentos

1 / 49

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Análise e Técnicas de Algoritmos
Divisão e conquista
Tiago Massoni
Jorge Figueiredo
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31

Pré-visualização parcial do texto

Baixe 10 - divisao - conquista e outras Notas de estudo em PDF para Engenharia Telemática, somente na Docsity!

Análise e Técnicas de Algoritmos

Divisão e conquista

Tiago Massoni

Jorge Figueiredo

2 Problemas tendem a ser recursivos

é bom porque

  • simplifica problemas complexos
  • resolve problemas de forma eficiente
  • paralelismo

Mergesort

Divisão : divide a sequência com n elementos em duas com n/2 elementos cada Conquista : ordena as duas subsequências recursivamente com merge-sort Combinação : Combinar as duas sequências ordenadas para produzir uma resposta ordenada 5

Quicksort

• Deve ser possível decompor uma instância em sub-instâncias

• A combinação dos resultados deve ser eficiente

• As sub-instâncias devem ser mais ou menos do mesmo

tamanho 6

Quando usar...

Maior elemento de um vetor A[1..n] Solução Sequencial Maxim(A[1..n]) maior A[1] for i 2 to n do if A[j] > maior then maior A[i] return maior

Exercício

3 passos?

análise?

Solução D-C Maxim(A,inicio,fim) if fim=inicio then return A[inicio] else m ← inicio+fim/ v1 ← Maxim(A[inicio..m]) v2 ← Maxim(A[m+1..fim]) return max(v1, v2)

Algoritmo Genérico

DivisãoeConquista(x) if x é pequeno ou simples then return resolver(x) else decompor x em conjuntos menores x0, x1, … xn for i ← 0 to n do yi ← DivisãoeConquista(xi) combinar yi’s return y

Exercício

Algoritmo que recebe como entrada duas strings X e Y, com

o resultado das travessias pré-ordem e em ordem,

respectivamente, em uma árvore binária de letras

distintas

O algoritmo deve retornar uma string resultante da

travessia em pós-ordem

O algoritmo não pode criar uma árvore real para resolver o

problema, e deve ser projetado com a técnica de divisão e

conquista.

Exemplo: para entrada X=DAFEB e Y=FAEDB,

resposta=FEABD

Texto D A F E B

Quando a divisão e conquista efetivamente melhora o desempenho

Multiplicação D-C

  • A X B
  • divide-se o número original em dois super- dígitos
  • então procede a multiplicação 20

Multiplicação D-C 24 a: 12 32 31 b: mult(24,31) mult(12,31) mult(24,32) mult(12,32) mult(24,32) Mult(24,31)+ mult(12,32) mult(12,31) n n/2 n/

Multiplicação D-C multiply(a,b,n) if (n == 1) then return ab else aR ← bottom n/2 digits of a aL ← top remaining digits of a bR ← bottom n/2 digits of b bL ← top remaining digits of b return Multiply(aL,bL)pow(10,n) + (Multiply(aL,Br)+Multiply(aR,bL))*pow(10,n/2) + Multiply(aR,bR) Quatro Multiplicações^23

Multiplicação D-C