Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Ordenação , Notas de estudo de Informática

Apostila de Ordenação Transparências elaboradas por Fabiano C. Botelho, Leonardo Rocha, Leonardo Mata e Nivio Ziviani

Tipologia: Notas de estudo

2013

Compartilhado em 19/03/2013

daniel-radd-2
daniel-radd-2 🇧🇷

4.5

(2)

6 documentos

1 / 131

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Ordenação
Última alteração: 10 de Outubro de 2006
Transparências elaboradas por Fabiano C. Botelho, Leonardo Rocha, Leo-
nardo Mata e Nivio Ziviani
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Ordenação e outras Notas de estudo em PDF para Informática, somente na Docsity!

Ordenação

Última alteração: 10 de Outubro de 2006

∗Transparências elaboradas por Fabiano C. Botelho, Leonardo Rocha, Leo- nardo Mata e Nivio Ziviani

Projeto de Algoritmos – Cap.4 Ordenação 1

Ordenação

  • Introdução - Conceitos Básicos
  • Ordenação Interna - Ordenação por Seleção - Ordenação por Inserção - Shellsort - Quicksort - Heapsort - Ordenação Parcial ∗ Seleção Parcial ∗ Inserção Parcial ∗ Heapsort Parcial ∗ Quicksort Parcial
  • Ordenação Externa - Intercalação Balanceada de Vários Caminhos - Implementação por meio de Seleção por Substituição - Considerações Práticas - Intercalação Polifásica - Quicksort Externo

Projeto de Algoritmos – Cap.4 Ordenação 3

Introdução - Conceitos Básicos

  • Exemplo de ordenação por distribuição: considere o problema de ordenar um baralho com 52 cartas na ordem: A < 2 < 3 < · · · < 10 < J < Q < K e ♣ < ♦ < ♥ < ♠.
  • Algoritmo:
    1. Distribuir as cartas abertas em treze montes: ases, dois, três,.. ., reis.
    2. Colete os montes na ordem especificada.
    3. Distribua novamente as cartas abertas em quatro montes: paus, ouros, copas e espadas.
    4. Colete os montes na ordem especificada.

Projeto de Algoritmos – Cap.4 Ordenação 4

Introdução - Conceitos Básicos

  • Métodos como o ilustrado são também conhecidos como ordenação digital , radixsort ou bucketsort.
  • O método não utiliza comparação entre chaves.
  • Uma das dificuldades de implementar este método está relacionada com o problema de lidar com cada monte.
  • Se para cada monte nós reservarmos uma área, então a demanda por memória extra pode tornar-se proibitiva.
  • O custo para ordenar um arquivo com n elementos é da ordem de O(n).
  • Notação utilizada nos algoritmos: - Os algoritmos trabalham sobre os registros de um arquivo. - Cada registro possui uma chave utilizada para controlar a ordenação. - Podem existir outros componentes em um registro.

Projeto de Algoritmos – Cap.4 Ordenação 6

Introdução - Conceitos Básicos

  • A classe MeuItem define o tipo de dados i nt para a chave e implementa os métodos compara, alteraChave e recuperaChave.
  • O método compara retorna um valor menor do que zero se a < b, um valor maior do que zero se a > b, e um valor igual a zero se a = b.

package cap4; import java. io. ∗ ; public class MeuItem implements Item { private int chave; / / outros componentes do registro

public MeuItem ( int chave ) { this .chave = chave ; }

public int compara ( Item i t ) { MeuItem item = (MeuItem) i t ; i f ( this .chave < item .chave) return −1; else i f ( this .chave > item .chave) return 1; return 0; } / / Continua na próxima transparência

Projeto de Algoritmos – Cap.4 Ordenação 7

Introdução - Conceitos Básicos

public void alteraChave ( Object chave) { Integer ch = ( Integer ) chave; this .chave = ch. intValue ( ) ; } public Object recuperaChave ( ) { return new Integer ( this .chave ) ; } }

  • Deve-se ampliar a interface Item sempre que houver necessidade de manipular a chave de um registro.
  • O método compara é sobrescrito para determinar como são comparados dois objetos da classe MeuItem.
  • Os métodos alteraChave e recuperaChave são sobrescritos para determinar como alterar e como recuperar o valor da chave de um objeto da classe MeuItem.

Projeto de Algoritmos – Cap.4 Ordenação 9

Introdução - Conceitos Básicos

  • 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 seqüencialmente ou em grandes blocos.

Projeto de Algoritmos – Cap.4 Ordenação – Seção 4.1 10

Ordenação Interna

  • 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.
  • O uso econômico da memória disponível é um requisito primordial na ordenação interna.
  • Métodos de ordenação in situ são os preferidos.
  • Métodos que utilizam listas encadeadas não são muito utilizados.
  • Métodos que fazem cópias dos itens a serem ordenados possuem menor importância.

Projeto de Algoritmos – Cap.4 Ordenação – Seção 4.1 12

Ordenação Interna

  • A classe mostrada a seguir apresenta os métodos de ordenação interna que serão estudados.
  • Utilizaremos um vetor v de registros do tipo Item e uma variável inteira n com o tamanho de v.
  • O vetor contém registros nas posições de 1 até n, e a 0 é utilizada para s entinelas.

package cap4. ordenacaointerna ; import cap4. Item ; / / vide transparência 6

public class Ordenacao { public static void selecao ( Item v [ ] , int n) public static void insercao ( Item v [ ] , int n) public static void shellsort ( Item v [ ] , int n) public static void quicksort ( Item v [ ] , int n) public static void heapsort ( Item v [ ] , int n) }

Projeto de Algoritmos – Cap.4 Ordenação – Seção 4.1.1 13

Ordenação por Seleção

  • Um dos algoritmos mais simples de ordenação.
  • Algoritmo: - Selecione o menor item do vetor. - Troque-o com o item da primeira posição do vetor. - Repita essas duas operações com os n − 1 itens restantes, depois com os n − 2 itens, até que reste apenas um elemento.
  • O método é ilustrado abaixo: 1 2 3 4 5 6

Chaves iniciais: O R D E N A i = 1 A R D E N O i = 2 A D R E N O i = 3 A D E R N O i = 4 A D E N R O i = 5 A D E N O R

  • As chaves em negrito sofreram uma troca entre si.

Projeto de Algoritmos – Cap.4 Ordenação – Seção 4.1.1 15

Ordenação por Seleção

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 arquivo já estar ordenado não ajuda em nada, pois o custo continua quadrático.
  • O algoritmo não é estável.

Projeto de Algoritmos – Cap.4 Ordenação – Seção 4.1.2 16

Ordenação por Inserção

  • Método preferido dos jogadores de cartas.
  • Algoritmo: - Em cada passo a partir de i=2 faça: ∗ Selecione o i-ésimo item da seqüência fonte. ∗ Coloque-o no lugar apropriado na seqüência destino de acordo com o critério de ordenação.
  • O método é ilustrado abaixo: 1 2 3 4 5 6

Chaves iniciais: O R D E N A i = 2 O R D E N A i = 3 D O R E N A i = 4 D E O R N A i = 5 D E N O R A i = 6 A D E N O R

  • As chaves em negrito representam a seqüência destino.

Projeto de Algoritmos – Cap.4 Ordenação – Seção 4.1.2 18

Ordenação por Inserção

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 seqüência destino é atingido à esquerda.
  • Solução: - Utilizar um registro sentinela na posição zero do vetor.

Projeto de Algoritmos – Cap.4 Ordenação – Seção 4.1.2 19

Ordenação por Inserção

Análise

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

melhor caso : Ci(n) = 1 pior caso : Ci(n) = i caso m´edio : Ci(n) = (^1) i (1 + 2 + · · · + i) = i+1 2

  • Assumindo que todas as permutações de n são igualmente prováveis no caso médio, temos:

melhor caso : C(n) = (1 + 1 + · · · + 1) = n − 1 pior caso : C(n) = (2 + 3 + · · · + n) = n 22 + n 2 −^1 caso m´edio : C(n) = 12 (3 + 4 + · · · + n + 1) = n^2 4 +^

3 n 4 −^1