سؤال

لدي مجموعة من 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 هو أداة البحث ص كبيرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top