Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Documentos relacionados
Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: Claudio Quick F. M.

ALGORITMOS DE ORDENAÇÃO

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

Análise empírica de algoritmos de ordenação

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

- Métodos simples de busca - Métodos ingênuos de ordenação (introdução)

BCC202 - Estrutura de Dados I

Métodos de Ordenação Parte 3

Estruturas de Dados Algoritmos de Ordenação

5. Algoritmos de Ordenação

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

Ordenação de Dados. Ordenação de Dados

Métodos de Ordenação

Estruturas de Dados 2

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

Métodos de Classificação

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI1

Ordenação de Dados (III) HeapSort

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.

Ordenação em Memória Primária Estrutura de Dados II

O Problema da Ordenação Métodos de Ordenação Parte 1

Ordenação de Dados (IV) MergeSort

Algoritmos de Ordenação: Cota Inferior

Métodos de Ordenação Parte 4

Algoritmos de Ordenação: QuickSort

Algoritmos de Ordenação: Tempo Linear

Limite assintótico para a ordenação, Ordenação em tempo linear

Algoritmos de ordenação Quicksort

Aula 11 Métodos de Classificação em memória primária. Prof. Gustavo Callou

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI

AED2 - Aula 11 Problema da separação e quicksort

MÉTODOS DE CLASSIFICAÇÃO EM MEMÓRIA PRIMÁRIA. George Gomes Cabral

Algoritmos de Ordenação

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort.

Bubble Sort. Tempo total O(n 2 )

Análise de Algoritmos Algoritmos de Ordenação

Heapsort ordenação por árvore de seleção

Bucketsort. CLRS sec 8.4. Algoritmos p. 1

Heapsort ordenação por árvore de seleção

Aula 19: Métodos eficientes de ordenação

Estruturas de Dados 2

Aula 12 Métodos de Classificação: - Classificação por Inserção Direta - Classificação por Seleção Direta

Algoritmos de Ordenação

Ordenação em Tempo Linear. Leitura: Cormen Capítulo 8

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

Métodos de Ordenação Parte I

Métodos de ordenação. Bubble sort:

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

Projeto e Análise de Algoritmos

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II

Ordenação e Busca em Arquivos

Algoritmos de Ordenação

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Tópico 5 Algoritmos de Ordenação. Parte II - métodos de ordenação: counting sort, radix sort e bucket sort.

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO EM TEMPO LINEAR

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Análise e Complexidade de Algoritmos

Algoritmos e Estrutura de Dados

Análise de algoritmos

Métodos de Classificação

O PROFESSOR ADVERTE: SLIDES NÃO DEVEM SER UTILIZADOS COMO ÚNICA FONTE PARA ESTUDAR OS CONTEÚDOS MINISTRADOS. PROCURE CONSULTAR, PELO MENOS, A

Análise de Algoritmos

Ordenação. Prof. Jonas Potros

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Edital de Seleção 055/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Algoritmo MergeSort. Estrutura de Dados II Prof Jairo Francisco de Souza

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Breve Introdução à Complexidade Assintótica de Algoritmos Letícia Rodrigues Bueno

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa

INF111 Programação II Aulas 11, 12, 13 Ordenação

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

Extra- Algoritmos de Ordenação

O mais leve e o mais pesado Algoritmos de Ordenação

ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão

Algoritmos de Ordenação

Memória secundária. Memória secundária

Algoritmos e Estrutura de dados II. Fila de Prioridade e Heaps

PESQUISA EM INFORMÁTICA -COMO ESCREVER O TEXTO. Prof. Angelo Augusto Frozza, M.Sc.

Introdução a Algoritmos Parte 09

Análise e Complexidade de Algoritmos

Processamento Cosequencial: Ordenação Interna e Externa. Thiago A. S. Pardo Leandro C. Cintra M.C.F. de Oliveira Cristina D. A.

QuickSort. Estrutura de Dados II Jairo Francisco de Souza

Classificação por Particionamento

Transcrição:

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Tópicos Introdução Ordenação por bolha (bubble sort) Ordenação por inserção (insertion sort) Ordenação por intercalação (mergesort) Ordenação rápida (quicksort) Ordenação em heap (heapsort) Limite inferior para algoritmos de ordenação Exercícios

Introdução Ordenação: problema que aparece como préprocessamento de um grande número de aplicações Ex.: Agilizar busca, listar candidatos aprovados em concurso por nome (ou número de inscrição/pontuação), apresentar cheques processados por número (ou data de compensação), etc. Problema da ordenação Entrada: seqüência de n números <a 1, a 2,..., a n > Saída: permutação <a 1, a 2,..., a n >, onde a 1 a 2... a n

Introdução Conceitos: Ordenação no local (in place): quantidade de memória temporária exigida é constante Ordenação estável: ao término, elementos iguais estão na mesma ordem em que estavam na entrada Existem diversos algoritmos: alguns melhores que outros em determinadas situações Fatores a considerar: complexidade de tempo, quantidade de dados, quantidade de memória exigida, simplicidade de implementação

Ordenação por bolha (bubble sort) Método bastante simples e difundido Funcionamento: Percorrer vetor do início ao fim diversas vezes Comparar elementos consecutivos L[j] e L[j+1] Trocá-los sempre que estiverem fora de ordem, isto é, L[j] > L[j+1 Intuitivamente, a cada percurso do início ao fim do vetor, o maior elemento ainda não ordenado vai para o lugar correto São necessárias até n-1 iterações

Ordenação por bolha (bubble sort) Algoritmo: Complexidade: O(n 2 ) em qualquer caso Pode fazer muitas comparações desnecessárias (ex.: vetor já ordenado)

Ordenação por bolha (bubble sort) Duas melhorias podem ser feitas: Elementos já posicionado no final do vetor (maiores) não precisam ser comparados: estão na posição correta Se não houver nenhuma troca durante uma iteração i, o vetor já está ordenado Algoritmo é encerrado

Ordenação por bolha (bubble sort) Algoritmo melhorado:

Ordenação por bolha (bubble sort) Complexidade do algoritmo melhorado: Pior caso: O(n 2 ) Melhor caso: O(n) Exemplo de execução:

Ordenação por inserção (insertion sort) Método semelhante à inserção de uma nova carta em um conjunto de cartas já ordenadas Funcionamento: L[1..1] é um subvetor já ordenado Insira L[2] na posição correta em L[1..1] Insira L[3] na posição correta em L[1..2] Insira L[4] na posição correta em L[1..3]... Insira L[n] na posição correta em L[1..n-1]

Ordenação por inserção (insertion sort) Algoritmo: Complexidade varia de O(n) a O(n 2 )

Ordenação por inserção (insertion sort) Exemplo de execução:

Ordenação por intercalação (mergesort) Método que consiste em intercalar duas listas ordenadas Funcionamento: Algoritmo divide, recursivamente, lista de entrada de tamanho n > 1 em duas de tamanho n/2 Na volta da recursão, listas ordenadas são intercaladas, duas a duas: A partir das listas de tamanho 1 (portanto, ordenadas) são construídas listas de tamanho 2 ordenadas Listas ordenadas maiores são construídas através da intercalação de listas menores já ordenadas

Ordenação por intercalação (mergesort) Procedimento intercalar: Entrada: duas listas no vetor L L[ini1..ini2-1] e L[ini2..fim2] Saída em L[ini1..fim2] Uso de vetor temporário Tmp Complexidade de tempo: O(n), onde n é a soma do tamanho das listas de entrada

Ordenação por intercalação (mergesort) Exemplo de intercalação:

Ordenação por intercalação (mergesort) Algoritmo mergesort: Chamada externa: mergesort(1, n)

Ordenação por intercalação (mergesort) Exemplo de execução (volta da recursão):

Ordenação por intercalação (mergesort) Complexidade de tempo: (n lg n) em qualquer caso

Ordenação por intercalação (mergesort) Considerações sobre Mergesort: Um dos melhores algoritmos do ponto de vista téorico Não faz ordenação no local: gasta (n) em memória temporária Prejudica uso na prática

Ordenação rápida (quicksort) Quicksort: um dos métodos mais eficientes na prática Teoricamente: pior que mergesort e heapsort Ordenação recursiva de lista L com n elementos: Se n = 0 ou n = 1, então a lista está ordenada Escolha qualquer elemento x de L: pivô Separe L {x} em dois conjuntos disjuntos S 1 e S 2: S 1 : elementos de L menores que x S 2 : elementos de L maiores ou iguais a x Ordene recursivamente S 1 e S 2 Lista ordenada: S 1, x, S 2

Ordenação rápida (quicksort) Pivô escolhido influencia muito desempenho Pivô ideal (mediana) deixa S 1 e S 2 com tamanhos similares Pivô ruim (menor ou menor elemento): deixa um dos conjuntos vazio e o outro com n-1 elementos Exemplos de escolha de pivô: Primeiro/último elemento de L: boa para L aleatória Se estiver ordenada/inversamente ordenada: pivô ruim Escolha aleatória de pivô: pesa no tempo de execução Escolha da mediana de L: melhor possível, mas custosa Mediana de três (primeiro, último, central): bons resultados práticos mas pode render particionamento ruim

Ordenação rápida (quicksort) Exemplo de particionamento:

Ordenação rápida (quicksort) Complexidade do algoritmo: Pior caso: (n 2 ) Melhor caso: (n log n) Caso médio: (n log n) Quicksort é in place

Ordenação em heap (heapsort) Heapsort realiza ordenação usando heap de máximo Algoritmo: Complexidade: O(n lg n)

Limite inferior para algoritmos de ordenação Limite inferior para algoritmos de ordenação por comparação pode ser obtido usando uma árvore de decisão Árvore de decisão: árvore binária onde cada nó representa uma comparação entre dois elementos Varia de acordo com algoritmo e entrada Uma ordenação é obtida através de um caminho da raiz até uma folha Maior caminho (mais comparações): pior caso Menor caminho (menos comparações): melhor caso

Limite inferior para algoritmos de ordenação Árvore de decisão para bubble sort com três elementos:

Limite inferior para algoritmos de ordenação Seja algoritmo de ordenação por comparação com entrada de tamanho n A saída pode ser qualquer uma das n! possíveis permutações dos elementos de entrada Idepende do algoritmo usado A árvore de decisão deve conter n! folhas Observação: uma árvore binária possui, no máximo, 2 h-1 folhas Então a árvore de decisão possui n! 2 h-1, o que implica em h lg(n!) + 1 = (n lg n) No pior caso, qualquer algoritmo é (n lg n)

Exercícios Livro Szwarcfiter: 7.1 a 7.13