Métodos de Ordenação

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

Extra- Algoritmos de Ordenação

Ordenação. Prof. Jonas Potros

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

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

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

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Ordenação. Última alteração: 26 de Março de Transparências elaboradas por Fabiano C. Botelho e Nivio Ziviani

ALGORITMOS DE ORDENAÇÃO

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

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

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

BCC202 - Estrutura de Dados I

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

Banco de Dados. Métodos de Ordenação de Dados. Prof. Walteno Martins Parreira Jr

5. Algoritmos de Ordenação

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

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

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;

Estruturas de Dados Algoritmos de Ordenação

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

Métodos de Ordenação Parte I

Ordenação. Última alteração: 10 de Outubro de Transparências elaboradas por Fabiano C. Botelho, Leonardo Rocha, Leonardo Mata e Nivio Ziviani

Carlos Eduardo Batista. Centro de Informática - UFPB

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

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

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

Métodos de Ordenação Parte 3

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

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

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

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

BCC202 - Estrutura de Dados I

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

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

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

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

BCC202 - Estrutura de Dados I

Introdução a Algoritmos Parte 09

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

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

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

Métodos de Ordenação Parte 4

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

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

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

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

Algoritmos e Estruturas de Dados II. Ordenação

Ordenação por Seleção Métodos de Ordenação Parte 3

Métodos de Ordenação

Ordenação por Intercalação Métodos de Ordenação Parte 4

Métodos de Classificação

Conteúdo. Busca Seqüencial. Busca Binária. Algoritmos de Ordenação e Busca e sua Análise de Complexidade. Alneu de Andrade Lopes Rosane Minghim

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

Heapsort é um método de ordenação cujo princípio de funcionamento é o mesmo utilizado para a ordenação por seleção.

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

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

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

Classificação por Particionamento

Algoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira Anilton Joaquim da Silva

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

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

Estruturas de Dados 2

Centro de Informá-ca Universidade Federal de Pernambuco. Vinicius Cardoso Garcia 2011 Vinicius Cardoso Garcia

Algoritmos de Ordenação

Classificação Externa: Geração de Partições Classificadas

Análise de Algoritmos Algoritmos de Ordenação

USP - ICMC - SSC SSC o. Semestre Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Automação ]

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

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

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

BCC202 - Estrutura de Dados I

Bubble Sort. Tempo total O(n 2 )

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2009/2010

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

Carlos Eduardo Batista. Centro de Informática - UFPB

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

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

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

Classificação por Inserção - insertion sort

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

Método de ordenação - objetivos:

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

QuickSort. Estrutura de Dados II Jairo Francisco de Souza

Métodos de Ordenação. Ordenação Interna. Ordenação Interna

Métodos de Ordenação

Métodos de Busca Parte 1

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

BUSCA EM ARRAYS. Prof. André Backes. Ato de procurar por um elemento em um conjunto de dados

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

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

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

Bucketsort. CLRS sec 8.4. Algoritmos p. 1

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

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

Transcrição:

Métodos de Ordenação

Conceitos básicos sobre ordenação Ordenar corresponde ao processo de rearranjar um conjunto de objetos em uma ordem específica. Objetivo da ordenação: facilitar a recuperação posterior de elementos do conjunto ordenado. Os algoritmos trabalham sobre os registros de um arquivo.

Conceitos básicos sobre ordenação Classificação dos métodos de ordenação: Ordenação interna: arquivo a ser ordenado cabe todo na memória principal. Ordenação externa: arquivo a ser ordenado não cabe na memória principal. Diferenças entre os métodos: Em um método de ordenação interna, qualquer registro pode ser imediatamente acessado. Em um método de ordenação externa, os registros são acessados sequencialmente ou em grandes blocos.

Conceitos básicos sobre ordenação Notação Sejam os itens: a1; a2;... ; an. Ordenar consiste em permutar estes itens em uma ordem ak1;ak2;... ; akn tal que, dada uma função de ordenação f, temse a seguinte relação: ( f(akn f(ak1) < f(ak2) < : : : < A função de ordenação é definida sobre o campo chave. A relação < deve satisfazer as condições: Apenas uma das três condições é verdadeira: a < b, a = b, a > b. Se a < b e b < c então a < c.

Conceitos básicos sobre ordenação Qualquer tipo de chave sobre o qual exista uma regra de ordenação bemdefinida pode ser utilizada. Um método de ordenação é estável se a ordem relativa dos itens com chaves iguais não se altera durante a ordenação. Na escolha de um algoritmo de ordenação interna deve ser considerado o tempo gasto pela ordenação. Sendo n o número registros no arquivo, as medidas de complexidade relevantes são: Número de comparações C(n) entre chaves. Número de movimentações M(n) de itens do arquivo.

Ordenação direta e indireta Ordenação direta ou por registros: Dado um vetor para ordenação, percorre-se cada elemento inserindo-o na posição ordenada. Ordenação indireta ou por endereço: Feita numa tabela de ponteiros, não há troca de registros, apenas de apontadores. Ordenação direta Exemplo: Vetor antes da ordenação Vetor após a ordenação 0 11 1 20 2 6 3 12 0 6 1 11 2 12 3 20

Ordenação direta e indireta Ordenação indireta Exemplo: Vetor antes da ordenação Vetor após a ordenação 1 200 11 1 204 11 2 202 20 2 200 20 3 204 6 3 206 6 4 206 12 4 202 12

Ordenação Interna Os métodos de ordenação interna são classificados em dois tipos: Métodos Simples: mais recomendados para conjuntos pequenos de dados. Usam mais comparações, produzem códigos menores e mais simples; Métodos Eficientes ou Sofisticados: adequados para conjuntos maiores de dados. Usam menos comparações, produzem códigos mais complexos e com muitos detalhes.

Ordenação Interna ( Sort Ordenação por Seleção (Selection ( Sort Ordenação por Inserção (Insertion ( Sort Ordenação por Seleção e Troca (Bubble Métodos Simples Ordenação por Inserção através de incrementos decrescentes ( ShellSort ) ( QuickSort ) Ordenação por Particionamento ( HeapSort ) Ordenação por Árvores Métodos Eficientes

Selection Sort Ideia do Selection Sort é: a cada passagem pelo vetor, selecionar o menor elemento e colocar este elemento o mais a esquerda possível. Um algoritmo de ordenação bastante simples. Recomendado para conjuntos pequenos. Etapas: Procurar menor elemento e trocar com o elemento na 1ª posição; Procurar o 2 menor elemento e trocar com o elemento na 2 ª posição; Proceder assim até ordenação estar completa.

Selection Sort Exemplo 0 1 2 3 4 5 Chaves iniciais 44 12 55 42 94 18 i = 0 12 44 55 42 94 18 i = 1 12 18 55 42 94 44 i = 2 12 18 42 55 94 44 i = 3 12 18 42 44 94 55 i = 4 12 18 42 44 55 94

Selection Sort Vantagens Custo linear no tamanho da entrada para o número de movimentos de registros. É o algoritmo a ser utilizado para arquivos com registros muito grandes. É muito interessante para arquivos pequenos. Desvantagens O fato de o conjunto já estar ordenado não ajuda em nada (o número de ( mesmo comparações continua o O algoritmo não é estável, isto é, os registros com chaves iguais nem sempre irão manter a mesma posição relativa de antes do início da ordenação

Insertion Sort Ideia do insertion Sort: considerar os elementos um a um e inserilos em seu lugar entre os elementos já tratados (mantendo essa ordenação). Ex: ordenar cartas de jogar. Inserção implica em arranjar novo espaço. Mover um número elevado de elementos uma posição para a direita. Elementos à esquerda do índice corrente estão ordenados mas não necessariamente na sua posição final: podem ainda sofrer deslocamento à direita para dar lugar a elementos menores encontrados posteriormente

Insertion Sort Etapas: 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.

Insertion Sort Exemplo 0 1 2 3 4 5 Chaves iniciais 44 12 55 42 94 18 i = 1 12 44 55 42 94 18 i = 2 12 44 55 42 94 18 i = 3 12 42 44 55 94 18 i = 4 12 42 44 55 94 18 i = 5 12 18 42 44 55 94

Insertion Sort O número mínimo de comparações e movimentos ocorre quando os itens estão originalmente em ordem. O número máximo ocorre quando os itens estão originalmente na ordem reversa. É 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. O algoritmo de ordenação por inserção é estável pois deixa os registros com chaves iguais na mesma posição relativa.

Insertion x Selection Arquivos já ordenados: ( linear Insertion: algoritmo descobre imediatamente que cada item já está no seu lugar (custo ( quadrático Selection: ordem no arquivo não ajuda (custo Adicionar alguns itens a um arquivo já ordenado: Insertion sort é o método a ser usado em arquivos quase ordenados Comparações: Insertion tem um número médio de comparações que é aproximadamente a metade do Selection Movimentações: Selection tem um número médio de comparações que cresce linearmente com n, enquanto que a média de movimentações no Insertion cresce com o quadrado de n.

Bubble Sort Idéia: fazer múltiplas passagens pelos dados trocando de cada vez dois elementos adjacentes que estejam fora de ordem, até não haver mais trocas. supostamente muito fácil de implementar. usualmente mais lento que os dois métodos anteriores. Talvez o algoritmo mais utilizado por ser o mais conhecido. Etapas Percorra o vetor inteiro comparando elementos adjacentes (dois a dois). Troque as posições dos elementos se eles estiverem fora de ordem. Repita os dois passos anteriores até que não haja mais trocas.

Bubble Sort 0 1 2 3 4 5 Exemplo Chaves iniciais 44 12 55 42 94 18 1ª passagem 12 44 55 42 94 18 12 44 42 55 94 18 12 42 44 55 18 94 2ª passagem 3ª passagem 4ª passagem 12 42 44 18 55 94 12 42 18 44 55 94 12 18 42 44 55 94

Bubble Sort Método muito simples, mas de custo elevado. Adequado apenas para pequenos arquivos. Ruim se os registros são muito grandes. Método extremamente lento: só faz comparações entre posições adjacentes É o método mais ineficiente entre os métodos simples Melhor caso: vetor já ordenado Pior caso: vetor de entrada em ordem reversa

Shellsort Criado por Donald Shell em 1959, o Shellsort é o mais eficiente algoritmo de classificação dentre os de complexidade quadrática. É uma extensão do algoritmo Insertion sort. Basicamente o algoritmo passa várias vezes pela lista dividindo o grupo maior em menores. Nos grupos menores é aplicado o método Insertion sort.

Shellsort O Shellsort explora o fato de que o Insertion sort apresenta desempenho aceitável quando o número de chaves é pequeno e/ou estas já possuem uma ordenação parcial. Difere do Insertion sort pelo fato de que considera apenas um segmento classificado e inserindo ordenadamente todos os demais elementos. Vários segmentos são considerados inicialmente, sendo cada elemento inserido seletivamente em um deles.

Shellsort Os itens separados de h posições são rearranjados. Todo h-ésimo item leva a uma sequência ordenada. Tal seqüência é dita estar h -ordenada. Algoritmo Para um h inicial, os segmentos assim formados são então classificados pelo Insertion Sort. O incremento h é diminuído (a metade do valor anterior), dando origem a novos segmentos, os quais também serão classificados pelo Insertion Sort. Este processo se repete até que h seja igual a 1. Quando h = 1 Shellsort corresponde ao algoritmo Insertion Sort.

Exemplo: Shellsort

Shellsort ( existe A sequência ótima não foi ainda descoberta(se é que A análise do algoritmo é desconhecida Ninguém encontrou a fórmula que define a complexidade Referência: Nívio Ziviani

Shellsort Vantagens rápido/eficiente código reduzido ( itens boa opção para arquivos pequenos e médios (±10.000 aceitável para elevados volumes de dados por ser um método eficiente, pode ser utilizado em sistemas que não dispõe de muitos recursos de memória O seu tempo de execução é sensível à ordem inicial do programa, o que lhe garante um bom uso em seqüências já ordenadas.( sort (herdado do método Insertion

Quicksort Idéia do Quicksort : dividir o problema de ordenar um conjunto com n itens em dois problemas menores. Os problemas menores são ordenados independentemente. Os resultados são combinados para produzir a solução final. É o algoritmo de ordenação interna mais rápido que se conhece para uma ampla variedade de situações.

Quicksort A parte mais delicada do método é relativa à divisão da partição. O vetor v[esq..dir ] é rearranjado por meio da escolha arbitrária de um pivô x. O vetor v é particionado em duas partes: A parte esquerda com chaves menores ou iguais a x. A parte direita com chaves maiores ou iguais a x.

Quicksort Algoritmo Escolher um item do vetor e colocar este valor em x (pivô x) Percorrer o vetor a partir da esquerda até que A[i] x seja encontrado Percorrer o vetor a partir da direita até que A[j] x seja encontrado Trocar v[i] com v[j]. Continuar este processo até os apontadores i e j se cruzarem. Ao final, o vetor A[esq..dir ] está particionado de tal forma que: Os itens em A[Esq], A[Esq+1],..., A[j] são menores ou iguais a x Os itens em A[i], A[i+1],..., A[Dir] são maiores ou iguais a x

Quicksort Pseudocódigo procedimento QuickSort(X[ ], IniVet, FimVet) var i, j, pivo início i <- IniVet j <- FimVet pivo <- X[(IniVet + FimVet) div 2] repita enquanto (X[i] < pivo) faça início i <- i + 1 fim enquanto (X[j] > pivo) faça início j <- j - 1 fim se (i <= j) então início swap(x[i], X[j]) i <- i + 1 j <- j - 1 fim até_que (i > j) se (j > IniVet) então QuickSort(X, IniVet, j) se (i < FimVet) então QuickSort(X, i, FimVet) fim

Quicksort O pior caso ocorre quando, sistematicamente, o pivô é escolhido como sendo um dos extremos de um arquivo já ordenado. Isto faz com que o procedimento Ordena seja chamado recursivamente n vezes, eliminando apenas um item em cada chamada. O pior caso pode ser evitado empregando pequenas modificações no algoritmo. Para isso basta escolher três itens quaisquer do vetor e usar a mediana dos três como pivô.

Heapsort Utiliza uma heap para organizar informação durante a execução do algoritmo. O custo da ordenação é reduzido através da construção da heap. Possui o mesmo princípio de funcionamento da ordenação por seleção. Idéia do HeapSort: Construir a heap. Trocar o item na posição 1 do vetor (raiz da heap) com o item da posição n. Reconstituir a heap para os itens v[1], v[2],..., v[n 1]. Repetir os passos 2 e 3 com os n 1 itens restantes, depois com os n 2, até que reste apenas um item.

Heapsort Construção da Heap: 0 1 2 3 4 5 6 18 20 15 28 11 22 26 28 20 26 18 11 15 22 0 1 2 3 4 5 6 28 20 26 18 11 15 22

Heapsort 1. Trocar o elemento da raiz (28) da heap e colocá-lo na posição do elemento n (22). 2. Reorganizar a heap excluindo o elemento 28. 22 26 20 26 20 22 18 11 15 28 18 11 15 28

Heapsort 1. Trocar o elemento da raiz (26) da heap e colocá-lo na posição do elemento n-1 (15). 2. Reorganizar a heap excluindo os elementos 26 e 28. 15 22 20 22 20 15 18 11 26 28 18 11 26 28

Heapsort 1. Trocar o elemento da raiz (22) da heap e colocá-lo na posição do elemento n-2 (11). 2. Reorganizar a heap excluindo os elementos 22,26 e 28. 11 20 20 15 18 15 18 22 26 28 11 22 26 28

Heapsort 1. Trocar o elemento da raiz (20) da heap e colocá-lo na posição do elemento n-3 (11). 2. Reorganizar a heap excluindo os elementos 20, 22, 26 e 28. 11 18 18 15 11 15 20 22 26 28 20 22 26 28

Heapsort 1. Trocar o elemento da raiz (18) da heap e colocá-lo na posição do elemento n-5 (15). 2. Reorganizar a heap excluindo os elementos 18, 20, 22, 26 e 28. 15 15 11 18 11 18 20 22 26 28 20 22 26 28

Heapsort 1. Trocar o elemento da raiz (15) da heap e colocá-lo na posição do elemento n-6 (11). 11 11 15 18 15 18 20 22 26 28 20 22 26 28 0 1 2 3 4 5 6 11 15 18 20 22 26 28

Considerações O Heapsort não é recomendado para arquivos com poucos registros porque: O tempo necessário para construir a heap é alto O anel interno do algoritmo é bastante complexo, se comparado com o anel interno do Quicksort O Quicksort é, em média, cerca de duas vezes mais rápido que o Heapsort. O método não é estável. A diferença do comportamento do algoritmo entre o melhor caso e o pior caso é pequena.

Comparação entre os Métodos de Ordenação O Quicksort é o mais rápido para todos os tamanhos aleatórios experimentados. A relação Heapsort/Quicksort se mantém constante para todos os tamanhos, sendo o Heapsort mais lento. A relação Shellsort/Quicksort aumenta à medida que o número de elementos aumenta; O Insertion sort é o mais rápido para qualquer tamanho se os elementos estão ordenados; Ele é o mais lento para qualquer tamanho se os elementos estão em ordem descendente;

Comparação entre os Métodos de Ordenação O Shellsort é bastante sensível à ordenação ascendente ou descendente da entrada; O Quicksort é sensível à ordenação ascendente ou descendente da entrada. O Heapsort praticamente não é sensível à ordenação da entrada.

Comparação entre os Métodos de Ordenação Selection Sort. É vantajoso quanto ao número de movimentos de registros Deve ser usado para arquivos com registros muito grandes, desde que o tamanho do arquivo não exceda 1.000 elementos. Shellsort É o método a ser escolhido para a maioria das aplicações por ser muito eficiente para arquivos de tamanho moderado. Mesmo para arquivos grandes, o método é cerca de apenas duas vezes mais lento do que o Quicksort. Sua implementação é simples e geralmente resulta em um programa pequeno. Quando encontra um arquivo parcialmente ordenado trabalha menos.

Comparação entre os Métodos de Ordenação Quicksort É o algoritmo mais eficiente que existe para uma grande variedade de situações. O algoritmo é recursivo, o que demanda memória adicional. O principal cuidado a ser tomado é com relação à escolha do pivô. A escolha do elemento do meio do arranjo melhora muito o desempenho quando o arquivo está total ou parcialmente ordenado.

Comparação entre os Métodos de Ordenação Heapsort Apesar de ser cerca de duas vezes mais lento do que o Quicksort, não necessita de nenhuma memória adicional. Aplicações que não podem tolerar eventuais variações no tempo esperado de execução devem usar o Heapsort.

Exercícios Implementar os algoritmos abaixo para ordenar uma lista encadeada. Selection Sort Insertion-Sort Bubble-Sort. Shell-Sort Quick-Sort.