ordenação interna
TRANSCRIPT
-
8/7/2019 Ordenao Interna
1/40
Mtodos de Ordenao
-
8/7/2019 Ordenao Interna
2/40
Mtodos de Ordenao Ordenao corresponde ao mtodo de
rearranjar um conjunto de objetos em umaordem crescente ou decrescente
Tem como objetivo facilitar a recuperaodos itens do conjunto
Recuperao de nomes em um lista telefnica Atividade relevante e fundamental em
processamento de dados
-
8/7/2019 Ordenao Interna
3/40
Chaves
A comparao feita atravs de umadeterminada chave escolhida
Os registros so usados para representar oselementos a serem ordenados
TipoItem = recordchave: TipoChave;
{outras declaraesdesejadas...}
end;
-
8/7/2019 Ordenao Interna
4/40
Classificao
Quanto Estabilidade Mtodos Instveis: a ordem relativa dos itens com
chaves iguais alterada durante o processo deordenao
Mtodos Estveis: se a ordem relativa dos itenscom chaves iguais mantm-se inalterada durante oprocesso Ex.: Se uma lista dos funcionrios ordenada pelo
campo Salrio, um mtodo estvel produz uma listaem que os funcionrios com o mesmo salrio aparecemem ordem alfabtica
Alguns dos mtodos de ordenao mais eficientesno so estveis
-
8/7/2019 Ordenao Interna
5/40
Estabilidade - Exemplo
10 20 30 40 50 60 70 80 90R$
100,00
R$
100,00
R$
200,00
R$
400,00
R$
500,00
R$
600,00
R$
600,00
R$
500,00
R$
400,00
10 20 30 40 90 50 80 60 70R$
100,00
R$
100,00
R$
200,00
R$
400,00
R$
400,00
R$
500,00
R$
500,00
R$
600,00
R$
600,00
20 10 30 90 40 50 80 70 60R$
100,00
R$
100,00
R$
200,00
R$
400,00
R$
400,00
R$
500,00
R$
500,00
R$
600,00
R$
600,00
Estvel:
Instvel:
-
8/7/2019 Ordenao Interna
6/40
Classificao:Quanto ao conjunto de registros
Ordenao Interna: o conjunto de registros cabetodo em na memria principal
Ordenao Externa: o conjunto de registros nocabe completamente em memria principal, e deveser armazenado em disco ou fita. Alguns autores utilizam ordenao de vetores (ordenao
interna) e ordenao de registros (ordenao externa)
Principal diferena: na ordenao interna, o registro podeser acessado diretamente, enquanto na ordenao externa,o registros so acessados seqencialmente ou em blocos
-
8/7/2019 Ordenao Interna
7/40
Ordenao Interna
-
8/7/2019 Ordenao Interna
8/40
Ordenao Interna
Medidas de complexidade levam em conta: O nmero de comparao entre as chaves O nmero de trocas entre os itens
So classificados em dois tipos: Mtodos Simples: mais recomendados para conjuntos
pequenos de dados. Usam mais comparaes, masproduzem cdigos menores e mais simples;
Mtodos Eficientes ou Sofisticados: adequados paraconjuntos maiores de dados. Usam menoscomparaes, porm produzem cdigos maiscomplexos e com muitos detalhes.
-
8/7/2019 Ordenao Interna
9/40
Alguns Algoritmos de
Ordenao Interna Ordenao por Seleo (Selection Sort)
Ordenao por Insero (Insertion Sort)
Ordenao por Seleo e Troca (Bubble Sort) Ordenao por Insero atravs de incrementos
decrescentes (ShellSort)
Ordenao por Particionamento (QuickSort) Ordenao de rvores (HeapSort) no ser visto
MtodosSimples
MtodosEficientes
-
8/7/2019 Ordenao Interna
10/40
Ordenao InternaMtodos Simples
-
8/7/2019 Ordenao Interna
11/40
-
8/7/2019 Ordenao Interna
12/40
Ordenao por Seleo
(Selection Sort)
O R D E N A1 2 3 4 5 6
Chaves Iniciais:
i=1: A R D E N O
A D R E N O
A D E R N O
A D E N R O
A D E N O R
i=2:
i=3:
i=4:
i=5:
-
8/7/2019 Ordenao Interna
13/40
Ordenao por Seleo
PROC
EDURE SelectionSort(vet: Vetor);VAR i, j, min : integer; aux: TipoItem;BEGIN
FOR i:=1 to TamConjunto DOBEGIN
min := i; {Posio a ser ordenada}FOR j:=i+1 do TamConjunto DO
IF (vet[j].chave < vet[min].chave) THENmin := j; {Posio a ser trocada}
aux := vet[min];vet[min] := vet[i];vet[i] := aux;
END;
END;
Troca
-
8/7/2019 Ordenao Interna
14/40
Ordenao por Seleo
(Selection Sort) Desvantagens
O fato de o conjunto j estar ordenado noajuda em nada (o nmero de comparaescontinua o mesmo)
O algoritmo no estvel, isto , os registros
com ch
aves iguais nem sempre iro manter amesma posio relativa de antes do incio daordenao
-
8/7/2019 Ordenao Interna
15/40
Ordenao por Insero
(Insertion Sort) Tambm um algoritmo simples
Procedimento1. Os elementos so divididos em uma seqncia de
destino a1, ..., ai-1 e em uma seqncia fonte ai, ..., an.
2. Em cada passo, a partir de i =2, o i-simo item daseqncia fonte retirado e transferido para a
seqncia destino sendo inserido na posio adequada
-
8/7/2019 Ordenao Interna
16/40
-
8/7/2019 Ordenao Interna
17/40
Ordenao por Insero
(Insertion Sort) A insero do item em uma posio adequada na
seqncia de destino realizada com a
movimentao das ch
aves maiores para a direita eento feita a insero do item na posio vazia Vantagens:
O nmero mnimo de comparaes e movimentosocorre quando os itens j esto originalmente ordenados
O nmero mximo ocorre quando os itens estooriginalmente em ordem reversa, o que indica umcomportamento natural para o algoritmo
-
8/7/2019 Ordenao Interna
18/40
Ordenao por Seleo e Troca
(Bubblesort) Um dos algoritmos mais simples
Princpio:
1. As chaves Item[1].Chave e Item[2].Chave so comparadas etrocadas se estiverem fora de ordem;
2. Repete-se o processo de comparao e troca com Item[2] eItem[3], Item[3] e Item[4], ...
Por que Bolha? Se o vetor a ser ordenado for colocado na vertical, com Item[n] em
cima e Item[1] embaixo, durante cada passo o menor elementosobe at encontrar um elemento maior ainda, como se uma bolhasubisse dentro de um tubo de acordo com sua densidade
-
8/7/2019 Ordenao Interna
19/40
-
8/7/2019 Ordenao Interna
20/40
Implementao: Ordenao peloMtodo da Bolha
procedure Bolha(var L: Lista, n: integer);
var i,j: ndice;
x: TipoItem;
begin
for i:= 2 to n dofor j:= n to i do begin
if L.Item[j-1].Chave > L.Item[j].Chave then
begin
x:= L.Item[j-1];
L.Item[j-1] := L.Item[j];L.Item[j] := x;
end;
end; {for}
end;
-
8/7/2019 Ordenao Interna
21/40
Ordenao pelo Mtodo da Bolh
a Note que no exemplo, as trs ltimas
iteraes no afetam a ordem do vetor;
assim o algoritmo pode ser melhorado! Tcnica bvia: manter uma indicao para
saber se houve ou no troca na ltima
iterao: se no houve, o vetor j estordenado
-
8/7/2019 Ordenao Interna
22/40
Implementao do Mtodo da Bolha 2procedure Bolha2 (var A: Vetor; var n: Indice);var i, j : Indice;
temp: Item; troca: boolean;begin
i := n; troca := TRUE;
while (i >= 2) and (troca = TRUE) do begintroca := FALSE;for j:= 1 to (i-1) do begin
ifA[j].chave < A[j+1].chave then begintemp := A[j].chave;A[j].chave := A[j+1].chave;
A[j+1].chave := temp;troca := TRUE;
end;
end; (for)
i := i 1;end;
end;
Informa se tevealguma troca
-
8/7/2019 Ordenao Interna
23/40
Observaes Mtodo extremamente lento: s faz comparaes
entre posies adjacentes
o mtodo mais ineficiente entre os simples
Melhor caso: vetor j ordenado Pior caso: vetor de entrada em ordem reversa
Cada passo aproveita muito pouco do que foidescoberto em relao ordem das chaves no
passo anterior (exibe informaes redundantes)
-
8/7/2019 Ordenao Interna
24/40
Ordenao InternaMtodos Eficientes
-
8/7/2019 Ordenao Interna
25/40
ShellSort
Mtodo proposto por Shell em 1959 uma extenso da ordenao por insero
O Mtodo de Insero troca itens adjacentes quando procurao ponto de insero na seqncia destino
Se o menor item estiver na posio mais a direita no vetor,ento o nmero de comparaes e movimentaes igual an 1 para encontrar o seu ponto de insero
O Shellsortcontorna o problema permitindo trocas deregistros que esto distantes um do outro. Os itens queesto separados h posies so rearranjados de formaque todo h-simo item leva a uma seqncia ordenada
-
8/7/2019 Ordenao Interna
26/40
Ordenao por Insero
AO R D E N
62 3 4 51
h = 4 RN A D E O
Chaves Iniciais
RD A N E Oh = 2
RA D E N Oh = 1
-
8/7/2019 Ordenao Interna
27/40
Entendendo o Shellsort
1. Na primeira passada (h=4), o item O comparadocom N (posies 1 e 5) e trocados O item R a seguir comparado e trocado com A
(posies 2 e 6)
2. Na segunda passada (h=2), N, D e O, nas posies1, 3 e 5 so rearrumados para resultar em D, N e Onestas mesmas posies; da mesma forma, A, E eR, nas posies 2, 4 e 6 so comparados emantidos nos seus lugares
3. A ltima passada (h=1) corresponde ao algoritmode insero, mas apenas trocas locais seroexecutadas
P.S.: Knuth mostrou que uma escolha razovel da seqncia h a seguinte:1, 4, 13, 40, 121, 364, 1093, 3280
-
8/7/2019 Ordenao Interna
28/40
Observaes
A razo pela qual este mtodo mais eficienteainda no conhecida porque ningum ainda foicapaz de analisar o algoritmo!
A sua anlise envolve problemas matemticosmuito difceis, como definir qual a seqncia deincrementos deve fornecer os melhoresresultados...
A seqncia apresentada foi obtida de maneiraemprica e uma anlise matemtica indica que oesforo computacional para ordenarn elementos proporcional a n com o Shellsort
-
8/7/2019 Ordenao Interna
29/40
Observaes
Shellsort: tima escolha para arquivos detamanho moderado
Implementao simples e quantidadepequena de cdigo
Melhor mtodo para conjuntos de dadospequenos e mdios
O mtodo tambm no estvel
-
8/7/2019 Ordenao Interna
30/40
Ordenao por Particionamentoou Quicksort
O Quicksort o algoritmo mais rpido paraordenao interna conhecido para uma grandequantidade de situaes, sendo por isso o mais
utilizado entre todos os algoritmos de ordenao Princpio1. Dividir o problema de ordenar um conjunto de n itens
em dois problemas menores
2. Ordenar independentemente os problemas menores3. Combinar os resultados para produzir a soluo do
problema maior
-
8/7/2019 Ordenao Interna
31/40
Partio
A parte mais delicada desse mtodo serefere diviso da partio Deve-se rearranjar o vetor na forma A[Esq..Dir]
atravs da escolha arbitrria de um item x dovetor chamado piv
Ao final, o vetorA dever ter duas partes, umaesquerda com chaves menores ou iguais que x e
a direita com valores de ch
aves maiores ouiguais que x
-
8/7/2019 Ordenao Interna
32/40
Algoritmo Quicksort: Partio
Procedimento Algoritmo QuickSort1. Escolher arbitrariamente um item do vetor e colocar
este valor em x
2. Percorrer o vetor a partir da esquerda at que umitem A[i] u x encontrado; da mesma maneira,percorrer o vetor a partir da direita at que um itemA[j] e x encontrado;
3. Como os itens A[i] e A[j] no esto na ordem corretano vetor final, eles devem ser trocados
4. Continuar o processo at que os ndice i e j secruzem em algum ponto do vetor
-
8/7/2019 Ordenao Interna
33/40
Funcionamento do Quicksort:
Partio Ao final do processo, o vetor A[Esq..Dir]
est particionado de tal forma que:
Os itens em A[Esq], A[Esq+1],..., A[j] somenores ou iguais a x
Os itens em A[i], A[i+1],..., A[Dir] so
maiores ou iguais a x
-
8/7/2019 Ordenao Interna
34/40
Exemplo de Partio
AO R D E N
62 3 4 51
i = 2 OA R D E N
OA D R E Ni = 3
Chaves Iniciais D
O piv escolhido como sendo A[(i+j) div 2] Inicialmente, i=1 e j=6, e ento x=A[3] =D A varredura a partir da posio 1 pra no item O e a varredura a
partir da posio 6 pra em A, sendo os dois itens trocados A varredura a partir da posio 2 pra em Re a varredura a
partir da posio 5 pra no item D, e ento os dois itens sotrocados
Neste instante ie jse cruzam (i=3 e j=2), o que encerra o processode partio
-
8/7/2019 Ordenao Interna
35/40
Procedimento Ordena (aps Partio)
AO R D E N
62 3 4 51
i = 1 OA D R E N
OE R Ni = 3
ON Ri = 4
ROi = 5
Chaves Iniciais
A Di = 2
RA D E N Oi = 6
-
8/7/2019 Ordenao Interna
36/40
Procedimento Partio
procedure Particao(Esq,Dir: ndice; var i,j:ndice);
var pivo, x: Item;
begin
i := Esq;
j:= Dir;pivo:= A[(i+j) div 2)]; {obtencao do pivo}
repeat;
while pivo.Chave > A[i].Chave do i:=i+1;
while pivo.Chave < A[j].Chave do j:=j-1;
if I j;
end;
-
8/7/2019 Ordenao Interna
37/40
Analisando a procedure Esq e Dir so ndices para definir os sub-vetores
do vetor original A a ser particionado
i e j retornam as posies finais das parties,onde: A[Esq], A[Esq+1],..., A[j] so menores ou iguais a x
A[i], A[i+1],..., A[Dir] so maiores ou iguais a x
O vetor uma varivel global ao procedimentoPartio
-
8/7/2019 Ordenao Interna
38/40
Procedimento Quicksortprocedure Quicksort(var A: Vetor);
{*** A definio do procedimento partioentra aqui ***}
procedure Ordena(Esq,Dir:Indice);var i,j: Indice;
begin
Particao(Esq,Dir,i,j);
if Esq < j then Ordena(Esq,j);if i < Dir then Ordena(i,Dir);
i := Esq;
j:= Dir;
end;
-
8/7/2019 Ordenao Interna
39/40
Anlise
Melhor caso: quando cada partio divide oarquivo em duas partes iguais
Pontos fracos: A implementao do algoritmo muito delicada e
difcil O mtodo no estvel
Entretanto, desde que se tenha umaimplementao robusta o suficiente, o Quicksort
deve ser o algoritmo preferido para as aplicaes
-
8/7/2019 Ordenao Interna
40/40
Outros mtodos Ordenao Interna:
Heapsort: mesmo princpio da ordenao por
seleo, Captulo 4 do livro de Ziviani traz os
mtodos, com anlises aprofundadas.