1 / 47

ORDENAÇÃO DE DADOS INTERCALAÇÃO - MERGESORT ALUNOS: JORLAN TEIXEIRA COSTA N O : 9908802701

UNIVERSIDADE FEDERAL DO PARÁ CENTRO DE CIÊNCIAS EXATAS E NATURAIS DEPARTAMENTO DE INFORMÁTICA DISCIPLINA: ESTRUTURAS DE DADOS II PROFESSOR: A B C SAMPAIO. ORDENAÇÃO DE DADOS INTERCALAÇÃO - MERGESORT ALUNOS: JORLAN TEIXEIRA COSTA N O : 9908802701

Download Presentation

ORDENAÇÃO DE DADOS INTERCALAÇÃO - MERGESORT ALUNOS: JORLAN TEIXEIRA COSTA N O : 9908802701

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. UNIVERSIDADE FEDERAL DO PARÁ CENTRO DE CIÊNCIAS EXATAS E NATURAIS DEPARTAMENTO DE INFORMÁTICA DISCIPLINA: ESTRUTURAS DE DADOS II PROFESSOR: A B C SAMPAIO ORDENAÇÃO DE DADOS INTERCALAÇÃO - MERGESORT ALUNOS: JORLAN TEIXEIRA COSTA NO: 9908802701 JOSÉ MARIA DE OLIVEIRA Jr. NO: 9908803401

  2. CONSISTE EM DIVIDIR O VETOR EM DOIS OU MAIS, ORDELÁ-LOS SEPARADAMENTE E INTERCALÁ-LOS DOIS A DOIS FORMANDO, CADA PAR INTERCALADO, NOVOS SEGMENTOS ORDENADOS ATÉ QUE RESULTE APENAS UM SEGMENTO ORDENADO.

  3. PARA OBTER A ORDENAÇÃO DOS SEGMENTOS INICIAIS , PODE-SE USAR QUALQUER MÉTODO DE INTERCALAÇÃO.

  4. Segmentos previamente ordenados intercala intercala ORDENADO ORDENADO Intercala ORDENADO

  5. PARA NÃO USAR OUTROS MÉTODOS , PODEMOS INICIAR OS SEGMENTOS COM VALOR IGUAL A 1. ESTE MÉTODO É CHAMADO DE MERGESORT.

  6. MÉTODO DA INTERCALAÇÃO SIMPLES-MERGESORT INICIA-SE COM SEGMENTOS DE VALOR IGUAL A 1. COMO CADA SEGMENTO POSSUI APENAS 1 ELEMENTO CADA , JÁ ESTÃO ORDENADOS.

  7. EXEMPLO

  8. QUANDO O VET0R NÃO FOR UMA POTÊNCIA DE 2, OCORRERÁ UM SEGMENTO RESULTE SEM UM PAR PARA SER INTERCALADO. ESSE SEGMENTO QUE SERÁ O ULTIMO DO VETOR É TRANSCRITO PARA A INTERAÇÃO SUBSEQUENTE.

  9. EXEMPLO

  10. A IMPLEMENTAÇÀO DO MÉTODO É FEITA EM 3 NÍVEIS: SIMPLEMERGE: OPERAÇÃO DE INTERCALAÇÃO DE UM PAR DE SEGMEMT0S MERGEPASS: INTERCALAÇÃO DE TODOS OS PARES DE SEGMENTOS ORDENADOS. MERGESORT: EFETUA TODA A SEQUÊNCIA DE INTERCALAÇÃO

  11. procedure simplemerge(c: vet; cI1, CF1,CI2, CF2: integer; ca: vet; r: integer); var CAI1, CAI2, k, i: integer; begin CAI1:= CI1; CAI2:= CI2; k:= r; while (CAI1 <= CF1) and (CAI1 <= CF2 do begin if c[CAI1] < c[CAI2] then begin ca[k]:= c[CAI2]; CAI1:= CAI1 + 1 end {then}

  12. else begin ca[k]:= c[CAI2]; CAI2:= CAI2 + 1 end; {else} k:= k + 1; end; {while} if CAI1 > CF1 then for i:= CAI2 to CF2 do begin ca[k]:= c[i]; k:= k + 1; end {for} else

  13. for i:= CAI1 to CF1 begin ca[k]:= c[i]; k:= k + 1; end; {for} end; {simplemerge}

  14. procedure mergepass(c, ca: vet;n, l: integer); var p, q, r, i: integer; begin p:= 1; q:= p + l; r:= 1; while q <= n do begin simplemerge(c, p, q - 1, q, min(q + l - 1, n), ca, r); r:= r + 2*l; p:= q + l; q:= p + l; end; {while}

  15. if p <= n then for i:= p to n do ca[i]:= c[i]; end; {mergepass}

  16. procedure mergesort(c: vet; n: integer); var l, i: integer;ca:vet; begin l:= 1; while l < n do begin if (l = 1) or (l = 4) or (l = 16) or (l = 64) or (l = 256) or (l = 1024) or (l = 2048) or (l = 4096) then mergepass(c, ca, n, l) else mergepass(ca, c, n, l); l:= 2*l; end; {while}

  17. if (n = 2) or (n = 8) or (n =32) or (n = 128) or (n = 512) or (n = 2048) or (n =8192) then for i:= 1 to n do c[i]:= ca[i]; end; {mergesort}

  18. EXEMPLO DE INTERCALAÇÃO VETOR C 25 19 18 10 P Q PQ CAI1:= CI1 CAI2:= CI2 CF1 CF2 CAI1:= CI1 CAI2:= CI2 CF1 CF2 10 VETOR CA 19 25 18 K:= R K K:= R K

  19. 19 25 10 18 VETOR CA P Q CAI1:= CI1 CF1 CAI2:= CI2 CAF2 VETOR C 10 18 19 25 K:= R K

  20. INTERCALANDO SEQUÊNCIAS NATURAIS CONSISTE EM TIRAR PROVEITO DAS EVENTUAIS ORDENAÇÕES PARCIAIS. BUSCA-SE OS SEGMENTOS JÁ ORDENADOS EFETUANDO AS INTERCALAÇÕES A PARTIR DELES.

  21. EXEMPLO 23 74 42 11 65 58 87 99 36 94 23 42 74 11 58 65 87 99 36 94 11 23 42 58 65 74 87 99 36 94 11 23 96 42 58 65 74 87 94 99

  22. ESTE MÉTODO DIMINUI O NÚMERO DE INTERÇÕES EFETUADAS EM APENAS UMA UNIDADE POR ISSO NÀO VALE A PENA UTILIZAR ESTE MÉTODO.

  23. EXEMPLO DE INTERCALAÇÃO INTERCALAÇÃO DE ARQUIVOS CLASSIFICADOS A INTERCALAÇÃO É FEITA COMPARANDO- SE OS PRIMEIROS REGISTROS DE CADA UM DOS ARQUIVOS A SEREM INTERCALADOS. SELECIONA-SE AQUELE QUE POSSUIR A MENOR CHAVE, TRANSFERINDO-A PARA A SAÍDA. ESSE REGISTRO É SUBSTITUÍDO PELO SEU SUCESSOR E O PROCESSO É REPETIDO ATÉ QUE NÃO SOBRE NENHUM REGISTRO.

  24. IMPLEMENTAÇÃO • ARQUIVOS • ENTRADA: FILE(1) , FILE(2) , . . . , FILE(P) ; • SAÍDA: FILE(0).

  25. ÁRVORE DE SELEÇÃO • st[ 1 ] É A RAIZ DA ÁRVORE; • st[ 2i ] É A SUBÁRVORE DA ESQUERDA DE st[ i ] • st[ 2i + 1 ] É A SUBÁRVORE DA DIREITA DE st[ i ] i = 1, n div 2 1 2p-1 p-1 p nodos não -folhas nodos folhas

  26. 09 11 16 24 . . . 14 17 21 35 . . . 13 15 19 23 . . . 05 10 18 22 . . . 08 29 35 72 . . .

  27. 09 05 08 14 13 11 16 24 . . . 17 21 35 . . . 15 19 23 . . . 10 18 22 . . . 29 35 72 . . .

  28. 13 09 05 08 14 15 11 16 24 . . . 17 21 35 . . . 19 23 . . . 10 18 22 . . . 29 35 72 . . .

  29. 05 13 09 10 08 14 15 11 16 24 . . . 17 21 35 . . . 19 23 . . . 18 22 . . . 29 35 72 . . .

  30. 09 05 13 11 10 08 14 15 16 24 . . . 17 21 35 . . . 19 23 . . . 18 22 . . . 29 35 72 . . .

  31. 05 09 08 13 11 10 29 14 15 16 24 . . . 17 21 35 . . . 19 23 . . . 18 22 . . . 35 72 . . .

  32. procedure filemerge ( file, p, n ); begin for i:=0 to p do reset ( file (i) ); for i:=0 to p-1 do st [1]:=minkey; for i:=0 to 2*p-1 do read (file (i-p+1) , st [i] ); for i:=0 to p-1 do pop (st , file, 2*p-1 );

  33. write (file (0), st[1] ); for i:=2 to n do begin pop (st , file, 2*p-1 ); write (file (0), st[1] ); end; end;

  34. CLASSIFICAÇÃO POR DISTRIBUIÇÃO DE CHAVES

  35. ESTE MÉTODO DE CLASSIFICAÇÃO ANTECEDE AOS COMPUTADORES DIGITAIS. ELE É UMA ADAPTAÇÃO DO PROCESSO DE CLASSIFICAÇÃO MECÂNICA DE CARTÕES PERFURADOS, UTILIZADOS PARA ARMAZENAMENTO DE DADOS.

  36. EXEMPLO POR EXEMPLO, SUPONHAMOS QUE UM ARQUIVO FORMADO POR 20 CARTÕES TIVESSE, EM UM CERTO CAMPO, OS SEGUINTES VALORES PERFURADOS: 523, 018, 125, 937, 628, 431, 243, 705, 891, 362, 429, 005, 540, 353, 115, 427, 910, 580, 174, 456

  37. A CLASSIFICAÇÃO PELA COLUNA QUE CONTÉM O DÍGITO DA UNIDADE PRODUZIRIA A SEGUINTE DISTRIBUIÇÃO PELOS ESCANINHOS 523, 018, 125, 937, 628, 431, 243, 705, 891, 362, 429, 005, 540, 353, 115, 427, 910, 580, 174, 456 CLASSIFICAÇÃO PELAS UNIDADES 115 580 353 005 910 891 243 705 427 628 540 431 362 523 174 125 456 937 018 429 0 1 2 3 4 5 6 7 8 9

  38. RECOLHENDO OS CARTÕES NA ORDEM DESCRITA,TEMOS: 540, 910, 580, 431, 891, 362, 523, 243, 353, 174, 125, 705, 005, 115, 456, 937, 427, 018, 628, 429 CLASSIFICANDO PELA COLUNA DAS DEZENAS, OBTEMOS: 429 628 018 427 005 115 125 937 243 456 705 910 523 431 540 353 362 174 580 891 0 1 2 3 4 5 6 7 8 9

  39. COLOCANDO-OS EM ORDEM, TEMOS: 705, 005, 910, 115, 018, 523, 125, 427, 628, 429, 431, 937, 540, 243, 353, 456, 362, 174, 580, 891 CLASSIFICANDO PELA COLUNA DA CENTENA, TEMOS: 456 174 431 580 018 125 362 429 540 937 005 115 243 353 427 523 628 705 891 910 0 1 2 3 4 5 6 7 8 9

  40. AGORA FINALMENTE RETIRANDO-OS EM ORDEM OBTEMOS OS CARTÕES NA ORDEM DESEJADA 005, 018, 115, 125, 174, 243, 353, 362, 427, 429, 431, 456, 523, 540, 580, 628, 705, 891, 910, 937

  41. MÉTODO DA INDEXAÇÃO DIRETA - RADIXSORT • UTILIZA-SE O DÍGITO COMO UM ÍNDICE QUE • VAI REMATER O DADO TODO PARA O ESCANINHO • CORRESPONDENTE. • UTILIZA-SE UMA TABELA DE FREQUÊNCIAS • PARA CONTABILIZAR O NÚMERO DE CHAVES.

  42. UTILIZA-SE UMA TABELA DE FREQUÊNCIAS • ACUMILADASPARA INDICAR A POSIÇÃO • INICIAL DE CADA ESCANINHO. • A MEDIDA QUE AS CHAVES VÃO SENDO DISTRIBUÍDAS • OS PONTEIROS VÃO SENDO INCREMENTADOS.

  43. DÍGITO 0 1 2 3 4 5 6 7 8 9 3 2 1 1 4 1 2 FREQ. 3 2 1 0 3 5 6 9 10 14 15 FREQ. AC. 17 19 INDICA A POSIÇAÕ INICIAL DE CADA ESCANINHO INDICA O NÚMERO DE OCORRÊNCIAS DAS CHAVES

  44. {indica o dígito correspondente ao passo} funtion parte (ch: integer; passo: 1..4); begin case passo of 1: parte:= ch mod 10; 2: parte:= (ch mod 100) div 10; 3: parte:= (ch mod 1000) div 100; 4: parte:= ch div 1000; end; end;

  45. procedure distribuicao(c1:vet; n1:0..9999; p1: ..4); var c2: vet; f, fac: vet2; v: 0..9; i: 0..n1; k: 0..9999; begin for i:= o to 9 do f[i]:= 0 {inicializa a } { tabela de frequências}

  46. for i:= 1 to n1 do begin v:= parte(c1[i], p1); f[v]:= f[v] + 1 end; fac[0]:= 0; fac[1]:= f[0]; for i:= 2 to 9 do fac[i]:= fac[i - 1] + f[i - 1];

  47. {fase de distribuição} for i:= 1 to n1 do begin v:= parte(c1[i], p1); k:= fac[v]; c2[k]:= c1[i]; fac[v]:= fac[v] + 1; end; end{distribuicao}

More Related