Algoritmo Fisher-Yates shuffle

Publicado por Osama Jr. (última atualização em 31/08/2009)

[ Hits: 6.508 ]

Homepage: Não tenho

Download fisher-yates-shuffle




Uma versão em shell script do algoritmo Fisher-Yates shuffle (também conhecido como Knuth-Shuffle). Essa versão não é lá muito eficiente devido às limitações da variável $RANDOM.

Mais detalhes: http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

P.S.: Obrigado SMarcell pelas dicas! ;)

  



Esconder código-fonte

#!/bin/bash
#
# "Implementação" em Shell Script do algoritmo Fisher-Yates shuffle.
# Autor: /bin/laden - 24/08/2009.
#
# Uso: fisher-yates-shuffle <valores>
# Ex.: ./fisher-yates-shuffle 0 1 2 3 4 5 6 7 8 9
#
# Mais detalhes: <man bash> ou <www.google.com> =P
#
# Obs.: Implementação pouco eficiente devido a limitação
# da variável RANDOM.

function fisher-yates-shuffle {
   RANDOM=$$
   declare -a array=([email protected])
   declare -i k n=${#array[@]}

   while [ $n -ge 0 ]
   do
      let "k = RANDOM % (n + 1)"
      swap+=(${array[$k]})
      array[k]=${array[$n]}
      array[n]=$swap
      let "n--"
   done

   echo "${swap[@]}" && return 0
}

fisher-yates-shuffle [email protected]

Scripts recomendados

Proc 1.0

Calculo de médias da UNIP

Calculador de números primos

Coleta de WWN em AIX

script de compilação do kernel 2.6.38.8 com patch ck3 no ubuntu


  

Comentários
[1] Comentário enviado por vitinho217 em 11/08/2014 - 16:06h

Não deveria ser -> let "k = RANDOM % n"


Contribuir com comentário