quarta-feira, 11 de abril de 2018

Dinamica 003 - Embaralhamento de um vetor

Em muitas aulas os alunos de programação tiveram que aprender algoritmos de ordenação. Porém poucos lugares se dedicam a fazer o contrario: algortimos de embaralhamento. Devido isso, muitos programas usam algoritmos ruins quando precisam embaralhar alguma coisa, como alguns jogos.

Nesta dinamica, vamos implementar o algoritmo de Fisher-Yates, um dos mais simples e eficientes para esta tarefa, para desordenar um vetor de inteiros.

O algoritmo é bom, mas desse jeito é mais estiloso


Etapa 1

Crie uma rotina que, ao usuário entrar com um número N, gere um vetor V de  1 até N. Por exemplo, se N = 8, V = [1, 2, 3, 4, 5, 6, 7, 8] . Isso já foi feito na Dinamica 001.
 
Etapa 2

Gere um número aleatorio K de 0 até N - 1 e faça a troca do último elemento do vetor V para a posição K, e o elemento da posição K para a última posição.
Por exemplo, se V = [1, 2, 3, 4] e K = 1, após a rotina será V = [1, 4, 3, 2]
 
Etapa 3

Coloque a troca feita na etapa anterior numa estrutura de repetição, e decremente a posição do último vetor, para que a troca seja feita e todos os elementos do vetor.
Por exemplo, se N = 5, V = [1, 2, 3, 4, 5].
No passo 1, se K = 2 V = [1, 2, 5,4, 3]
No passo 2, se K = 0, V =  [4, 2, 5, 1, 3]
e assim por diante


Etapa 4 

Finalmente crie o programa completo em C que una as etapas anteriores. Lembre-se de imprimir na tela o vetor original e o embaralhado.

 

Nenhum comentário:

Postar um comentário