0Pricing
Competitive Programming Academy · درس

دمج تسلسلين مرتبين

اجتياز القائمتين بمؤشر لكل منهما

دمج تسلسلين مرتبين درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

خطوة الدمج

لديك قائمتان مرتبتان، وعليك دمجهما في قائمة واحدة مرتبة. يمثل هذا الدمج جوهر الترتيب بالدمج، ويظهر في كل مكان تقريبًا. 🔗

مدخلان، ومؤشر لكل منهما

امنح كل قائمة مؤشرًا خاصًا بها، على أن يبدأ كلاهما عند الفهرس 0. ستدفع المؤشرين إلى الأمام معًا، ولن تعود بهما إلى الخلف.

i = 0
j = 0

اختر الأصغر دائمًا

في كل خطوة، قارن العنصرين في المقدمة. أضف الأصغر إلى النتيجة، لأنه لا بد أن يأتي أولًا في الترتيب.

حرّك المؤشر الفائز

بعد اختيار قيمة، حرّك المؤشر الذي جاءت منه فقط. أما القائمة الأخرى فما زال أصغر عناصرها في الانتظار.

if a[i] <= b[j]:
    out.append(a[i])
    i += 1
else:
    out.append(b[j])
    j += 1

الحلقة الرئيسية

واصل الدمج ما دام في كلتا القائمتين عناصر. وبمجرد نفاد إحدى القائمتين، لن تعود المقارنة منطقية.

while i < len(a) and j < len(b):
    # compare and append
    pass

أفرغ العناصر المتبقية

عندما تفرغ إحدى القائمتين، تكون الأخرى مرتبة بالفعل، لذا ما عليك إلا إلحاق ذيلها المتبقي مباشرة بالنتيجة.

out.extend(a[i:])
out.extend(b[j:])

لماذا لا يكلّف الذيل شيئًا

يكون الذيل المتبقي مرتبًا بالفعل، لذلك لا حاجة إلى مزيد من المقارنات. وستضيف إحدى عمليتي extend ببساطة لا شيء.

الزمن الخطي الإجمالي

يُفحَص كل عنصر مرة واحدة، لذلك يستغرق دمج قائمتين حجماهما n وm زمنًا قدره O(n + m). وهذا أسرع ما يمكن تحقيقه.

حافظ على الاستقرار

يؤدي استخدام <= عند تساوي القيم إلى إبقاء العناصر المتساوية بترتيبها الأصلي. ويهم هذا الاستقرار عندما تحمل العناصر بيانات إضافية.

ادمج بالعكس أيضًا

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

من الدمج إلى الترتيب

قسّم، ورتّب النصفين، ثم ادمج: هذا التكرار هو الترتيب بالدمج. ويمثل الدمج باستخدام المؤشرين الذي تعلمته محركه الأساسي.

تحقّق سريع

أنت تدمج قائمتين مرتبتين باستخدام مؤشر واحد في كل قائمة.

مراجعة

تنقّل في قائمتين مرتبتين باستخدام مؤشر لكل منهما، واختر دائمًا العنصر الأصغر في المقدمة، ثم أفرغ الذيل. تعمل الطريقة في O(n + m) وتدعم الترتيب بالدمج. 🚀

الأسئلة الشائعة

هل درس «دمج تسلسلين مرتبين» مجاني؟

نعم — نص درس «دمج تسلسلين مرتبين» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

ماذا ستتعلم في «دمج تسلسلين مرتبين»؟

اجتياز القائمتين بمؤشر لكل منهما تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟

لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «دمج تسلسلين مرتبين»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟

نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مؤشران في مصفوفة مرتبة
  2. العثور على زوج ذي مجموع محدد
  3. إزالة التكرارات في مكانها
  4. دمج تسلسلين مرتبين
← العودة إلى Competitive Programming Academy