تحويل الرمز الرمادي إلى عشري في ص
سؤال
لدي مجموعة من 0 و 1 ممثلة كقائمة تم إنشاؤها في البداية مع sample(c(0,1), n, replace=TRUE)
, ، أين ن هو طول رقمي الثنائي.أنا حاليا باستخدام محول بسد لتحويل رقمي الثنائي إلى رقم عشري، وهذا ينظر هنا:
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
}
أود بدلا من ذلك استخدام محول غرايكود.إلى.عشري الذي يقوم بنفس وظيفة محول بسد.إلى. عشري ، ولكن باستخدام رمز رمادي بدلا من ذلك.
ملاحظة:سرعة لا يهم لهذا ، وأود أن تفعل ذلك في الطريقة الأكثر فعالية ممكنة.أنا أدرك أن محول بسد الخاص بي ربما لا يكون الأكثر كفاءة ، بل هو أبسط ، إذا كان لديك طريقة أكثر كفاءة بكثير للتعامل مع تحويل بسد أود أيضا أن تكون مهتمة في سماع عن ذلك.
ما هو الرمز الرمادي?: http://en.wikipedia.org/wiki/Gray_code
المحلول 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))
}
سيقوم هذا الرمز بتحويل الرمز إلى ثنائي حيث يمكنك بعد ذلك استخدام تحويل ثنائي لتحويله إلى رقم عشري.أنا اختيار لاستخدام التعليمات البرمجية التي تقدمها فلوديل في قسم التعليقات.
Binary.to.Decimal <- function(binaryNumb)
{
L = length(binaryNumb)
sum(2L^(seq_along(binaryNumb)-1L) * rev(binaryNumb))
}
نصائح أخرى
حسنا ، هناك خوارزمية التحويل على تلك الصفحة ويكي ، وإن كان في c
لذلك سيكون لديك لميناء ذلك.
مرة أخرى على صفحة ويكي ، هناك هذا الرابط http://aggregate.org/MAGIC/#Gray%20Code%20Conversion
الذي يسرد عددا من خوارزميات التحويل ، ومعظمها يبدو بسيطا جدا في الترميز.
راجع للشغل ، يا أيا كان: GA::grey2binary
و GA::binary2grey
موجودة بالفعل.باه : -)
ايتا - كنت محظوظا بما فيه الكفاية للعثور على هذا عن طريق السيد جوجل ولكن بشكل عام الحزمة sos
هو أداة البحث ص كبيرة.