Logo Hardware.com.br
walteen
walteen Ubbergeek Registrado
5.6K Mensagens 129 Curtidas

Dúvida sobre algoritmo de ordenação Radix Sort

#1 Por walteen 23/07/2015 - 21:54
Boa noite galera, estou estudando algoritmos e estou com dúvida no Radix Sort.

Em todos os códigos que eu vi, tem uma parte que realiza a soma da quantidade de números com o dígito referente com o seu anterior. Não consegui entender a lógica por trás disso. Por exemplo, aqui (comentei as linhas que estou em dúvida):


void radixsort(int vetor[], int tamanho) {
int i;
int b[tamanho];
int maior = vetor[0];
int exp = 1;

for (i = 0; i < tamanho; i++) {
if (vetor[i] > maior)
maior = vetor[i];
}

while (maior/exp > 0) {
int bucket[10] = { 0 };
for (i = 0; i < tamanho; i++)
bucket[(vetor[i] / exp) % 10]++; // Aqui eu sei que incrementa o vetor de cada dígito que foi encontrado
for (i = 1; i < 10; i++)
bucket[i] += bucket[i - 1]; // não entendi a razão disso
for (i = tamanho - 1; i >= 0; i--)
b[--bucket[(vetor[i] / exp) % 10]] = vetor[i]; // consequentemente não entendi aqui lol
for (i = 0; i < tamanho; i++)
vetor[i] = b[i];
exp *= 10;
}
}

Se alguém puder clarear a minha mente agradeço.

Valeu!
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
23/07/2015 - 23:17
Como já deve saber, o Radix ordena cadeias de caracteres pelo seu primeiro valor absoluto, diferentemente dos métodos tradicionais de ordenação pelo valor relativo.

A primeira dúvida se refere ao momento de quantificação (soma) das ocorrências (repetições) do caractere.
A segunda, diz respeito a "criação dos marcos", ou seja, ao momento em que é estabelecida a última posição de cada fila das repetições anteriormente encontradas, garantindo um lugar para cada item.
A terceira identifica a fila e usa o marco anterior para "encaixar" cada item, enquanto decrementa o número de assento à medida em que cada item pertencente à fila é fixado no seu lugar. Para isto basta verificar se o "lugar" foi ocupado.

- E como uma imagem vale mais que mil palavras, nada melhor que mostrar a coisa funcionando para se maravilhar de vez:

https://www.cs.usfca.edu/~galles/visualization/RadixSort.html

OBS: - Diminua a velocidade nos momentos das suas dúvidas. Assim vai conseguir "clarear" tudo.

...
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
walteen
walteen Ubbergeek Registrado
5.6K Mensagens 129 Curtidas
#3 Por walteen
29/07/2015 - 17:18
esquiloesperto disse:
A primeira dúvida se refere ao momento de quantificação (soma) das ocorrências (repetições) do caractere.
A segunda, diz respeito a "criação dos marcos", ou seja, ao momento em que é estabelecida a última posição de cada fila das repetições anteriormente encontradas, garantindo um lugar para cada item.
A terceira identifica a fila e usa o marco anterior para "encaixar" cada item, enquanto decrementa o número de assento à medida em que cada item pertencente à fila é fixado no seu lugar. Para isto basta verificar se o "lugar" foi ocupado.

- E como uma imagem vale mais que mil palavras, nada melhor que mostrar a coisa funcionando para se maravilhar de vez:

https://www.cs.usfca.edu/~galles/visualization/RadixSort.html

OBS: - Diminua a velocidade nos momentos das suas dúvidas. Assim vai conseguir "clarear" tudo.

...

Caramba, que legal! Agora sim ficou bem mais claro kkk
Eu tinha visto um vídeo explicativo que pegava baldes e enchia com os números, mas não mostrava essa parte de somatório para associar ao espaço a ser alocado após a ordenação. Só explicava que removia os ítens de baixo para cima do balde.

Muito obrigado! smile.png

Abraço!
FGDH User: #29697 / Meu canal no YouTube: http://www.youtube.com/user/walteen
Não respondo dúvidas técnicas por MP, meu canal no YouTube, nem Facebook. Grato! smile.png
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal