1. الترتيب القابل للتكرار: يحتوي ABC على ثلاثة أحرف وجميع سلاسل الطول 3 ، AAA ، AAB ، AAC ...... CCC لديها ما مجموعه 27 نوعًا
باستخدام فكرة العودية ، يمكن اختيار الحرف الأول من ABC وثلاثة خيارات. ثم يتم تحويل المشكلة إلى حالة تتكون فيها ABC من شخصيات ذات طول 2. بعد عودة الحلقة ، يمكن العثور على جميع الاحتمالات. فقط التحكم في ظروف خروج الحلقة.
يمكن استخدام العودية لمعالجته ، وعندما لا يكون طول الحرف معروفًا ، فهو معالجة عامة. إذا كنت تعرف الطول ، فأنت بحاجة فقط إلى استخدام طبقات متعددة من الحلقات لاستخلاص الاستنتاجات.
تقليب الفئة العامة {public static void main (string [] args) {char [] chs = {'a' ، 'b' ، 'c'} ؛ Per (New Char [3] ، CHS ، 3-1) ؛ } الفراغ الثابت العام لكل (char [] buf ، char [] chs ، int len) {if (len == -1) {for (int i = buf.length -1 ؛ i> = 0 ؛ -i) system.out.print (buf [i]) ؛ system.out.println () ؛ يعود؛ } لـ (int i = 0 ؛ i <chs.length ؛ i ++) {buf [len] = chs [i] ؛ لكل (BUF ، CHS ، LEN-1) ؛ }}}الاختيار القابل للتكرار ، ما مجموعه 27 حالة ، يتم عرض النتائج في الشكل أدناه
2. الترتيب الكامل: لا يزال هناك ثلاثة أحرف ABC ، يعني الترتيب الكامل أنه لا يمكن تكرار الشخصيات. آخر 3*2 = 6 نتائج
يمكنك استخدام الطريقة في 1 ، وطالما أنك تحدد ما إذا كانت الأحرف الثلاثة متساوية ، فإن الشخص في الترتيب الكامل غير متساوٍ هو الواردة المطلوبة. مثل هذا التعقيد الزمني هو n^n ، ونوع الترتيب الكامل هو n! لذلك نحن بحاجة إلى تصميم نوع من n! خوارزمية.
يمكنك أيضا استخدام العودية. هناك خيارات n للسلسلة الأولى ، ويصبح الباقي مشكلة عودية مقياس N-1. خيارات N للحرف الأولى كلها في السلسلة. لذلك ، يمكن استخدام الحرف الأول لتبادلها مع موضع 1-N للحصول على الموقف في N ، ثم معالجة مقياس N-1 بشكل متكرر. ومع ذلك ، بعد المعالجة ، يجب استبدالها وتصبح الشخصية الأصلية.
فئة عامة ترتيب {public static void main (string [] args) {char [] chs = {'a' ، 'b' ، 'c'} ؛ ترتيب (chs ، 0 ، chs.length) ؛ } صفيف باطل ثابت عام (char [] chs ، int ، int len) {if (start == len-1) {for (int i = 0 ؛ i <chs.length ؛ ++ i) system.out.print (chs [i]) ؛ system.out.println () ؛ يعود؛ } لـ (int i = start ؛ i <len ؛ i ++) {char temp = chs [start] ؛ chs [start] = chs [i] ؛ CHS [i] = temp ؛ ترتيب (CHS ، ابدأ+1 ، لين) ؛ temp = chs [start] ؛ chs [start] = chs [i] ؛ CHS [i] = temp ؛ }}}يتم عرض نتائج التشغيل في الشكل أدناه ، مع ما مجموعه 6 مجموعات
3. التركيبة: جميع مجموعات من ثلاثة أحرف ABC
ابحث عن جميع المجموعات ، أي ما إذا كان يتم اختيار كل جزء من ABC ، فإن البت الأول هو 2 ، والبخل الثاني هو 2. . لذلك هناك 2^n أنواع في المجموع. 0 يعني عدم اتخاذ ، 1 يعني الاختيار ، بحيث يمكن تمثيل AB بـ 110. إن التمثيل الكلي لـ ABC هو من 0 إلى 2^3-1. ثم ، عملية bitwise ، إذا كانت النتيجة 1 ، فسيتم إخراج البت الحالي ، ولن يتم إخراج النتيجة 0.
comb comb {public static void main (string [] args) {char [] chs = {'a' ، 'b' ، 'c'} ؛ مشط (CHS) ؛ } مشط الفراغ الثابت العام (char [] chs) {int len = chs.length ؛ int nbits = 1 << len ؛ لـ (int i = 0 ؛ i <nbits ؛ ++ i) {int t ؛ لـ (int j = 0 ؛ j <len ؛ j ++) {t = 1 << j ؛ if ((t & i)! = 0) {// سيكون ذلك فقط 1 عندما تكون العملية هي 1 system.out.print (chs [j]) ؛ }} system.out.println () ؛ }}}نتيجة الإخراج على النحو التالي. السلوك الأول فارغ ، مما يعني أنه لا يوجد أحد.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.