• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Ordenação de Dados por Distribuição de Chaves
 

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

on

  • 1,228 views

Baixe mais arquivos em http://pastadomau.wikidot.com.

Baixe mais arquivos em http://pastadomau.wikidot.com.
Trabalho que apresenta o algoritmo de ordenação de dados por distribuição de chaves.

Statistics

Views

Total Views
1,228
Views on SlideShare
1,228
Embed Views
0

Actions

Likes
0
Downloads
16
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • UNIVERSIDADE LUTERANA DO BRASIL CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE SISTEMAS DE INFORMAÇÃOORDENAÇÃ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árioLista de Tabelas..................................................................................................................................... 3Resumo.................................................................................................................................................. 4Introdução............................................................................................................................................... 51 Origem................................................................................................................................................. 62 Base.................................................................................................................................................... 63 Algoritmo............................................................................................................................................. 74 Vantagens e Desvantagens............................................................................................................... 10Conclusão............................................................................................................................................. 12Bibliografia............................................................................................................................................ 13 2
    • Lista de TabelasLista de Tabelas..................................................................................................................................... 3Resumo.................................................................................................................................................. 4Introdução............................................................................................................................................... 51 Origem................................................................................................................................................. 62 Base.................................................................................................................................................... 63 Algoritmo............................................................................................................................................. 74 Vantagens e Desvantagens............................................................................................................... 10Conclusão............................................................................................................................................. 12Bibliografia............................................................................................................................................ 13 3
    • Resumo Até agora conhecíamos métodos variados de ordenação como o Bubble Sort, ShakeSort ou o Quick Sort, que na verdade percorriam o vetor, comparavam dois números eordenavam de acordo com as especificações do algoritmo. Nosso principal objetivo nessetrabalho é apresentar um método diferenciado conhecido como algoritmo de ordenação dedados por distribuição de chaves, um algoritmo antigo mas até hoje usado. A principalfinalidade 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 ummétodo complicado, mas não é. Por ser usado desde a época dos cartões perfurados, sua codificação e lógica são bemsimples de entender. Para facilitar essa compreensão nós procuramos ilustrar o funcionamentodesse método com um exemplo explicativo, além de citarmos seus principais princípios efundamentos. Abstract Until then we know sort methods like Bubble Sort, Shake Sort and Quick Sort, thatscan array, compare two numbers and sort then as algorithm especification. Our objective inthis research is to present a different method, called Data Sort by Key Distribution, a oldalgorithm 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 tounderstand. To make easy understanding we try to illustrate functioning this method with aexample, 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, comcaracterí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á umvencedor, mas sim, algoritmos que apresentam um melhor desempenho dependendo dasituaçã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 nosalgoritmos de que tem conhecimento e completa compreensão de funcionamento. Com essetrabalho podemos colocar mais uma opção para o analista: a ordenação de dados pordistribuição de chaves. 5
    • 1 Origem O algoritmo de ordenação de dados por distribuição de chaves também é conhecidopelos nomes radixsort, algoritmo das raízes e indexação direta. Esse método foi desenvolvidoinicialmente para as máquinas de ordenação de cartões perfurados. Essa máquinas eramusadas em cálculos de dados, como por exemplo, o censo populacional. Depois os cartõesperfurados passaram a ser usados como entrada de dados em computadores digitais, mas setornaram obsoletos com o advento dos meios magnéticos. Mesmo assim o método deordenaçã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 debase para a ordenação) e realizam trocas, o método por distribuição de chaves se baseia emdois 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 aquantidade 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 ValoresDecimal 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 - infinito à + infinitoBinária 0, 1 - infinito à + infinitoHexadecimal 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 dechaves 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 aschaves 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 é consideradounidade. 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 emque ocupa no número. Vamos relembrar o sistema de representação dos valores dos dígitos de acordo com aposição. Em um número na base B, cada dígito representa seu valor unitário vezes B elevadona 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 1B 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 * 1Binária Dígito * 2(N – 1) Dígito * 4 Dígito * 2 Dígito * 1Hexadecimal 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 opró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 daposição de um dígito inicia na direita e segue para a esquerda). Isso ocorre independente dovalor 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, emuma base desconhecida, pode se ter a certeza que X>Y>Z. Como foi dito, isso independe dosvalores unitários de cada um dos dígitos. Mesmo sendo 1<2<3, no número 123, de acordocom o valor posicional, 1>2>3, pois 1 representa uma centena, dois representa duas dezenas etrê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 em99% das vezes), estas devem ser divididas em partes de apenas um dígito. Assim o número235 é 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 (menossignificativo), 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 assimpor diante, até o número máximo de dígitos que as chaves podem ter (posição do dígito maissignificativo). Essa ordem, do dígito menos significativo até o mais significativo, deve ser seguidapor causa do princípio do valor de um dígito pela sua posição, é o dígito mais significativoque 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 vamosutilizar 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] Fim3.2 Aplicação Vamos executar o algoritmo acima em um vetor exemplo para verificar como é dadaa ordenação: Tabela 3: Vetor Exemplo Posição Dado (Chave)1 152 23 214 115 86 17 308 99 1010 6Passo 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 olaço será executado duas vezes e a variável posição assumirá os valores 1, na primeiraexecução e 2 na segunda. Dentro desse lado é chamada a subrotina que ordena o vetor deacordo 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 tamanho10, indo de 0 até 9. Tabela 4: O vetor de 10 filas criado Fila Elementos012345 8
    • 6789Passo 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 comoparâ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 estedado será colocado na fila correspondente a este dígito. Por exemplo, se o dígito das unidadesde 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 Elementos0 30, 101 21, 11, 12 2345 156 678 89 9Passo 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 vetorparcialmente 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 fosseem 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 Dado1 302 103 214 115 16 2 9
    • 7 158 69 810 9Passo 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çãomáxima que as chaves podem ter, que é 2. Então o laço recomeça, agora com a posiçãoacrescida de 1, totalizando 2. Segue-se o que foi descrito nos Passos 2 e 3, mas comomudamos o parâmetro da rotina de ordenação por dígito para 2, o nosso vetor será ordenadopelos dígitos da segunda posição: a casa das dezenas. Ao final da execução dos Passos 2 e 3 ovetor de filas ficará como mostrado na tabela. Tabela 7: Ordenação do vetor pela casa das dezenas Fila Elementos0 1, 2, 6, 8, 91 10, 11, 152 213 30456789Passo 6: É repetido o processo do passo 4, que forma o vetor novamente a partir das filas. Ofim da subrotina é atingido e novamente volta-se ao laço do programa principal. Como o vetorjá foi ordenado por todas as posições (unidade e dezena) o laço já atingiu o seu fim e o vetorjá está ordenado como abaixo. Tabela 8: Vetor já ordenado pelas unidades e pelas dezenas Posição Dado1 12 23 64 85 96 107 118 159 2110 304 Vantagens e Desvantagens 10
    • Pelas características desse algoritmo ele apresenta algumas vantagens e desvantagensque 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 deordenação por distribuição de chaves ainda é bastante usado por sua simplicidade efuncionalidade, e vem sendo usado desde os primórdios da computação. Seu método deordenaçã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 suasimplicidade, ele ainda vai ser muito usado, não tanto como o veloz Quick Sort, mas suautilidade esta longe de acabar. Concluímos que este método teve grande importância bem no começo da era daInformática, na época dos cartões perfurados. Mas devido a sua eficiência, ele sobreviveu econtinua sendo útil até hoje. Realmente é um algoritmo eficiente e realmente comprovamosisso nesse trabalho. É, nem sempre o novo é melhor que o velho. 12
    • Bibliografia1 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