質問
私は0のセットと1が最初にsample(c(0,1), n, replace=TRUE)
で作成されたリストとして表されます。ここで、nは私の2進数の長さです。私は現在BCDコンバータを使用してバイナリ番号を10進数に変換するために、これはここで見る:
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
}
.
代わりに私のbcd.to.decimalコンバータと同じジョブを行うが、代わりにグレイコードを使用するgreycode.to.decimal変換器を使用します。
注:これにはスピードが問題になり、これを可能な限り効率的な方法でやりたいと思います。私のBCDコンバータはおそらく最も効率的ではないことに気付くことが最も簡単です。
グレイコードとは何ですか?>
解決 2
これは私の質問に対する簡単な解決策です、アルゴリズムは最初に現れたよりもはるかに簡単であることを終えました。使用されるアルゴリズムは、ここ
です。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))
}
.
このコードはコードをバイナリに変換し、そこでバイナリ変換を使用して10進数に変換します。私はコメントセクションでFlodelによって提供されたコードを使うことを選択しています。
Binary.to.Decimal <- function(binaryNumb)
{
L = length(binaryNumb)
sum(2L^(seq_along(binaryNumb)-1L) * rev(binaryNumb))
}
. 他のヒント
まあ、c
では、そのWikiページに変換アルゴリズムがありますので、ポートする必要があります。
Wikiページでは、このリンクがあります。 http://aggregate.org/magic/#gray%20code%20conversion
これは多くの変換アルゴリズムをリストします。そのほとんどは、コーディングするのはかなり簡単です。
BTW、OHは何でも:GA::grey2binary
とGA::binary2grey
はすでに存在します。BAH: - )
eta - 私はMr.Google経由でこれを見つけるのに十分ラッキーでしたが、一般的にPackage sos
は素晴らしいR検索ツールです。