Converti il codice grigio per decimale in r
Domanda
Ho un set di 0 e 1 rappresentato come elenco inizialmente creato con sample(c(0,1), n, replace=TRUE)
, dove n è la lunghezza del mio numero binario.Attualmente sto utilizzando un convertitore BCD per convertire il mio numero binario in un numero decimale, questo è visto qui:
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
}
.
Vorrei invece utilizzare un convertitore di graycode.to.Decimale che fa lo stesso lavoro del mio convertitore BCD.to.Decimale, ma usando invece il codice Grigio.
Nota: la velocità conta per questo, e vorrei farlo nel modo più efficiente possibile.Sono consapevole del fatto che il mio convertitore BCD non è probabilmente il più efficiente, è solo il più semplice, se hai un modo significativamente più efficiente di gestire la conversione BCD, sarei anche interessato a sentire questo.
Cos'è il codice grigio?: http://en.wikipedia.org/wiki/Gray_codeek/a>
Soluzione 2
Ecco la semplice soluzione alla mia domanda, l'algoritmo ha finito di essere molto più facile di quanto è apparso per la prima volta.L'algoritmo utilizzato può essere trovato qui .
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))
}
.
Questo codice convertirà il codice in binario in cui è possibile utilizzare una conversione binaria per convertirlo in un numero decimale.Sto scegliendo di usare il codice fornito da flodel nella sezione Commenti.
Binary.to.Decimal <- function(binaryNumb)
{
L = length(binaryNumb)
sum(2L^(seq_along(binaryNumb)-1L) * rev(binaryNumb))
}
. Altri suggerimenti
Bene, c'è un algoritmo di conversione su quella pagina wiki, anche se in c
, quindi dovrai portarlo.
Di nuovo sulla pagina Wiki, c'è questo link http://aggregate.org/magic/#GRAY%20code% 20Conversion
Che elenca un numero di algoritmi di conversione, la maggior parte dei quali sembra abbastanza semplice da codificare.
BTW, OH Qualunque cosa: GA::grey2binary
e GA::binary2grey
esistono già.Bah: -)
ETA - Sono stato abbastanza fortunato da trovare questo via Mr.Google, ma in generale il pacchetto sos
è un ottimo strumento R-Search.