Shuffle () مقابل random_shuffle () في C ++

Shuffle Mqabl Random Shuffle Fy C



في C ++ ، توفر المكتبة القياسية وظيفتين ، خلط() و خلط عشوائي () التي تستخدم لإعادة ترتيب عناصر الحاوية. على الرغم من أن كلتا الوظيفتين تخدمان نفس الغرض ، إلا أنهما تختلفان في تنفيذهما والطريقة التي تولدان بها أرقامًا عشوائية.

من هذه المقالة ، ستجد الاختلافات بين هاتين الوظيفتين وفهم كيفية عملهما.

خلط ورق اللعب () في C ++

ال خلط() الوظيفة هي وظيفة C ++ مضمنة تستخدم لتبديل العناصر عشوائيًا أو إعادة ترتيبها في نطاق معين. تم الإعلان عن الوظيفة في ملف <الخوارزمية> header وله وسيطتان: موضع بداية النطاق هو الوسيطة الأولى ، والوسيطة الثانية تمثل موضع النهاية.







بالإضافة إلى ذلك ، فإنه يأخذ أيضًا معلمة ثالثة اختيارية ، وهي كائن دالة يقوم بإنشاء أرقام عشوائية لاستخدامها في تبديل العناصر في النطاق.



عندما خلط() تسمى الوظيفة ، فهي تعيد ترتيب العناصر بشكل عشوائي في النطاق المحدد باستخدام مولد الأرقام العشوائي المقدم. لا يمكن التنبؤ بنتيجة التبديل العشوائي ، ومن المرجح أن يحدث كل تبديل ممكن للعناصر.



مثال

ضع في اعتبارك المثال أدناه لاستخدام وظيفة المراوغة () في C ++. في هذا البرنامج ، قمنا بإنشاء المتجه شيء بقيم الأعداد الصحيحة من 0 إلى 10. ثم نقوم بإنشاء مولد أرقام عشوائي ، والذي يتم بعد ذلك تمريره مع نطاق المتجه إلى خلط() وظيفة. ال خلط() تأخذ الوظيفة الرقم وتبديل العناصر بناءً على هذا الرقم. ثم قمنا بطباعة تسلسل المتجه المعاد ترتيبه باستخدام حلقة for





# تضمين

# تضمين <ناقل>

# تضمين <الخوارزمية>

# تضمين <عشوائي>

# تضمين <التزامن>

استخدام اسم للمحطة ؛

int رئيسي ( )

{

المتجه < int > شيء { 1 و 2 و 3 و 4 و 5 و 6 و 7 و 8 و 9 و 10 } ؛

غير موقعة بذرة = كرونو :: ساعة النظام :: الآن ( ) . الوقت_منذ_خطوة ( ) . عدد ( ) ؛

خلط ( شيء. يبدأ ( ) و شيء. نهاية ( ) و محرك عشوائي افتراضي ( بذرة ) ) ؛

كوت << 'العناصر التي تم تبديل ترتيبها هي:' ؛

ل ( int & أنا : شيء )

كوت << ' << أنا ؛

كوت << إندل ؛

يعود 0 ؛

}

random_shuffle () في C ++

ال خلط عشوائي () تعمل الوظيفة أيضًا بشكل عشوائي على إعادة ترتيب العناصر في النطاق المحدد ببعض الأرقام المختارة عشوائيًا. يستخدم مولد أرقام عشوائي لتوليد سلسلة من الأرقام العشوائية ثم يستخدم هذه الأرقام لخلط العناصر في النطاق ، وبالتالي فإن تسلسل البرنامج سيكون مختلفًا في كل مرة تقوم فيها بتشغيل البرنامج.



مطلوب معلمتين من أجل خلط عشوائي () : موضع بداية النطاق هو المعلمة الأولى ، والمعامل الثاني هو موضع النهاية. بالإضافة إلى ذلك، خلط عشوائي () يمكن أن تأخذ معلمة ثالثة اختيارية ، وهي كائن دالة يمكن استخدامه لتوليد الأرقام العشوائية لخلط العناصر.

مثال

يوضح المثال أدناه عمل خلط عشوائي () في C ++. في هذا الكود ، قمنا بإنشاء ملف الشيء المتجه مع قيم الأعداد الصحيحة من 1 إلى 10 ثم استخدم لحلقة لطباعة التسلسل الذي تم خلطه عشوائيًا:

# تضمين

# تضمين <الخوارزمية>

استخدام اسم للمحطة ؛

int رئيسي ( )

{

المتجه < int > شيء { 1 و 2 و 3 و 4 و 5 و 6 و 7 و 8 و 9 و 10 } ؛

سراند ( static_cast < غير موقعة int > ( وقت ( nullptr ) ) ) ؛

خلط عشوائي ( شيء. يبدأ ( ) و شيء. نهاية ( ) ) ؛

ل ( int أنا : شيء ) {

كوت << أنا << '' ؛

}

كوت << ' ' ؛



يعود 0 ؛

}

الفرق بين خلط ورق اللعب () والخلط العشوائي ()

فيما يلي الاختلافات الرئيسية بين خلط() و خلط عشوائي () وظائف في C ++.

1: خلط عشوائي () يأخذ زوجًا من التكرارات يمثلان نطاق العناصر المراد تبديلها ، بينما خلط() يأخذ زوجًا من التكرارات يمثلان نطاق العناصر المراد تبديلها عشوائيًا ، بالإضافة إلى مولد أرقام عشوائي لاستخدامه في التبديل.

2: خلط عشوائي () بشكل عام أقل كفاءة من خلط() ، حيث يتعين عليه إنشاء سلسلة من الأرقام العشوائية لاستخدامها في الخلط.

3: عشوائي_ عشوائي () يستخدم التطبيق الداخلي لمكتبة C ++ القياسية لمولد الأرقام العشوائية لخلط العناصر ، بينما خلط() يسمح لك بتحديد مولد الأرقام العشوائي الخاص بك لاستخدامه في الخلط ، مما يمنحك مزيدًا من التحكم في عشوائية الخلط.

4: تم تقديم random_shuffle () في C ++ 98 وهو مدعوم من قبل جميع إصدارات مكتبة C ++ القياسية ، بينما خلط() تم تقديمه في C ++ 11 وهو مدعوم فقط من قبل المجمعين الذين ينفذون هذا الإصدار من المعيار.

افكار اخيرة

الاختيار بين خلط() و خلط عشوائي () يعتمد على حالة الاستخدام والمتطلبات الخاصة بك. إذا كنت بحاجة إلى مزيد من التحكم في عشوائية الخلط ، أو إذا كنت تريد استخدام مولد أرقام عشوائي مخصص ، إذن خلط() سيكون خيارًا أفضل. من ناحية أخرى ، إذا كنت لا تحتاج إلى هذا المستوى من التحكم وتريد فقط طريقة بسيطة لخلط العناصر ، إذن خلط عشوائي () يمكن أن يكون كافيا.