Paradigma de Divisão e Conquista

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Programação em Java Prof. Maurício Braga
Métodos Iterativos.
N Rainhas Descrição do Problema Satisfação de Restrições (CSP)
Estruturas de Repetição
Matrizes especiais Matriz linha Matriz do tipo 1 x n, ou seja, com uma única linha. Por exemplo, a matriz A =[ ], do tipo 1 x 4. Matriz coluna.
Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
Algoritmos de Ordenação
Determinantes Determinante é um número real associado a uma matriz quadrada. Notação: det A ou |A|. Determinante de uma Matriz Quadrada de 1ª Ordem. Seja.
Análise Projeto de Algoritmos
Meta - heurísticas Prof. Aurora
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Recursividade Conceitos e Aplicações.
FACENS – Engenharia da Computação Lógica Computacional II
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Carolina Fonseca Neumar Ribeiro
THOBER CORADI DETOFENO, MSC. Aula 07
Classificação de dados por Troca: QuickSort
Polinômios Prof. Marlon.
EQUAÇÕES POLINOMIAIS Prof. Marlon.
SISTEMAS LINEARES II Prof. Marlon.
Dividir-e-Conquistar
05(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Marco Antonio Montebello Júnior
Buscas em Grafos Prof. André Renato 1º Semestre/2012
Insertion Sort.
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Algoritmos e Estruturas de Dados I – Estruturas de Controle de Fluxo
Sistema de Equação de 1° grau com duas incógnitas.
Campus de Mal. Cdo. Rondon - PR. SISTEMAS ESCALONADOS – FORMA ESCADA.
Algoritmos de ordenação
Informática Teórica Engenharia da Computação
Prof. Guilherme Amorim 14/11/2013
Professora: Ana Cristina G. e Silva Natal-RN
SISTEMAS LINEARES.
Linguagem de Programação I Parte III
Linguagem de Programação II Parte IX
Resolução de sistemas lineares Métodos Numéricos para Engenharia I
Construção de Algoritmos AULA 03
Desempenho, Método de Shell, Quicksort
Instituto de Aplicação Fernando Rodrigues da Silveira (CAp/UERJ)
Sistema de equações lineares
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
1 - Equações Diferenciais Ordinárias
Campus de Caraguatatuba Aula 12: Sistemas de Equações Lineares (2)
MATEMÁTICA APLICADA REVISÃO BÁSICA.
Fundamentos de Programação
PROPRIEDADES DA ADIÇÃO
Algoritmos e Estruturas de Dados I – Recursão
Ceça Moraes – Introdução à Programação SI1
QuickSort Dividir: A[p…r] é particionado (reorganizado) em dois subvetores não vazios A[p…q] e A[q+1…r] tal que cada elemento de A[p…q] é menor ou igual.
POTENCIAÇÃO E FUNÇÃO EXPONENCIAL
Introdução a Algoritmos
Fábio de Oliveira Borges
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Algoritmos e Estruturas de Dados I – Estrutura de Repetição
DCC 001 Programação de Computadores 2º Semestre de 2011
Prof. Edison Oliveira de Jesus
Algoritmos.
Geometria Computacional Fecho Convexo
Exercícios de Fluxo em Redes
Exercícios (Algoritmo Narrativo, Fluxograma e Pseudocódigo) RESOLVIDO
ALGORITMOS Profº Antonio Carlos Marcelino de Paula.
Andréa Iabrudi 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I.
Prof. Disney Douglas Sistemas de Equações Lineares e Operações Elementares.
Arrays Outline 7.1 Introdução 7.2 Arrays 7.3 Declarando e Criando Arrays 7.4 Exemplos usando arrays 7.5 Ordenando arrays 7.6 Procurando em.
Lógica de Programação – Forbellone / Eberspacher Lógica de Programação Capítulo 6 Modularizando Algoritmos.
Algoritmos com matrizes e vetores
Transcrição da apresentação:

Paradigma de Divisão e Conquista II Trabalho Prático da Disciplina de ATP II Gustavo Eloi, Taygor Pradella

Introdução Através do estudo de algoritmos baseados no método de Divisão e Conquista pode-se notar a eficiência desta ideia em diversas aplicações. A multiplicação com números muito grandes, ao contrário do que se pressupõe, se torna mais eficiente a partir de números de grandes de dimensões. Tratando-se de algoritmos já existente, é possível a leitura e compreensão dos métodos em sites diversos, assim o método utilizado para o QuickSort difere do esquema padrão.

Divisão e Conquista Esta técnica consiste em dividir um problema maior recursivamente em problemas menores até que o problema possa ser resolvido diretamente. Então a solução do problema inicial é dada através da combinação dos resultados de todos os problemas menores computados. Vários problemas podem ser solucionados através desta técnica, como o de ordenação que trataremos neste trabalho.

Divisão e Conquista PROBLEMA SUBPROBLEMA SUB SOLUÇÃO SOLUÇÃO SOLUÇÃO Conquistar: Combinar: PROBLEMA SUBPROBLEMA SUB SOLUÇÃO SOLUÇÃO SOLUÇÃO

Multiplicação de inteiros Apresentação do Pseudocódigo:  Karatsuba-Ofman (u, v, n) 1  se  n ≤ 3 2  então  devolva u · v 3  senão  m ← ⌈n/2⌉ 4  p ← ⌊u/10m⌋ 5  q ← u mod 10m 6  r ← ⌊v/10m⌋ 7  s ← v mod 10m 8  pr ← Karatsuba-Ofman (p, r, m) 9  qs ← Karatsuba-Ofman (q, s, m) 10  y ← Karatsuba-Ofman (p+q, r+s, m+1) 11  x ← pr · 102m + (y − pr − qs) · 10m + qs 12  devolva  x

Descrição detalhada Sejam u e v dois números com no máximo n dígitos cada. Suponha, por enquanto, que n é par. Seja p o número formado pelos n/2 primeiros dígitos (dígitos mais significativos) de ue seja q o número formado pelos n/2 últimos dígitos (dígitos menos significativos) de u. Assim, u   =   p 10n/2 + q . Defina r e s analogamente para v, de modo que v = r 10n/2 + s.  Teremos então uv  =  pr 10n + (ps+qr) 10n/2 + qs .

Descrição detalhada Esta expressão reduz a multiplicação de dois números com no máximo n dígitos cada a quatro multiplicações (a saber, p por r, p por s, q por r e q por s) de números com no máximo n/2 dígitos cada.  Infelizmente, essa redução não é suficiente para tornar a multiplicação mais eficiente. Agora observe que os três números de que precisamos do lado direito de (*) — a saber  pr,  (ps+qr)  e  qs — podem ser obtidos com apenas três multiplicações, pois ps + qr   =   y  −  pr  −  qs ,    sendo  y  =  (p+q)(r+s),  e portanto a equação (*) pode ser substituída por uv   =   pr 10n + ( y − pr − qs) 10n/2 + qs .

Conclusão do Método É bem verdade que esta equação envolve duas adições e duas subtrações adicionais, mas essas operações consomem muito menos tempo que as multiplicações. Se n não é par, basta trocar n/2 por k = ⌈n/2⌉.  Teremos então  u = p 10k + q  e  v = r 10k + s  e portanto uv  =  pr 102k + ( y − pr − qs) 10k + qs . Esta é a base do algoritmo.

Algoritmo de QuickSort Este método baseia-se na divisão da tabela em duas sub-tabelas, dependendo de um elemento chamado pivô, normalmente o 1º elemento da tabela. Uma das sub-tabelas contém os elementos menores que o pivô enquanto a outra contém os maiores. O pivô é colocado entre ambas, ficando na posição correcta. As duas sub-tabelas são ordenadas de forma idêntica, até que se chegue à tabela com um só elemento.

Descrição detalhada Quicksort (A, p, r) 1 se p < r Apresentação do Pseudocódigo: O Quicksort é um algoritmo de ordenação: ele recebe um vetor A[p..r] e rearranja o vetor em ordem crescente. Quicksort (A, p, r) 1   se  p < r 2   então  q ← Separe (A, p, r) 3   Quicksort (A, p, q) 4   Quicksort (A, q+1, r) Obs: q ≥ p e q < r;  portanto os vetores A[p..q] e A[q+1 .. r] são estritamente menores que o vetor original A[p..r].  Isso garante que a execução do algoritmo termina, mais cedo ou mais tarde.

Descrição detalhada O algoritmo Separe rearranja o vetor A[p..r] e determinar um índice q tal que p ≤ q e cada elemento de A[p..q] é menor ou igual a x , q < r e cada elemento de A[q+1 .. r] é maior ou igual a x para algum x. O número x é o pivô da separação.   Separe (A, p, r) 1   x ← A[p] 2   i ← p−1 3   j ← r+1 4   enquanto 0 = 0 faça 5   repita j ← j−1 6   até que A[j] ≤ x 7   repita i ← i+1 8   até que A[i] ≥ x 9   se i < j 10   então troque A[i] ↔ A[j] 11   senão devolva j

Descrição detalhada p i j r ≤ x ≥ x Para entender como e por que o algoritmo funciona como deveria, observe que no início de cada iteração do loop que começa na linha 4 temos as seguintes propriedades invariantes: A[p..i] ≤ x ,    i < j ,    A[j..r] ≥ x . Na última passagem pela linha 4, o vetor A[i+1 .. j−1] consiste em zero ou mais elementos < x  seguidos de zero ou mais elementos > x     ou zero ou mais elementos < x ,  seguidos de exatamente um elemento igual a x , seguido de zero ou mais elementos > x . p i j r ≤ x   ≥ x

Descrição detalhada No primeiro caso, o algoritmo chega à linha 11 com j = i−1. No segundo caso, o algoritmo chega à linha 11 com j = i. Assim o algoritmo cumpre sua função; em particular, que p ≤ j <r na linha 11. p j i r ≤ x ≥ x p j=i r ≤ x = x ≥ x

Visualização do Método e comparação com Bubble