سؤال

في اليوم الآخر قررت كتابة تطبيق نوع راديكس في جافا. من المفترض أن يكون نوع Radix O (k*n) ولكن انتهى الأمر بوجود O (k^2*n) بسبب عملية تحطيم كل رقم إلى رقم واحد. لقد انهارت كل رقم عن طريق التعديل (٪) الأرقام السابقة والتقسيم على عشرة للتخلص من الأرقام التالية. سألت أستاذي عما إذا كانت هناك طريقة أكثر كفاءة للقيام بذلك وقال لاستخدام مشغلي البتات. الآن لأسئلتي: ما هي الطريقة التي ستكون الأسرع في تحطيم كل رقم في جافا ، 1) الطريقة المذكورة أعلاه. 2) تحويل الرقم إلى سلسلة واستخدام Substrings. 3) استخدام عمليات البت.

إذا 3) فكيف سيعمل هذا؟

هل كانت مفيدة؟

المحلول

كتلميح ، حاول استخدام radix غير 10 ، لأن أجهزة الكمبيوتر تتعامل مع الحساب الثنائي أفضل من العشرية.

  • x >>> n يعادل x / 2ن
  • X & (2ن - 1) يعادل x ٪ 2ن

بالمناسبة ، يقوم Java's >> بإلغاء الإشارة ، وهو ما لا تريده على الأرجح في هذه الحالة. استخدم >>> بدلاً من ذلك.

نصائح أخرى

[http://en.literateprograms.org/Radix_sort_(Java)](http://en.literateprograms.org/radix_sort_(java))

خط الكود الذي يفعل هذا ؛

 int key = (a[p] & mask) >> rshift;

هو جزء التلاعب بت.

& هو المشغل للقيام ببعض الجدوى و >> هو التحول الأيمن.

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