Question

J'ai un ensemble de 0 et de 1 représentés sous forme d'une liste initialement créée avec sample(c(0,1), n, replace=TRUE), où n est la longueur de mon nombre binaire.J'utilise actuellement un convertisseur BCD pour convertir mon nombre binaire en nombre décimal, cela se voit ici :

BCD.to.Decimal <- function(binaryNumb)
{
  binaryLength = length(binaryNumb)
  decimalNumb = 0
  for(i in 1:binaryLength)
  {
    if ( binaryNumb[i] == 1)
      decimalNumb = decimalNumb + 2^(binaryLength - i)
 }

  decimalNumb
}

Je voudrais plutôt utiliser un convertisseur GrayCode.To.Decimal qui fait le même travail que mon convertisseur BCD.to.Decimal, mais en utilisant plutôt Gray Code.

Note:La vitesse est importante pour cela, et j'aimerais le faire de la manière la plus efficace possible.Je suis conscient que mon convertisseur BCD n'est probablement pas le plus efficace, c'est juste le plus simple, si vous disposez d'un moyen beaucoup plus efficace de gérer la conversion BCD, je serais également intéressé d'en entendre parler.

Qu'est-ce que le code gris ? : http://en.wikipedia.org/wiki/Gray_code

Était-ce utile?

La solution 2

Voici la solution simple à ma question, l'algorithme s'est avéré beaucoup plus simple qu'il n'y paraissait au départ.L'algorithme utilisé peut être trouvé ici.

GrayCode.to.Decimal <- function(grayNumb)
{
  binaryNumb = vector("numeric",length(grayNumb))
  binaryNumb[1] = grayNumb[1]
  for (i in 2:length(grayNumb))
  {
    binaryNumb[i] = xor(grayNumb[i], binaryNumb[i - 1])
  }

  return(Binary.to.Decimal(binaryNumb))
}

Ce code convertira le code en binaire où vous pourrez ensuite utiliser une conversion binaire pour le convertir en nombre décimal.Je choisis d'utiliser le code fourni par flodel dans la section commentaires.

Binary.to.Decimal <- function(binaryNumb)
{
  L = length(binaryNumb)
  sum(2L^(seq_along(binaryNumb)-1L) * rev(binaryNumb))
}

Autres conseils

Eh bien, il y a un algorithme de conversion sur cette page Wiki, bien qu'en c vous devrez donc le porter.
Encore une fois sur la page wiki, il y a ce lien http://aggregate.org/MAGIC/#Gray%20Code%20Conversionqui répertorie un certain nombre d'algorithmes de conversion, dont la plupart semblent assez simples à coder.

BTW, oh peu importe : GA::grey2binary et GA::binary2grey existe déjà.bah :-)

ETA - J'ai eu la chance de trouver ça via Mr.Google mais en général le package sos est un excellent outil de recherche R.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top