Bucket Sorter

 

Introdução

A maior parte dos algoritimos de ordenação trabalha com comparações entre valores, essas comparações tomam algum tempo de processamento e no pior caso devem ser feitas n comparações no mínimo.

 

Objetivos

O objetivo é implementar um circuito que faça ordenação sem utilizar nenhuma comparação, a coisa deve funcionar da seguinte forma, n dados entram no circuito e eles são pré - ordenados na hora que entram sem gastar tempo efetivo algum para ordenar.

Isso e possível construindo algo semelhante a um bucketsort usando multiplexadores e algumas portas, só complicando na hora de dar a saída, veja o esboço do funcionamento do circuito:

 

 

Onde:

- Entrada: São os n bits de cada palavra de entrada a serem ordenadas.

- Saída: São os n bits de Saída com as palavras ordenadas em paralelo.

- Insere/Remove: Decide se quer inserir ou remover palavra no conjunto.

- Modo Entrada / Modo Saída: Decide se quer mudar conjunto de palavras a serem ordenadas ou se quer obter a saída, quando já acabaram as manipulações de entrada.

 

Estudo te tempo gasto na ordenação

 

O tempo gasto para ordenar um amostra de elementos cujo maior

elemento seja de tamanha X gastaria tempo constante independente

do numero de entradas, no caso o circuito receberia as entradas

e já devolveria os elementos ordenados sem comparar nada gastando

apenas um tempo ínfimo de passar por um multiplexador e alterar

o estado de um FF(ou latch), na hora da saída e que o tempo gasto

e um pouco maior, se a saída for em serie teremos n(numero de

elementos) vezes o tempo de um registrador ser carregado.

 

Simulação na UP1 do Altera

 

A simulação devera ter um seletor para adicionar/remover elementos e um seletor para modos de operação(modo insere/remove(entradas), modo demonstrar dados ordenados(saída), na demonstração serão usados 8 seletores, um botão e o display de 7 segmentos só para mostrar que funciona, no caso as palavras seriam um pouco pequenas(6 bits) mas fica um projeto mais enxuto usando o display de 7 segmentos e só um conjunto de seletores.

Esboço do funcionamento do circuito na placa.

Nesse esboço os elementos entram no registrador selecionando bit a bit cada um deles e apertando o "Read Trigger" para carregar, para isso o seletor Entrada/Saída deve estar na posição de entrada e o seletor Insere/remove deve estar em Insere, nesse caso uma palavra será carregada.

 

 

Para remover o processo é o mesmo de inserção com o seletor Remove/Insere na posição Remove.

Se o seletor Entrada/Saída estiver em Saída 6 bits de Saída representarão as palavra ordenadas, a cada vez que o Botão de "Read Trigger" for apertado uma nova palavra de saída surgira.

 

Considerações Finais

É possível fazer a saída ser mais rápida trocando o botão por um clock, e ainda, para testes de velocidade e eficiência pode-se usar vários clocks na entrada combinando valores entre si e calculando o tempo de ordenação de varias amostras de conjuntos de palavras de 6 bits.