SlideShare uma empresa Scribd logo
1 de 13
UNIVERSIDADE LUTERANA DO BRASIL
     CENTRO DE CIÊNCIAS EXATAS E NATURAIS
      CURSO DE SISTEMAS DE INFORMAÇÃO




ORDENAÇÃO DE DADOS POR DISTRIBUIÇÃO DE CHAVES




          IGOR CASA NOVA DOS SANTOS
            UÍLSON ZANETTI GOMES
        MAURICIO VOLKWEIS ASTIAZARA
              HENRIQUE OLIVEIRA


               Estrutura de Dados II
               Torres, Abril de 2002
Sumário


Lista de Tabelas..................................................................................................................................... 3
Resumo.................................................................................................................................................. 4
Introdução............................................................................................................................................... 5
1 Origem................................................................................................................................................. 6
2 Base.................................................................................................................................................... 6
3 Algoritmo............................................................................................................................................. 7
4 Vantagens e Desvantagens............................................................................................................... 10
Conclusão............................................................................................................................................. 12
Bibliografia............................................................................................................................................ 13




                                                                             2
Lista de Tabelas


Lista de Tabelas..................................................................................................................................... 3
Resumo.................................................................................................................................................. 4
Introdução............................................................................................................................................... 5
1 Origem................................................................................................................................................. 6
2 Base.................................................................................................................................................... 6
3 Algoritmo............................................................................................................................................. 7
4 Vantagens e Desvantagens............................................................................................................... 10
Conclusão............................................................................................................................................. 12
Bibliografia............................................................................................................................................ 13




                                                                             3
Resumo

        Até agora conhecíamos métodos variados de ordenação como o Bubble Sort, Shake
Sort ou o Quick Sort, que na verdade percorriam o vetor, comparavam dois números e
ordenavam de acordo com as especificações do algoritmo. Nosso principal objetivo nesse
trabalho é apresentar um método diferenciado conhecido como algoritmo de ordenação de
dados por distribuição de chaves, um algoritmo antigo mas até hoje usado. A principal
finalidade desse algoritmo é dividir o conteúdo de uma posição do vetor em dígitos,
ordenando cada dígito separadamente começando pelas unidades. Pode até parecer um
método complicado, mas não é.
        Por ser usado desde a época dos cartões perfurados, sua codificação e lógica são bem
simples de entender. Para facilitar essa compreensão nós procuramos ilustrar o funcionamento
desse método com um exemplo explicativo, além de citarmos seus principais princípios e
fundamentos.




                                         Abstract

        Until then we know sort methods like Bubble Sort, Shake Sort and Quick Sort, that
scan array, compare two numbers and sort then as algorithm especification. Our objective in
this research is to present a different method, called Data Sort by Key Distribution, a old
algorithm but yet used. The algorithm goal is to divide a content of array position in digits,
sorting each digit separately beginning by units. Can seem complex, but it’s not.
        Because it is usually since punched cards time, its code and lógic are simple to
understand. To make easy understanding we try to illustrate functioning this method with a
example, and explain its main principles and fundamentals.




                                               4
Introdução

         Um dos mais antigos e triviais problemas é a classificação de dados, objetos, valores.
Para resolver esse problema surgiram diversas soluções. Diferentes algoritmos, com
características particulares, cada um tentando obter o máximo de eficiência.
         Nesta busca pelo título de “melhor algoritmo de ordenação de dados” não há um
vencedor, mas sim, algoritmos que apresentam um melhor desempenho dependendo da
situação em que são empregados e com que diretrizes, como por exemplo:
     •   Economizar o uso da memória ou do processamento?
     •   Um código menor em tamanho ou um mais rápido?
     •   Os dados a serem ordenados são altamente variáveis e o algoritmo deve ser o mais
         genérico possível ou o sistema implica em uma particularidade nos dados
         possibilitando a aplicação de um algoritmo otimizado?
         O analista deve considerar estas e outras questões e tomar uma decisão com base nos
algoritmos de que tem conhecimento e completa compreensão de funcionamento. Com esse
trabalho podemos colocar mais uma opção para o analista: a ordenação de dados por
distribuição de chaves.




                                               5
1 Origem
         O algoritmo de ordenação de dados por distribuição de chaves também é conhecido
pelos nomes radixsort, algoritmo das raízes e indexação direta. Esse método foi desenvolvido
inicialmente para as máquinas de ordenação de cartões perfurados. Essa máquinas eram
usadas em cálculos de dados, como por exemplo, o censo populacional. Depois os cartões
perfurados passaram a ser usados como entrada de dados em computadores digitais, mas se
tornaram obsoletos com o advento dos meios magnéticos. Mesmo assim o método de
ordenação de dados por distribuição de chaves sobreviveu devido à sua eficiência.

2 Base
         Ao contrário dos outros métodos, que comparam as chaves (números que servem de
base para a ordenação) e realizam trocas, o método por distribuição de chaves se baseia em
dois princípios simples que são característicos no nosso sistema numérico arábico.

2.1 Princípio da Limitação de Dígitos

        O número de dígitos (caracteres) usados em uma base numérica é limitado, mas a
quantidade de números que podem representar quando combinados é infinita.

        Tabela 1: Dígitos usados nas bases numéricas

 Base Numérica                   Dígitos (Caracteres)                  Intervalo de Valores
Decimal              0, 1, 2, 3, 4, 5, 6, 7, 8, 9                 - infinito à + infinito
Binária              0, 1                                         - infinito à + infinito
Hexadecimal          0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, - infinito à + infinito
                     F

        Com base nesses conhecimentos, o algoritmo de ordenação por distribuição de
chaves parte do princípio de já “conhecer” a ordenação correta dos dígitos, que como foi dito,
são uma quantidade limitada e conhecida. Assim ele “consegue” ordenar um vetor onde as
chaves de ordenação tenham apenas um dígito.

2.2 Princípio do Valor pela Posição

         Cada dígito em um sistema numérico tem um valor intrínseco, que é considerado
unidade. Mas quando combinamos mais de um dígito para representar um valor maior que um
único não conseguiria representar, o valor de cada dígito muda de acordo com a posição em
que ocupa no número.
         Vamos relembrar o sistema de representação dos valores dos dígitos de acordo com a
posição. Em um número na base B, cada dígito representa seu valor unitário vezes B elevado
na sua posição-1, partindo da direita para a esquerda, como mostra a tabela:

        Tabela 2: O valor que cada dígito representa depende da sua posição

      Base                                 Valor do Dígito na Posição
                           N                   3                 2                   1
B                  Dígito * B(N – 1)   Dígito * B2       Dígito * B1         Dígito * 1


                                              6
Decimal            Dígito * 10(N – 1)   Dígito * 100      Dígito * 10        Dígito * 1
Binária            Dígito * 2(N – 1)    Dígito * 4        Dígito * 2         Dígito * 1
Hexadecimal        Dígito * 16(N – 1)   Dígito * 256      Dígito * 16        Dígito * 1

           Por exemplo, no número 235 em decimal, o 2 tem valor 200, o 3 tem valor 30 e o 5 o
próprio valor de 5 unidades. Desta forma 235 representa o valor da soma 200+30+5.
           Sendo assim, os dígitos à direita de um dígito D são menos significativos que ele. Já
os dígitos à esquerda de D são mais significativos que ele (lembrando que a contagem da
posição de um dígito inicia na direita e segue para a esquerda). Isso ocorre independente do
valor dos dígitos em sua forma unitária. O termo significativo quer dizer valor.
           Desta forma, em um número formado por dígitos desconhecidos, como XYZ, em
uma base desconhecida, pode se ter a certeza que X>Y>Z. Como foi dito, isso independe dos
valores unitários de cada um dos dígitos. Mesmo sendo 1<2<3, no número 123, de acordo
com o valor posicional, 1>2>3, pois 1 representa uma centena, dois representa duas dezenas e
três, três unidades, na base decimal.

2.3 Aplicando os Dois Princípios

         Para a ordenação de chaves que tenham mais de um dígito (que é a situação real em
99% das vezes), estas devem ser divididas em partes de apenas um dígito. Assim o número
235 é dividido em 2, 3 e 5, e estes são analisados separadamente para serem ordenados.
         Inicia-se ordenando as chaves de acordo com o dígito da posição 1 (menos
significativo), utilizando para isso um algoritmo baseado no princípio da limitação de dígitos.
Passe então para o ordenação pelo dígito da posição 2, depois pelo dígito da posição 3 e assim
por diante, até o número máximo de dígitos que as chaves podem ter (posição do dígito mais
significativo).
         Essa ordem, do dígito menos significativo até o mais significativo, deve ser seguida
por causa do princípio do valor de um dígito pela sua posição, é o dígito mais significativo
que define se um número é maior ou menor que outro.

3 Algoritmo
          Para ilustrar o método que foi apresentado e como ele pode ser implementado vamos
utilizar algoritmo em pseudo código, também chamado de português estruturado.

3.1 Código

     Programa Principal:
     Início
        Para cada posição começando pela 1 até a máxima que as chaves podem ter
            Ordenar o vetor pelo dígito dessa posição
     Fim

     Ordenar Vetor pelo Dígito da Posição X:
     Início
        Criar um vetor chamado Fila, da posição 0 até a 9, de filas
        Para cada elemento do Vetor
            F = Obter o dígito desse elemento na Posição X
            Colocar esse elemento na Fila F



                                               7
A Posição Atual do Vetor é o seu início
        Para Y = 0 até 9
           Colocar cada elemento da Fila[Y] no Vetor a partir da Posição Atual
           A Posição Atual do Vetor é o seu próprio valor somado ao tamanho da Fila[Y]
     Fim

3.2 Aplicação

        Vamos executar o algoritmo acima em um vetor exemplo para verificar como é dada
a ordenação:

        Tabela 3: Vetor Exemplo

                  Posição                                   Dado (Chave)
1                                                  15
2                                                  2
3                                                  21
4                                                  11
5                                                  8
6                                                  1
7                                                  30
8                                                  9
9                                                  10
10                                                 6

Passo 1:
      Para cada posição começando pela 1 até a máxima que as chaves podem ter
            Ordenar o vetor pelo dígito dessa posição
         Neste vetor os dados (chaves) têm no máximo 2 dígitos: unidade e dezena. Então o
laço será executado duas vezes e a variável posição assumirá os valores 1, na primeira
execução e 2 na segunda. Dentro desse lado é chamada a subrotina que ordena o vetor de
acordo com o dígito da posição que passamos como parâmetro.

Passo 2:
      Ordenar Vetor pelo Dígito da Posição X:
      Início
         Criar um vetor chamado Fila, da posição 0 até a 9, de filas
         Já dentro da subrotina, o primeiro comando é criar um vetor de filas com tamanho
10, indo de 0 até 9.

        Tabela 4: O vetor de 10 filas criado

                    Fila                                      Elementos
0
1
2
3
4
5



                                               8
6
7
8
9

Passo 3:
      Para cada elemento do Vetor
            F = Obter o dígito desse elemento na Posição X
            Colocar esse elemento na Fila F
         Este laço executa uma ordenação pelo dígito da posição que foi passada como
parâmetro, neste primeiro caso, como foi visto no passo 1 será a posição 1, que corresponde à
casa das unidades. Para cada dado do vetor será verificado o dígito da casa das unidades e este
dado será colocado na fila correspondente a este dígito. Por exemplo, se o dígito das unidades
de um número for 6 esse número será colocado na fila 6 (vetor Fila na posição 6, Fila[6]).
Abaixo como fica o vetor de filas com a aplicação desse laço sobre o nosso vetor exemplo.

        Tabela 5: Ordenação do vetor pela casa das unidades

                     Fila                                         Elementos
0                                                 30, 10
1                                                 21, 11, 1
2                                                 2
3
4
5                                                 15
6                                                 6
7
8                                                 8
9                                                 9

Passo 4:
      A Posição Atual do Vetor é o seu início
      Para Y = 0 até 9
            Colocar cada elemento da Fila[Y] no Vetor a partir da Posição Atual
            A Posição Atual do Vetor é o seu próprio valor somado ao tamanho da Fila[Y]
         Esta parte da subrotina nada mais faz do que “unir” as filas formando um vetor
parcialmente ordenado, neste caso, ordenado apenas pelas unidades. Os dados de cada fila,
começando pela 0 serão colocados no nosso vetor exemplo. Caso a ordenação desejada fosse
em ordem decrescente a primeira fila a ser lida deveria ser a 9. O nosso vetor exemplo ficará
como mostra a tabela abaixo.

        Tabela 6: Vetor já ordenado pelas unidades

                   Posição                                          Dado
1                                                 30
2                                                 10
3                                                 21
4                                                 11
5                                                 1
6                                                 2


                                              9
7                                                15
8                                                6
9                                                8
10                                               9

Passo 5:
         Com o fim da subrotina de ordenação por dígito, volta-se ao programa principal e é
encerrada a primeira volta do laço descrito no Passo 1. Porém ainda não se atingiu a posição
máxima que as chaves podem ter, que é 2. Então o laço recomeça, agora com a posição
acrescida de 1, totalizando 2. Segue-se o que foi descrito nos Passos 2 e 3, mas como
mudamos o parâmetro da rotina de ordenação por dígito para 2, o nosso vetor será ordenado
pelos dígitos da segunda posição: a casa das dezenas. Ao final da execução dos Passos 2 e 3 o
vetor de filas ficará como mostrado na tabela.

           Tabela 7: Ordenação do vetor pela casa das dezenas

                      Fila                                        Elementos
0                                                1, 2, 6, 8, 9
1                                                10, 11, 15
2                                                21
3                                                30
4
5
6
7
8
9

Passo 6:
          É repetido o processo do passo 4, que forma o vetor novamente a partir das filas. O
fim da subrotina é atingido e novamente volta-se ao laço do programa principal. Como o vetor
já foi ordenado por todas as posições (unidade e dezena) o laço já atingiu o seu fim e o vetor
já está ordenado como abaixo.

           Tabela 8: Vetor já ordenado pelas unidades e pelas dezenas

                     Posição                                            Dado
1                                                1
2                                                2
3                                                6
4                                                8
5                                                9
6                                                10
7                                                11
8                                                15
9                                                21
10                                               30

4 Vantagens e Desvantagens


                                               10
Pelas características desse algoritmo ele apresenta algumas vantagens e desvantagens
que serão vistas a seguir.

4.1 Vantagens

     •   Utiliza pouco processamento (comparações) em relação aos outros algoritmos;
     •   Rápido para dados com poucos dígitos;

4.2 Desvantagens

     •   É necessário saber de antemão o número máximo de dígitos que os dados podem ter,
         talvez com o uso de um laço, o que implica em uma varredura a mais do vetor;
     •   Os passos intermediários, como a separação do dado em dígitos, podem usar mais
         processamento que a própria ordenação.




                                            11
Conclusão

         É interessante notar como certas coisas não perdem a utilidade. O algoritmo de
ordenação por distribuição de chaves ainda é bastante usado por sua simplicidade e
funcionalidade, e vem sendo usado desde os primórdios da computação. Seu método de
ordenação é simples, porém eficaz, utilizando apenas filas e o vetor que se está ordenando.
         Não podemos dizer que este método é ultrapassado, velho ou etc. . Devido a sua
simplicidade, ele ainda vai ser muito usado, não tanto como o veloz Quick Sort, mas sua
utilidade esta longe de acabar.
         Concluímos que este método teve grande importância bem no começo da era da
Informática, na época dos cartões perfurados. Mas devido a sua eficiência, ele sobreviveu e
continua sendo útil até hoje. Realmente é um algoritmo eficiente e realmente comprovamos
isso nesse trabalho. É, nem sempre o novo é melhor que o velho.




                                             12
Bibliografia

1 VILLAS, Marcos Vianna et al. Estruturas de Dados: Conceitos e Técnicas de
     Implementação. Rio de Janeiro: Campus, 1993.


2 LOPES, Arthur Vargas. Estruturas de Dados para a Construção de Software: Volume 2.
     Canoas: Ulbra, 1999.


3 TENENBAUM, Aaron M.; LANGSAN, Yedidyah; AUGENSTEIN, Moshe J. Estruturas de
     Dados Usando C. São Paulo: Makron, 1995.


4 VELOSO, Paulo et al. Estruturas de Dados. Rio de Janeiro: Campus, 1983.


5 MÜLLER, Daniel Nehme. Ordenação de Dados. Canoas. Disponível por WWW em:
     http://www.ulbra.tche.br/~danielnm/ed/C/polC.html (03/2002).




                                               13

Mais conteúdo relacionado

Mais procurados

Normas para elaboração de um relatório científico
Normas para elaboração de um relatório científicoNormas para elaboração de um relatório científico
Normas para elaboração de um relatório científico
Carlos Moutinho
 
Cartografia aula 9 - sistemas de coordenadas - utm
Cartografia   aula 9 - sistemas de coordenadas - utmCartografia   aula 9 - sistemas de coordenadas - utm
Cartografia aula 9 - sistemas de coordenadas - utm
Fabrício Almeida
 
Modelo projeto-mestrado
Modelo projeto-mestradoModelo projeto-mestrado
Modelo projeto-mestrado
pery-ap
 

Mais procurados (20)

Apostila topografia nova
Apostila topografia novaApostila topografia nova
Apostila topografia nova
 
Introdução à Programação
Introdução à ProgramaçãoIntrodução à Programação
Introdução à Programação
 
Exercícios Extras
Exercícios ExtrasExercícios Extras
Exercícios Extras
 
Estrutura de dados - Lista Circular Duplamente Encadeada e Matriz Esparsa
Estrutura de dados - Lista Circular Duplamente Encadeada e Matriz EsparsaEstrutura de dados - Lista Circular Duplamente Encadeada e Matriz Esparsa
Estrutura de dados - Lista Circular Duplamente Encadeada e Matriz Esparsa
 
Modelo de artigo cientifico
Modelo de artigo cientificoModelo de artigo cientifico
Modelo de artigo cientifico
 
Normas para elaboração de um relatório científico
Normas para elaboração de um relatório científicoNormas para elaboração de um relatório científico
Normas para elaboração de um relatório científico
 
Minicurso tikz
Minicurso tikzMinicurso tikz
Minicurso tikz
 
Cartografia aula 9 - sistemas de coordenadas - utm
Cartografia   aula 9 - sistemas de coordenadas - utmCartografia   aula 9 - sistemas de coordenadas - utm
Cartografia aula 9 - sistemas de coordenadas - utm
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaEstrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
 
Caderno do-protagonista
Caderno do-protagonistaCaderno do-protagonista
Caderno do-protagonista
 
MÉTODOS E TÉCNICAS DE PESQUISA
MÉTODOS E TÉCNICAS DE PESQUISAMÉTODOS E TÉCNICAS DE PESQUISA
MÉTODOS E TÉCNICAS DE PESQUISA
 
Modelo projeto-mestrado
Modelo projeto-mestradoModelo projeto-mestrado
Modelo projeto-mestrado
 
Slides para Apresentação acadêmica
Slides para Apresentação acadêmicaSlides para Apresentação acadêmica
Slides para Apresentação acadêmica
 
Aula 9. modelo de plano de aula
Aula 9. modelo de plano de aulaAula 9. modelo de plano de aula
Aula 9. modelo de plano de aula
 
Drenagem Superficial
Drenagem SuperficialDrenagem Superficial
Drenagem Superficial
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 
Aula Lógica de Programação - cap1
Aula Lógica de Programação - cap1 Aula Lógica de Programação - cap1
Aula Lógica de Programação - cap1
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Relatório de química
Relatório de químicaRelatório de química
Relatório de química
 

Destaque

Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenação
Daiana de Ávila
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.
Júlio Rocha
 

Destaque (12)

Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Análise de Algoritmos de Ordenação Interna
Análise de Algoritmos de Ordenação InternaAnálise de Algoritmos de Ordenação Interna
Análise de Algoritmos de Ordenação Interna
 
Comparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de OrdenaçãoComparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de Ordenação
 
Análise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenaçãoAnálise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenação
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenação
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenação
 
Metodos de ordenação estrutura de dados
Metodos de ordenação   estrutura de dadosMetodos de ordenação   estrutura de dados
Metodos de ordenação estrutura de dados
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.
 
Ordenação
OrdenaçãoOrdenação
Ordenação
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
métodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sortmétodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sort
 
Faça Apresentações! Não Faça Slides!
Faça Apresentações! Não Faça Slides!Faça Apresentações! Não Faça Slides!
Faça Apresentações! Não Faça Slides!
 

Semelhante a Ordenação de Dados por Distribuição de Chaves

20150323 qgis28 remocao_de_valores_negativos_no_mde
20150323 qgis28 remocao_de_valores_negativos_no_mde20150323 qgis28 remocao_de_valores_negativos_no_mde
20150323 qgis28 remocao_de_valores_negativos_no_mde
Jorge Santos
 
Algoritmo_ID3_e_C.45_Gilcimar
Algoritmo_ID3_e_C.45_GilcimarAlgoritmo_ID3_e_C.45_Gilcimar
Algoritmo_ID3_e_C.45_Gilcimar
iaudesc
 
O processamento binário
O processamento binárioO processamento binário
O processamento binário
cabaldreams
 
Logica Algoritmo 03 Tipos Expressoes Variaveis Operadores
Logica Algoritmo 03 Tipos Expressoes Variaveis OperadoresLogica Algoritmo 03 Tipos Expressoes Variaveis Operadores
Logica Algoritmo 03 Tipos Expressoes Variaveis Operadores
Regis Magalhães
 
Algebra linear i cunha; figueiredo
Algebra linear i   cunha; figueiredoAlgebra linear i   cunha; figueiredo
Algebra linear i cunha; figueiredo
lucio-vicente
 

Semelhante a Ordenação de Dados por Distribuição de Chaves (20)

Cálculo técnico aplicado a mecanica
Cálculo técnico aplicado a mecanicaCálculo técnico aplicado a mecanica
Cálculo técnico aplicado a mecanica
 
Aula 03 - Identificando e tratando padrões
Aula 03 - Identificando e tratando padrõesAula 03 - Identificando e tratando padrões
Aula 03 - Identificando e tratando padrões
 
Estrutura de dados 2
Estrutura de dados 2Estrutura de dados 2
Estrutura de dados 2
 
Tabela de conversao
Tabela de conversaoTabela de conversao
Tabela de conversao
 
Eletrônica digital (introdução aos sistemas digitais)
Eletrônica digital (introdução aos sistemas digitais)Eletrônica digital (introdução aos sistemas digitais)
Eletrônica digital (introdução aos sistemas digitais)
 
Apostila excel 2010 avançado
Apostila excel 2010 avançadoApostila excel 2010 avançado
Apostila excel 2010 avançado
 
Classificação de Documentos
Classificação de DocumentosClassificação de Documentos
Classificação de Documentos
 
20150323 qgis28 remocao_de_valores_negativos_no_mde
20150323 qgis28 remocao_de_valores_negativos_no_mde20150323 qgis28 remocao_de_valores_negativos_no_mde
20150323 qgis28 remocao_de_valores_negativos_no_mde
 
QGIS 2.8: Substituição de Pixels Negativos no MDE
QGIS 2.8: Substituição de Pixels Negativos no MDEQGIS 2.8: Substituição de Pixels Negativos no MDE
QGIS 2.8: Substituição de Pixels Negativos no MDE
 
Algoritmo_ID3_e_C.45_Gilcimar
Algoritmo_ID3_e_C.45_GilcimarAlgoritmo_ID3_e_C.45_Gilcimar
Algoritmo_ID3_e_C.45_Gilcimar
 
Lógica de programação e algoritmos
Lógica de programação e algoritmosLógica de programação e algoritmos
Lógica de programação e algoritmos
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)
 
Sistemas de numeração
Sistemas de numeraçãoSistemas de numeração
Sistemas de numeração
 
SysSorting Professional
SysSorting ProfessionalSysSorting Professional
SysSorting Professional
 
Ic na06
Ic na06Ic na06
Ic na06
 
kNN Algorithm
kNN AlgorithmkNN Algorithm
kNN Algorithm
 
O processamento binário
O processamento binárioO processamento binário
O processamento binário
 
Logica Algoritmo 03 Tipos Expressoes Variaveis Operadores
Logica Algoritmo 03 Tipos Expressoes Variaveis OperadoresLogica Algoritmo 03 Tipos Expressoes Variaveis Operadores
Logica Algoritmo 03 Tipos Expressoes Variaveis Operadores
 
Ap matemática m1
Ap matemática m1Ap matemática m1
Ap matemática m1
 
Algebra linear i cunha; figueiredo
Algebra linear i   cunha; figueiredoAlgebra linear i   cunha; figueiredo
Algebra linear i cunha; figueiredo
 

Mais de Mauricio Volkweis Astiazara

Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
Mauricio Volkweis Astiazara
 
Comparação de Algoritmos Baseados em Q-Learning
Comparação de Algoritmos Baseados em Q-LearningComparação de Algoritmos Baseados em Q-Learning
Comparação de Algoritmos Baseados em Q-Learning
Mauricio Volkweis Astiazara
 

Mais de Mauricio Volkweis Astiazara (20)

Como Programar Melhor em Java
Como Programar Melhor em JavaComo Programar Melhor em Java
Como Programar Melhor em Java
 
Sistemas Imunológicos Artificiais
Sistemas Imunológicos ArtificiaisSistemas Imunológicos Artificiais
Sistemas Imunológicos Artificiais
 
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
 
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
 
Comparação de Algoritmos Baseados em Q-Learning
Comparação de Algoritmos Baseados em Q-LearningComparação de Algoritmos Baseados em Q-Learning
Comparação de Algoritmos Baseados em Q-Learning
 
Classificador de Documentos Naïve Bayes
Classificador de Documentos Naïve BayesClassificador de Documentos Naïve Bayes
Classificador de Documentos Naïve Bayes
 
Visão Computacional
Visão ComputacionalVisão Computacional
Visão Computacional
 
Sistema de Recomendação de Páginas sobre Saúde
Sistema de Recomendação de Páginas sobre SaúdeSistema de Recomendação de Páginas sobre Saúde
Sistema de Recomendação de Páginas sobre Saúde
 
Sistema de Recomendação de Páginas sobre Saúde
Sistema de Recomendação de Páginas sobre SaúdeSistema de Recomendação de Páginas sobre Saúde
Sistema de Recomendação de Páginas sobre Saúde
 
Processamento de Imagens
Processamento de ImagensProcessamento de Imagens
Processamento de Imagens
 
Percepção, Movimento e Ação
Percepção, Movimento e AçãoPercepção, Movimento e Ação
Percepção, Movimento e Ação
 
Memória e Aprendizagem
Memória e AprendizagemMemória e Aprendizagem
Memória e Aprendizagem
 
Gerência de Requisitos
Gerência de RequisitosGerência de Requisitos
Gerência de Requisitos
 
Testes de Sistema
Testes de SistemaTestes de Sistema
Testes de Sistema
 
Telefonia Móvel
Telefonia MóvelTelefonia Móvel
Telefonia Móvel
 
Telefonia Móvel
Telefonia MóvelTelefonia Móvel
Telefonia Móvel
 
Realidade Virtual
Realidade VirtualRealidade Virtual
Realidade Virtual
 
Protótipo de Simulador de Elevadores
Protótipo de Simulador de ElevadoresProtótipo de Simulador de Elevadores
Protótipo de Simulador de Elevadores
 
Protótipo de Simulador de Elevadores
Protótipo de Simulador de ElevadoresProtótipo de Simulador de Elevadores
Protótipo de Simulador de Elevadores
 
Planejamento de Informática
Planejamento de InformáticaPlanejamento de Informática
Planejamento de Informática
 

Último

Último (8)

Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

Ordenação de Dados por Distribuição de Chaves

  • 1. UNIVERSIDADE LUTERANA DO BRASIL CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE SISTEMAS DE INFORMAÇÃO ORDENAÇÃO DE DADOS POR DISTRIBUIÇÃO DE CHAVES IGOR CASA NOVA DOS SANTOS UÍLSON ZANETTI GOMES MAURICIO VOLKWEIS ASTIAZARA HENRIQUE OLIVEIRA Estrutura de Dados II Torres, Abril de 2002
  • 2. Sumário Lista de Tabelas..................................................................................................................................... 3 Resumo.................................................................................................................................................. 4 Introdução............................................................................................................................................... 5 1 Origem................................................................................................................................................. 6 2 Base.................................................................................................................................................... 6 3 Algoritmo............................................................................................................................................. 7 4 Vantagens e Desvantagens............................................................................................................... 10 Conclusão............................................................................................................................................. 12 Bibliografia............................................................................................................................................ 13 2
  • 3. Lista de Tabelas Lista de Tabelas..................................................................................................................................... 3 Resumo.................................................................................................................................................. 4 Introdução............................................................................................................................................... 5 1 Origem................................................................................................................................................. 6 2 Base.................................................................................................................................................... 6 3 Algoritmo............................................................................................................................................. 7 4 Vantagens e Desvantagens............................................................................................................... 10 Conclusão............................................................................................................................................. 12 Bibliografia............................................................................................................................................ 13 3
  • 4. Resumo Até agora conhecíamos métodos variados de ordenação como o Bubble Sort, Shake Sort ou o Quick Sort, que na verdade percorriam o vetor, comparavam dois números e ordenavam de acordo com as especificações do algoritmo. Nosso principal objetivo nesse trabalho é apresentar um método diferenciado conhecido como algoritmo de ordenação de dados por distribuição de chaves, um algoritmo antigo mas até hoje usado. A principal finalidade desse algoritmo é dividir o conteúdo de uma posição do vetor em dígitos, ordenando cada dígito separadamente começando pelas unidades. Pode até parecer um método complicado, mas não é. Por ser usado desde a época dos cartões perfurados, sua codificação e lógica são bem simples de entender. Para facilitar essa compreensão nós procuramos ilustrar o funcionamento desse método com um exemplo explicativo, além de citarmos seus principais princípios e fundamentos. Abstract Until then we know sort methods like Bubble Sort, Shake Sort and Quick Sort, that scan array, compare two numbers and sort then as algorithm especification. Our objective in this research is to present a different method, called Data Sort by Key Distribution, a old algorithm but yet used. The algorithm goal is to divide a content of array position in digits, sorting each digit separately beginning by units. Can seem complex, but it’s not. Because it is usually since punched cards time, its code and lógic are simple to understand. To make easy understanding we try to illustrate functioning this method with a example, and explain its main principles and fundamentals. 4
  • 5. Introdução Um dos mais antigos e triviais problemas é a classificação de dados, objetos, valores. Para resolver esse problema surgiram diversas soluções. Diferentes algoritmos, com características particulares, cada um tentando obter o máximo de eficiência. Nesta busca pelo título de “melhor algoritmo de ordenação de dados” não há um vencedor, mas sim, algoritmos que apresentam um melhor desempenho dependendo da situação em que são empregados e com que diretrizes, como por exemplo: • Economizar o uso da memória ou do processamento? • Um código menor em tamanho ou um mais rápido? • Os dados a serem ordenados são altamente variáveis e o algoritmo deve ser o mais genérico possível ou o sistema implica em uma particularidade nos dados possibilitando a aplicação de um algoritmo otimizado? O analista deve considerar estas e outras questões e tomar uma decisão com base nos algoritmos de que tem conhecimento e completa compreensão de funcionamento. Com esse trabalho podemos colocar mais uma opção para o analista: a ordenação de dados por distribuição de chaves. 5
  • 6. 1 Origem O algoritmo de ordenação de dados por distribuição de chaves também é conhecido pelos nomes radixsort, algoritmo das raízes e indexação direta. Esse método foi desenvolvido inicialmente para as máquinas de ordenação de cartões perfurados. Essa máquinas eram usadas em cálculos de dados, como por exemplo, o censo populacional. Depois os cartões perfurados passaram a ser usados como entrada de dados em computadores digitais, mas se tornaram obsoletos com o advento dos meios magnéticos. Mesmo assim o método de ordenação de dados por distribuição de chaves sobreviveu devido à sua eficiência. 2 Base Ao contrário dos outros métodos, que comparam as chaves (números que servem de base para a ordenação) e realizam trocas, o método por distribuição de chaves se baseia em dois princípios simples que são característicos no nosso sistema numérico arábico. 2.1 Princípio da Limitação de Dígitos O número de dígitos (caracteres) usados em uma base numérica é limitado, mas a quantidade de números que podem representar quando combinados é infinita. Tabela 1: Dígitos usados nas bases numéricas Base Numérica Dígitos (Caracteres) Intervalo de Valores Decimal 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 - infinito à + infinito Binária 0, 1 - infinito à + infinito Hexadecimal 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, - infinito à + infinito F Com base nesses conhecimentos, o algoritmo de ordenação por distribuição de chaves parte do princípio de já “conhecer” a ordenação correta dos dígitos, que como foi dito, são uma quantidade limitada e conhecida. Assim ele “consegue” ordenar um vetor onde as chaves de ordenação tenham apenas um dígito. 2.2 Princípio do Valor pela Posição Cada dígito em um sistema numérico tem um valor intrínseco, que é considerado unidade. Mas quando combinamos mais de um dígito para representar um valor maior que um único não conseguiria representar, o valor de cada dígito muda de acordo com a posição em que ocupa no número. Vamos relembrar o sistema de representação dos valores dos dígitos de acordo com a posição. Em um número na base B, cada dígito representa seu valor unitário vezes B elevado na sua posição-1, partindo da direita para a esquerda, como mostra a tabela: Tabela 2: O valor que cada dígito representa depende da sua posição Base Valor do Dígito na Posição N 3 2 1 B Dígito * B(N – 1) Dígito * B2 Dígito * B1 Dígito * 1 6
  • 7. Decimal Dígito * 10(N – 1) Dígito * 100 Dígito * 10 Dígito * 1 Binária Dígito * 2(N – 1) Dígito * 4 Dígito * 2 Dígito * 1 Hexadecimal Dígito * 16(N – 1) Dígito * 256 Dígito * 16 Dígito * 1 Por exemplo, no número 235 em decimal, o 2 tem valor 200, o 3 tem valor 30 e o 5 o próprio valor de 5 unidades. Desta forma 235 representa o valor da soma 200+30+5. Sendo assim, os dígitos à direita de um dígito D são menos significativos que ele. Já os dígitos à esquerda de D são mais significativos que ele (lembrando que a contagem da posição de um dígito inicia na direita e segue para a esquerda). Isso ocorre independente do valor dos dígitos em sua forma unitária. O termo significativo quer dizer valor. Desta forma, em um número formado por dígitos desconhecidos, como XYZ, em uma base desconhecida, pode se ter a certeza que X>Y>Z. Como foi dito, isso independe dos valores unitários de cada um dos dígitos. Mesmo sendo 1<2<3, no número 123, de acordo com o valor posicional, 1>2>3, pois 1 representa uma centena, dois representa duas dezenas e três, três unidades, na base decimal. 2.3 Aplicando os Dois Princípios Para a ordenação de chaves que tenham mais de um dígito (que é a situação real em 99% das vezes), estas devem ser divididas em partes de apenas um dígito. Assim o número 235 é dividido em 2, 3 e 5, e estes são analisados separadamente para serem ordenados. Inicia-se ordenando as chaves de acordo com o dígito da posição 1 (menos significativo), utilizando para isso um algoritmo baseado no princípio da limitação de dígitos. Passe então para o ordenação pelo dígito da posição 2, depois pelo dígito da posição 3 e assim por diante, até o número máximo de dígitos que as chaves podem ter (posição do dígito mais significativo). Essa ordem, do dígito menos significativo até o mais significativo, deve ser seguida por causa do princípio do valor de um dígito pela sua posição, é o dígito mais significativo que define se um número é maior ou menor que outro. 3 Algoritmo Para ilustrar o método que foi apresentado e como ele pode ser implementado vamos utilizar algoritmo em pseudo código, também chamado de português estruturado. 3.1 Código Programa Principal: Início Para cada posição começando pela 1 até a máxima que as chaves podem ter Ordenar o vetor pelo dígito dessa posição Fim Ordenar Vetor pelo Dígito da Posição X: Início Criar um vetor chamado Fila, da posição 0 até a 9, de filas Para cada elemento do Vetor F = Obter o dígito desse elemento na Posição X Colocar esse elemento na Fila F 7
  • 8. A Posição Atual do Vetor é o seu início Para Y = 0 até 9 Colocar cada elemento da Fila[Y] no Vetor a partir da Posição Atual A Posição Atual do Vetor é o seu próprio valor somado ao tamanho da Fila[Y] Fim 3.2 Aplicação Vamos executar o algoritmo acima em um vetor exemplo para verificar como é dada a ordenação: Tabela 3: Vetor Exemplo Posição Dado (Chave) 1 15 2 2 3 21 4 11 5 8 6 1 7 30 8 9 9 10 10 6 Passo 1: Para cada posição começando pela 1 até a máxima que as chaves podem ter Ordenar o vetor pelo dígito dessa posição Neste vetor os dados (chaves) têm no máximo 2 dígitos: unidade e dezena. Então o laço será executado duas vezes e a variável posição assumirá os valores 1, na primeira execução e 2 na segunda. Dentro desse lado é chamada a subrotina que ordena o vetor de acordo com o dígito da posição que passamos como parâmetro. Passo 2: Ordenar Vetor pelo Dígito da Posição X: Início Criar um vetor chamado Fila, da posição 0 até a 9, de filas Já dentro da subrotina, o primeiro comando é criar um vetor de filas com tamanho 10, indo de 0 até 9. Tabela 4: O vetor de 10 filas criado Fila Elementos 0 1 2 3 4 5 8
  • 9. 6 7 8 9 Passo 3: Para cada elemento do Vetor F = Obter o dígito desse elemento na Posição X Colocar esse elemento na Fila F Este laço executa uma ordenação pelo dígito da posição que foi passada como parâmetro, neste primeiro caso, como foi visto no passo 1 será a posição 1, que corresponde à casa das unidades. Para cada dado do vetor será verificado o dígito da casa das unidades e este dado será colocado na fila correspondente a este dígito. Por exemplo, se o dígito das unidades de um número for 6 esse número será colocado na fila 6 (vetor Fila na posição 6, Fila[6]). Abaixo como fica o vetor de filas com a aplicação desse laço sobre o nosso vetor exemplo. Tabela 5: Ordenação do vetor pela casa das unidades Fila Elementos 0 30, 10 1 21, 11, 1 2 2 3 4 5 15 6 6 7 8 8 9 9 Passo 4: A Posição Atual do Vetor é o seu início Para Y = 0 até 9 Colocar cada elemento da Fila[Y] no Vetor a partir da Posição Atual A Posição Atual do Vetor é o seu próprio valor somado ao tamanho da Fila[Y] Esta parte da subrotina nada mais faz do que “unir” as filas formando um vetor parcialmente ordenado, neste caso, ordenado apenas pelas unidades. Os dados de cada fila, começando pela 0 serão colocados no nosso vetor exemplo. Caso a ordenação desejada fosse em ordem decrescente a primeira fila a ser lida deveria ser a 9. O nosso vetor exemplo ficará como mostra a tabela abaixo. Tabela 6: Vetor já ordenado pelas unidades Posição Dado 1 30 2 10 3 21 4 11 5 1 6 2 9
  • 10. 7 15 8 6 9 8 10 9 Passo 5: Com o fim da subrotina de ordenação por dígito, volta-se ao programa principal e é encerrada a primeira volta do laço descrito no Passo 1. Porém ainda não se atingiu a posição máxima que as chaves podem ter, que é 2. Então o laço recomeça, agora com a posição acrescida de 1, totalizando 2. Segue-se o que foi descrito nos Passos 2 e 3, mas como mudamos o parâmetro da rotina de ordenação por dígito para 2, o nosso vetor será ordenado pelos dígitos da segunda posição: a casa das dezenas. Ao final da execução dos Passos 2 e 3 o vetor de filas ficará como mostrado na tabela. Tabela 7: Ordenação do vetor pela casa das dezenas Fila Elementos 0 1, 2, 6, 8, 9 1 10, 11, 15 2 21 3 30 4 5 6 7 8 9 Passo 6: É repetido o processo do passo 4, que forma o vetor novamente a partir das filas. O fim da subrotina é atingido e novamente volta-se ao laço do programa principal. Como o vetor já foi ordenado por todas as posições (unidade e dezena) o laço já atingiu o seu fim e o vetor já está ordenado como abaixo. Tabela 8: Vetor já ordenado pelas unidades e pelas dezenas Posição Dado 1 1 2 2 3 6 4 8 5 9 6 10 7 11 8 15 9 21 10 30 4 Vantagens e Desvantagens 10
  • 11. Pelas características desse algoritmo ele apresenta algumas vantagens e desvantagens que serão vistas a seguir. 4.1 Vantagens • Utiliza pouco processamento (comparações) em relação aos outros algoritmos; • Rápido para dados com poucos dígitos; 4.2 Desvantagens • É necessário saber de antemão o número máximo de dígitos que os dados podem ter, talvez com o uso de um laço, o que implica em uma varredura a mais do vetor; • Os passos intermediários, como a separação do dado em dígitos, podem usar mais processamento que a própria ordenação. 11
  • 12. Conclusão É interessante notar como certas coisas não perdem a utilidade. O algoritmo de ordenação por distribuição de chaves ainda é bastante usado por sua simplicidade e funcionalidade, e vem sendo usado desde os primórdios da computação. Seu método de ordenação é simples, porém eficaz, utilizando apenas filas e o vetor que se está ordenando. Não podemos dizer que este método é ultrapassado, velho ou etc. . Devido a sua simplicidade, ele ainda vai ser muito usado, não tanto como o veloz Quick Sort, mas sua utilidade esta longe de acabar. Concluímos que este método teve grande importância bem no começo da era da Informática, na época dos cartões perfurados. Mas devido a sua eficiência, ele sobreviveu e continua sendo útil até hoje. Realmente é um algoritmo eficiente e realmente comprovamos isso nesse trabalho. É, nem sempre o novo é melhor que o velho. 12
  • 13. Bibliografia 1 VILLAS, Marcos Vianna et al. Estruturas de Dados: Conceitos e Técnicas de Implementação. Rio de Janeiro: Campus, 1993. 2 LOPES, Arthur Vargas. Estruturas de Dados para a Construção de Software: Volume 2. Canoas: Ulbra, 1999. 3 TENENBAUM, Aaron M.; LANGSAN, Yedidyah; AUGENSTEIN, Moshe J. Estruturas de Dados Usando C. São Paulo: Makron, 1995. 4 VELOSO, Paulo et al. Estruturas de Dados. Rio de Janeiro: Campus, 1983. 5 MÜLLER, Daniel Nehme. Ordenação de Dados. Canoas. Disponível por WWW em: http://www.ulbra.tche.br/~danielnm/ed/C/polC.html (03/2002). 13