Ordenação Interna

download Ordenação Interna

of 40

Transcript of Ordenação Interna

  • 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.