Algoritmos de ordenação: Inserção e Shellsort

Documentos relacionados
Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort. Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional

BCC202 - Estrutura de Dados I

Algoritmos de ordenação: Bucketsort, Radixsort e Seleção

Métodos de Ordenação

Extra- Algoritmos de Ordenação

Projeto e Análise de Algoritmos

BCC202 - Estrutura de Dados I

Ordenação. Prof. Jonas Potros

METODOS DE ORDENAÇÃO: A IMPORTÂNCIA DA ESCOLHA DO MÉTODO CORRETO

Métodos de Ordenação Parte I

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

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

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

Solução de Recorrências

Ordenação. Ordenação. Introdução - Conceitos Básicos. Introdução - Conceitos Básicos

Técnicas de análise de algoritmos

5. Algoritmos de Ordenação

Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Algoritmos de Busca. Profº Carlos Alberto T. Batista

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

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

Os métodos de ordenação que ordenam os elementos in situ podem ser classificados em três principais categorias:

Classes, Herança e Interfaces

Ordenação. Última alteração: 31 de Agosto de Transparências elaboradas por Charles Ornelas Almeida, Israel Guerra e Nivio Ziviani

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

Teoria da Computação Aula 9 Noções de Complexidade

Análise e Comparação de Algoritmos Implementados em Java

2. Ordenação por Seleção

Método BubbleSort. Estrutura de Dados II Prof Jairo Francisco de Souza

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

ALGORITMOS DE ORDENAÇÃO

Classificação por Seleção - selection sort

Estrutura de Dados. Plano de Ensino. Vilson Heck Junior. Campus Lages. Instituto Federal de Santa Catarina

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;

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

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

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

Projeto e Análise de Algoritmos

Métodos de Classificação

ANÁLISE SOBRE ALGUNS MÉTODOS DE ORDENAÇÃO DE LISTAS: SELEÇÃO, INSERÇÃO E SHELLSORT

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

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

BCC202 - Estrutura de Dados I

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Existem duas categorias de algoritmos de ordenação: Os algoritmos de ordenação são avaliados de acordo com os seguintes critérios:

Algoritmos de Ordenação: Tempo Linear

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

Métodos de Ordenação Parte 2

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

ORDENAÇÃO DE ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

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

Algoritmos e Estruturas de Dados I Aula 06 Custos de um algoritmo

Arquivos Sequenciais Ordenados Fisicamente

Algoritmos e Estruturas de Dados II. Ordenação

Estruturas de Dados. Profº Carlos Alberto Teixeira Batista

MCTA028 Programação Estruturada Aula 20 Exercícios de custos de um algoritmo

Regras para evitar ciclagem

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica. Prof. Humberto Brandão

Introdução à Ciência da Computação II

Programação de Computadores Ordenação de Arranjos

Algoritmos e Estruturas de Dados LEE 2013/2014. popular devido à facilidade de implementação e eficiência

Projeto e Análise de Algoritmos

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Introdução à Ciência da Computação II

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

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Análise do desempenho computacional dos métodos Inserção Direta, Bolha, ShellSort e ComboSort

Introdução Métodos de Busca Parte 1

Transcrição:

CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Algoritmos de ordenação: Inserção e Shellsort Algoritmos e Estruturas de Dados I Slides adaptados dos slides do livro texto (Ziviani) e dos slides de aula dos professores Davi Menotti (DECOM/UFOP) e Antônio Alfredo Ferreira Loureiro (DCC/UFMG). Natália Batista https://sites.google.com/site/nataliacefetmg/ nataliabatista@decom.cefetmg.br 2º semestre/ 2017

Algoritmo utilizado pelo jogador de cartas: As cartas são ordenadas da esquerda para direita uma por uma. O jogador escolhe a segunda carta e verifica se ela deve ficar antes ou na posição que está. Depois a terceira carta é classificada, deslocando-a até sua correta posição. O jogador realiza esse procedimento até ordenar todas as cartas Fonte:http://cae.ucb.br/conteudo/programar/l abor1/new_ordenacaoepesquisa.html 2

Algoritmo: Em cada passo a partir de i=2 faça: Selecione o i-ésimo item da sequência fonte. Coloque-o no lugar apropriado na sequência destino de acordo com o critério de ordenação. 3

O método é ilustrado abaixo: As chaves em negrito representam a sequência destino. 4

Considerações sobre o algoritmo: O processo de ordenação pode ser terminado pelas condições: Um item com chave menor que o item em consideração é encontrado. O final da sequência destino é atingido à esquerda. Solução: utilizar um registro sentinela na posição zero do vetor. 5

6

Sentinela: na posição zero do vetor é colocado o próprio registro em consideração. 0 1 2 3 4 5 6 Chaves iniciais O R D E N A i = 2 R O R D E N A i = 3 D D O R E N A i = 4 E D E O R N A i = 5 N D E N O R A i = 6 A A D E N O R 7

Seja C(n) a função que conta o número de comparações. No anel mais interno (while), na i-ésima iteração, o valor de C i é: 8

Melhor caso: vetor já está ordenado. C i (n) = 1 0 1 2 3 4 5 6 Chaves iniciais A D E N O R i = 2 D A D E N O R i = 3 E A D E N O R i = 4 N A D E N O R i = 5 O A D E N O R i = 6 R A D E N O R 9

Pior caso: vetor em ordem decrescente. C i (n) = i 0 1 2 3 4 5 6 Chaves iniciais R O N E D A i = 2 O O R N E D A i = 3 N N O R E D A i = 4 E E N O R D A i = 5 D D E N O R A i = 6 A A D E N O R 10

Caso médio: assume que todas as permutações de n são igualmente prováveis. 11

O anel mais externo (for) realiza n-1 iterações: Logo, o número de comparações é igual a: 12

Seja M (n) a função que conta o número de movimentações de registros. O número de movimentações na i-ésima iteração é: 13

M O V I M E N T A Ç Õ E S C i (n)-1: subtrai 1 pois faz uma comparação a mais para sair do while. 14

O número total de movimentações é calculado por: 15

Exemplo de pior caso: 16

O número mínimo de comparações e movimentos ocorre quando os itens estão originalmente em ordem. Para arquivos já ordenados o algoritmo descobre, a um custo O(n), que cada item já está no seu lugar. O número máximo ocorre quando os itens estão originalmente na ordem reversa. 17

É o método a ser utilizado quando o arquivo está quase ordenado. É um bom método quando se deseja adicionar uns poucos itens a um arquivo ordenado, pois o custo é linear. O algoritmo de ordenação por inserção é estável. 18

2. Shellsort Proposto por Shell em 1959. É uma extensão do algoritmo de ordenação por inserção. Problema com o algoritmo de ordenação por inserção: Troca itens adjacentes para determinar o ponto de inserção. São efetuadas n 1 comparações e movimentações para encontrar ponto de inserção quando o menor item está na posição mais à direita no vetor. O método de Shell contorna este problema permitindo trocas de registros distantes um do outro. 19

2. Shellsort Itens que estão separados h posições são rearranjados de tal forma que todo h-ésimo item leva a uma sequência ordenada. Ordenação por inserção através de incrementos decrescentes. 20

2. Shellsort Exemplo de utilização: Posições 1 e 5 / 2 e 6 Posições 1, 3 e 5 / 2, 4 e 6 Corresponde ao inserção. Observação: usando a sequência h = 1, 2, 4. 21

2. Shellsort Como escolher o valor de h: h(s) = 1, para s = 1. h(s) = 3*h(s - 1) + 1, para s > 1. A sequência para h corresponde a 1, 4, 13, 40, 121, 364, 1.093, 3.280,... Knuth (1973) mostrou experimentalmente que esta sequência é difícil de ser batida por mais de 20% em eficiência. 22

2. Shellsort 23

2. Shellsort Quando h = 1, o Shellsort corresponde ao algoritmo de inserção. 24

2. Shellsort Porque o Shellsort é mais eficiente? A razão da eficiência do algoritmo ainda não é conhecida. Sabe-se que cada incremento não deve ser múltiplo do anterior. Várias sequências para h foram experimentadas. 25

2. Shellsort A implementação do Shellsort não utiliza registros sentinelas. Seriam necessários h registros sentinelas, uma para cada h-ordenação. 26

2. Shellsort Conjecturas referente ao número de comparações para a sequência de Knuth: 27

2. Shellsort Vantagens: Shellsort é uma ótima opção para arquivos de tamanho moderado (± 10000 itens). Sua implementação é simples e requer uma quantidade de código pequena. Desvantagens: O tempo de execução do algoritmo é sensível à ordem inicial do arquivo. O método não é estável. 28

Referências Ziviani, N. Projeto de algoritmos: com implementações em Java e C++. 3 ed. Editora Cengage Learning, 2007. Goodrich, M. T. e Tamassia, R. Estruturas de Dados & Algoritmos. Editora Bookman, 2013. Loureiro, A. A. F. Projeto e Análise de Algoritmos: Análise de Complexidade. Notas de aula, 2010. Menotti, D. Ordenação. Notas de aula, 2009. 29