Pregunta

Tengo un conjunto de 0 y 1 representado como una lista creada inicialmente con sample(c(0,1), n, replace=TRUE), donde n es la longitud de mi número binario.Actualmente estoy usando un convertidor BCD para convertir mi número binario a un número decimal, esto se ve aquí:

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
}

Me gustaría usar un convertidor de griscode.to.Decimal que hace el mismo trabajo que mi conversor BCD.to.Decimal, pero utilizando el código gris en su lugar.

Nota: la velocidad sí importa esto, y me gustaría hacer esto de la manera más eficiente posible.Soy consciente de que mi convertidor de BCD probablemente no sea el más eficiente, es solo el más simple, si tiene una forma significativamente más eficiente de manejar la conversión de BCD, también estaría interesado en escuchar eso.

¿Qué es el código gris?: http://en.wikipedia.org/wiki/gray_code

¿Fue útil?

Solución 2

Aquí está la solución simple para mi pregunta, el algoritmo terminó siendo mucho más fácil de lo que apareció por primera vez.El algoritmo utilizado se puede encontrar aquí .

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))
}

Este código convertirá el código en binario donde puede usar una conversión binaria para convertirla a un número decimal.Estoy eligiendo usar el código proporcionado por Flodel en la sección de comentarios.

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

Otros consejos

Bueno, hay un algoritmo de conversión en esa página de wiki, aunque en c, así que tendrás que abrirlo.
Nuevamente en la página de Wiki, hay este enlace http://aggregate.org/magic/#gray%20codo% 20conversion que enumera una serie de algoritmos de conversión, la mayoría de los cuales parecen ser bastante simples de codificar.

BTW, OH, lo que sea: GA::grey2binary y GA::binary2grey ya existen.BAH: -)

ETA - Tuve la suerte de encontrar esto a través de Mr.Google, pero en general, el paquete sos es una gran herramienta de búsqueda de R.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top