Algoritmos de Ordenação

Slides:



Advertisements
Apresentações semelhantes
Estrutura, Pesquisa e Ordenação de Dados
Advertisements

Funções em C Prof. Fabiano Utiyama.
Ordenação de Dados em Memória
Programação em Java Prof. Maurício Braga
Haskell The Craft of Functional Programming Simom Thompson Capítulo 14
Analise de Algoritmos e Notação Assintótica
Katia S. Guimarães QUICKSORT Katia S. Guimarães
Estruturas de Repetição
Algoritmo I Aula 05 Pseudo-Linguagem.
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.
Aula 10 Algoritmos de Busca
05/08/2011 Professor Leomir J. Borba- –
Nivelamento de C: Vetores e Strings
Algoritmos de Ordenação
Nivelamento de C: Tipos Estruturados de Dados
Algoritmos de Ordenação
Tabelas Hash CONTEÚDO (1) Auto-avaliação (2) Tabelas Hash
Algoritmos de Busca CONTEÚDO (1) Motivação (2) Busca Linear
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INSTRUÇÕES DE CONTROLE – PARTE I Prof. Thiago Pereira Rique
Profa. Dra. Ana Paula Appel
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
David Menotti Estruturas de Dados I DECOM – UFOP
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,
Classificação de dados por Troca: QuickSort
Método de Ordenação: InsertionSort
Classificação de dados por Intercalação: MergeSort
Métodos de Classificação por Seleção
Dividir-e-Conquistar
Laboratório de Programação de Computadores II Aula 1 2S/2009.
Apresentação da linguagem Python
Divisão e Conquista Análise de algoritmos UNISUL Ciência da Computação
Algoritmos e Programação
Professor João Gilberto
exercícios listas encadeadas
Campus de Mal. Cdo. Rondon - PR. SISTEMAS ESCALONADOS – FORMA ESCADA.
Algoritmos de Ordenação 4
Aux a fim início Simulação da execução de um algoritmo que troca o conteúdo de duas variáveis recebidas e apresenta o resultado da inversão: leia a,b a.
Paradigma de Divisão e Conquista
Análise de Desempenho dos Algoritmos de Ordenação
Complexidade de algoritmos e Classificação (Ordenação) de dados
Aula 14.
Mergesort Katia Guimarães.
Estruturas de Dados Aula 14: Recursão 04/06/2014.
PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta.
Procedimentos e Funções
Algoritmos e Estruturas de Dados I – Recursão
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.
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Estrutura de Dados em C/C /2
Aula 10 Algoritmos de Busca
DCC 001 Programação de Computadores 2º Semestre de 2011
Métodos de Ordenação.
Recursividade Profs. De Prog2 e Lab2.
Geometria Computacional Fecho Convexo
CLASSIFICAÇÃO DE DADOS
Análise e Síntese de Algoritmos
Prof. Alessandro Gonçalves
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Exercícios Faça um algoritmos para trocar uma lampada queimada.
Programação Dinâmica Profa. Sandra de Amo Bacharelado em Ciência da Computação – UFU Disciplina de Análise de Algoritmos.
Programação II Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da Prof.
Ordenação Professor Paulo Gomide 27 de outubro de 2015.
Ordenação (Sorting) Ordenar é dispor os elementos de um conjunto numa ordem ascendente ou descendente. Problema: Dados n números, arranjá-los em ordem.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Exercícios de Revisão 1 Crisitano Arbex Valle Vinicius Fernandes dos Santos
Algoritmos com matrizes e vetores
Aula 7 Professores: Conteúdo: Dante Corbucci Filho
Transcrição da apresentação:

Algoritmos de Ordenação CONTEÚDO (1) Auto-avaliação (2) QuickSort (3) MergeSort

Ordenação/Classificação (1) Auto-avaliação Ordenação/Classificação Antes de prosseguir: Considerando o vetor de inteiros a seguir, execute os algoritmos vistos na aula passada (insertionSort e selectionSort), e escreva as alterações realizadas nesse vetor, em cada iteração realizada vetor iteração 4 8 3 2 1 7 1ª 2ª 3ª 4ª 5ª 6ª ...

É um paradigma geral de projeto de algoritmos: (2) QuickSort Dividir e Conquistar É um paradigma geral de projeto de algoritmos: Dividir: divida os dados de entrada S em dois subconjuntos disjuntos S1 e S2 Recorrência: resolva os subproblemas associados a S1 e S2, geralmente de forma recursiva Conquistar: combine as soluções para S1 e S2 em uma solução para S

Encontre um elemento na lista a ser ordenada para servir como o pivô (2) QuickSort QuickSort É um algoritmo de ordenação baseado no paradigma de dividir e conquistar Encontre um elemento na lista a ser ordenada para servir como o pivô Divida a lista em duas partes - uma com elementos maiores ou iguais ao elemento pivô e a outra com os elementos menores do que pivô. Repita recursivamente o algoritmo para as duas partes da lista original

(2) QuickSort Pseudocódigo Quicksort (0,5,v) Algorithm Quicksort(inicio, fim, v) Input initial position, final position, a sequence v Output the sequence v sorted if (inicio >= fim) then return; indicePivo  Partition(inicio, fim, v) Quicksort(inicio, indicePivo-1, v) Quicksort(indicePivo+1, fim, v) 7 4 1 9 3 2 Partition (0,5,v) retorna 4 3 4 1 2 7 9 Quicksort(0,3,v) Quicksort(5,5,v) 3 4 1 2 9 Partition (0,3,v) retorna 2 1 2 3 4 Quicksort(0,1,v) Quicksort(3,3,v) 1 2 4 Partition (0,1,v) retorna 0 1 2 Quicksort(0,-1) Quicksort(A,1,1) return 2

Exemplo: Partition (0,5,v) (2) QuickSort Pseudocódigo Partition(inicio, fim, v) Input initial position, final position, a sequence v Output the position of the pivot element i  inicio f  fim pivo  v[inicio] while(i<f) while(v[i]<=pivo AND i<fim) i  i+1 while (v[f] > pivo) f  f-1 if (i<f) then troca(v[i],v[f]) v[inicio]  v[f] v[f]  pivo return f Exemplo: Partition (0,5,v) i 7 4 1 9 3 2 pivo=7 f i 7 4 1 2 3 9 pivo=7 f 3 4 1 2 7 9 pivo=7 f return 4

Também chamado de ordenação por intercalação (3) MergeSort MergeSort Também chamado de ordenação por intercalação Também baseado no paradigma de dividir e conquistar Divide o vetor a ser ordenado em duas metades aproximadamente iguais Cada metade é ordenada recursivamente e então são intercaladas de volta para formar o vetor final ordenado

Princípio: dividir e ordenar (3) MergeSort Princípio: dividir e ordenar

(3) MergeSort Exemplo Realizar Merge-sort em uma sequência de entrada S com n elementos consiste de três passos: Dividir: particionar S em duas sequências S1 e S2 de cerca de n/2 elementos cada Recorrência: aplicar recursivamente a operação Merge-sort em S1 e S2 Conquistar: intercalar S1 e S2 em uma única sequência S ordenada 7 4 1 9 3 2 7 4 1 9 3 2 4 1 3 2 4 1 3 2 Merge Merge 7 1 4 9 2 3 Merge Merge 1 4 7 2 3 9 Merge 1 2 3 4 7 9

MergeSort - Dividir 7 4 1 9 3 2 Algorithm mergeSort(ini, post, S) mergeSort(0,6,S) 7 4 1 9 3 2 Algorithm mergeSort(ini, post, S) Input initial position , final position + 1 and sequence S Output sequence S sorted if (ini<post-1) then mid  (ini+post)/2 Sini-(mid-1)  mergeSort(ini,mid, S) Smid-(post-1)  mergeSort(mid,post,S) Sini-(post-1)  merge(ini,mid,post,S) Return S mergeSort(0,3,S) mergeSort(3,6,S) 7 4 1 9 3 2 mergeSort(0,1,S) mergeSort(1,3,S) mergeSort(3,4,S) mergeSort(4,6,S) 7 4 1 9 3 2 mergeSort(1,2,S) mergeSort(2,3,S) 4 1 mergeSort(4,5,S) mergeSort(5,6,S) 3 2

MergeSort - Conquistar 4 1 3 2 Algorithm mergeSort(ini, post, S) Input initial position , final position + 1 and sequence S Output sequence S sorted if (ini<post-1) then mid  (ini+post)/2 Sini-(mid-1)  mergeSort(ini,mid, S) Smid-(post-1)  mergeSort(mid,post,S) Sini-(post-1)  merge(ini,mid,post,S) Return S Merge (1,2,3,S) Merge (4,5,6,S) 7 1 4 9 2 3 Merge (0,1,3,S) Merge (3,4,6,S) 1 4 7 2 3 9 Merge (0,3,6,S) 1 2 3 4 7 9 Possui tempo de execução de O(n log n)

Merge Merge Merge Merge Merge Merge 7 4 1 9 3 2 7 4 1 9 3 2 4 1 3 2 4 (3) MergeSort 7 4 1 9 3 2 Algorithm merge(ini, mid, post, S) W empty sequence of size (post-ini) i  ini j  mid k  0 while (i < mid) and (j < post) do if (S[i] <= S[j]) then W[k]  S[i] k  k+1 i  i+1 else W[k]  S[j] k  k+1 j  j+1 while (i < mid) do W[k]  S[i] k  k+1 i  i+1 while (j < post) do W[k]  S[j] k  k+1 j  j+1 for i  ini to post-1 do S[i]  W[i-ini]; Return S 7 4 1 9 3 2 4 1 3 2 4 1 3 2 Merge Merge 7 1 4 9 2 3 Merge Merge 1 4 7 2 3 9 Merge 1 2 3 4 7 9