Ordenação ??Cap.4Ordenação 1 Ordenação Introdução - Conceitos Básicos Ordenação Interna –

Embed Size (px)

Text of Ordenação ??Cap.4Ordenação 1 Ordenação Introdução - Conceitos Básicos Ordenação Interna...

Ordenao

ltima alterao: 26 de Maro de 2004

Transparncias elaboradas por Fabiano C. Botelho e Nivio Ziviani

Projeto de Algoritmos Cap.4 Ordenao 1

Ordenao

Introduo - Conceitos Bsicos

Ordenao Interna

Ordenao por Seleo

Ordenao por Insero

Shellsort

Quicksort

Heapsort

Ordenao Parcial

Seleo Parcial Insero Parcial Heapsort Parcial Quicksort Parcial

Ordenao Externa

Intercalao Balanceada de VriosCaminhos

Implementao por meio de Seleo porSubstituio

Consideraes Prticas

Intercalao Polifsica

Quicksort Externo

Projeto de Algoritmos Cap.4 Ordenao 2

Introduo - Conceitos Bsicos

Ordenar: processo de rearranjar um conjuntode objetos em uma ordem ascendente oudescendente.

A ordenao visa facilitar a recuperaoposterior de itens do conjunto ordenado.

Dificuldade de se utilizar um catlogotelefnico se os nomes das pessoas noestivessem listados em ordem alfabtica.

Notao utilizada nos algoritmos:

Os algoritmos trabalham sobre osregistros de um arquivo.

Cada registro possui uma chave utilizadapara controlar a ordenao.

Podem existir outros componentes em umregistro.

Projeto de Algoritmos Cap.4 Ordenao 3

Introduo - Conceitos Bsicos

Estrutura de um registro:

type Item = record

Chave: ChaveTipo;

{ outros componentes }

end;

Qualquer tipo de chave sobre o qual existauma regra de ordenao bem-definida podeser utilizado.

Um mtodo de ordenao estvel se aordem relativa dos itens com chaves iguaisno se altera durante a ordenao.

Alguns dos mtodos de ordenao maiseficientes no so estveis.

A estabilidade pode ser forada quando omtodo no-estvel.

Sedgewick (1988) sugere agregar umpequeno ndice a cada chave antes deordenar, ou ento aumentar a chave dealguma outra forma.

Projeto de Algoritmos Cap.4 Ordenao 4

Introduo - Conceitos Bsicos

Classificao dos mtodos de ordenao:

Ordenao interna: arquivo a serordenado cabe todo na memria principal.

Ordenao externa: arquivo a serordenado no cabe na memria principal.

Diferenas entre os mtodos:

Em um mtodo de ordenao interna,qualquer registro pode ser imediatamenteacessado.

Em um mtodo de ordenao externa, osregistros so acessados seqencialmenteou em grandes blocos.

A maioria dos mtodos de ordenao baseada em comparaes das chaves.

Existem mtodos de ordenao que utilizamo princpio da distribuio.

Projeto de Algoritmos Cap.4 Ordenao 5

Introduo - Conceitos Bsicos

Exemplo de ordenaGCo por distribuio:considere o problema de ordenar um baralhocom 52 cartas na ordem:

A < 2 < 3 < < 10 < J < Q < K

e

< < < .

Algoritmo:

1. Distribuir as cartas abertas em trezemontes: ases, dois, trs, . . ., reis.

2. Colete os montes na ordem especificada.

3. Distribua novamente as cartas abertas emquatro montes: paus, ouros, copas eespadas.

4. Colete os montes na ordem especificada.

Projeto de Algoritmos Cap.4 Ordenao 6

Introduo - Conceitos Bsicos

Mtodos como o ilustrado so tambmconhecidos como ordenao digital,radixsort ou bucketsort.

O mtodo no utiliza comparao entrechaves.

Uma das dificuldades de implementar estemtodo est relacionada com o problema delidar com cada monte.

Se para cada monte ns reservarmos umarea, ento a demanda por memria extrapode tornar-se proibitiva.

O custo para ordenar um arquivo com nelementos da ordem de O(n).

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1 7

Ordenao Interna

Na escolha de um algoritmo de ordenaointerna deve ser considerado o tempo gastopela ordenao.

Sendo n o nmero registros no arquivo, asmedidas de complexidade relevantes sCo:

Nmero de comparaes C(n) entrechaves.

Nmero de movimentaes M(n) de itensdo arquivo.

O uso econmico da memria disponvel um requisito primordial na ordenao interna.

Mtodos de ordenao in situ so ospreferidos.

Mtodos que utilizam listas encadeadas noso muito utilizados.

Mtodos que fazem cpias dos itens a seremordenados possuem menor importncia.

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1 8

Ordenao Interna

Classificao dos mtodos de ordenaointerna:

Mtodos simples:

Adequados para pequenos arquivos. Requerem O(n2) comparaes. Produzem programas pequenos.

Mtodos eficientes:

Adequados para arquivos maiores. Requerem O(n log n) comparaes. Usam menos comparaes. As comparaes so mais complexas

nos detalhes. Mtodos simples so mais eficientes

para pequenos arquivos.

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1 9

Ordenao Interna

Tipos de dados e variveis utilizados nosalgoritmos de ordenao interna:

type Indice = 0..MaxTam;

Vetor = array [ Indice ] of Item;

var A: Vetor ;

O ndice do vetor vai de 0 at MaxTam,devido s chaves sentinelas.

O vetor a ser ordenado contm chaves nasposies de 1 at n.

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1.1 10

Ordenao por Seleo

Um dos algoritmos mais simples deordenao.

Algoritmo:

Selecione o menor item do vetor.

Troque-o com o item da primeira posiodo vetor.

Repita essas duas operaes com osn 1 itens restantes, depois com os n 2itens, at que reste apenas um elemento.

O mtodo 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 trocaentre si.

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1.1 11

Ordenao por Seleo

procedure Selecao (var A: Vetor ; var n: Indice ) ;

var i , j , Min: Indice ;

x : Item;

begin

for i := 1 to n 1 do

begin

Min := i ;

for j := i + 1 to n do

i f A[ j ] .Chave < A[Min] .Chave

then Min := j ;

x := A[Min ] ; A[Min] := A[ i ] ; A[ i ] := x;

end;

end;

Anlise

Comparaes entre chaves e movimentaesde registros:

C(n) = n2

2 n

2

M(n) = 3(n 1)

A atribuio Min := j executada em mdian log n vezes, Knuth (1973).

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1.1 12

Ordenao por Seleo

Vantagens:

Custo linar no tamanho da entrada para onmero de movimentos de registros.

o algoritmo a ser utilizado para arquivoscom registros muito grandes.

muito interessante para arquivos pequenos.

Desvantagens:

O fato de o arquivo j estar ordenado noajuda em nada, pois o custo continuaquadrtico.

O algoritmo no estvel.

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1.2 13

Ordenao por Insero

Mtodo preferido dos jogadores de cartas.

Algoritmo:

Em cada passo a partir de i=2 faa:

Selecione o i-simo item da seqnciafonte.

Coloque-o no lugar apropriado naseqncia destino de acordo com ocritrio de ordenao.

O mtodo 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 aseqncia destino.

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1.2 14

Ordenao por Insero

procedure Insercao (var A: Vetor ; var n: Indice ) ;

var i , j : Indice ;

x : Item;

begin

for i := 2 to n do

begin

x := A[ i ] ;

j := i 1;

A[0] := x ; { sentinela }

while x.Chave < A[ j ] .Chave do

begin

A[ j + 1] := A[ j ] ;

j := j 1;

end;

A[ j + 1] := x;

end;

end;

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1.2 15

Ordenao por Insero

Consideraes sobre o algoritmo:

O processo de ordenao pode ser terminadopelas condies:

Um item com chave menor que o item emconsiderao encontrado.

O final da seqncia destino atingido esquerda.

Soluo:

Utilizar um registro sentinela na posiozero do vetor.

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1.2 16

Ordenao por Insero

Anlise

Seja C(n) a funo que conta o nmero decomparaes.

No anel mais interno, na i-sima iterao, ovalor de Ci :

melhor caso : Ci(n) = 1

pior caso : Ci(n) = i

caso medio : Ci(n) =1i(1 + 2 + + i) = i+1

2

Assumindo que todas as permutaes de nso igualmente provveis no caso mdio,temos:

melhor caso : C(n) = (1 + 1 + + 1) = n 1

pior caso : C(n) = (2 + 3 + + n) = n2

2+

n2 1

caso medio : C(n) = 12(3 + 4 + + n + 1) =

n2

4+ 3n

4 1

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1.2 17

Ordenao por Insero

Anlise

Seja M(n) a funo que conta o nmero demovimentaes de registros.

O nmero de movimentaes na i-simaiterao :

Mi(n) = Ci(n) 1 + 3 = Ci(n) + 2

Logo, o nmero de movimentos :

melhor caso : M(n) = (3 + 3 + + 3) =

3(n 1)

pior caso : M(n) = (4 + 5 + + n + 2) =

n2

2+ 5n

2 3

caso medio : M(n) = 12(5 + 6 + + n + 3) =

n2

4+ 11n

4 3

Projeto de Algoritmos Cap.4 Ordenao Seo 4.1.2 18

Ordenao por Insero

O nmero mnimo de comparaes emovimentos ocorre quando os i