0Pricing
Competitive Programming Academy · درس

إنشاء مصفوفة المجاميع السابقة

حساب المجاميع التراكمية مسبقًا مرة واحدة

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

مسألة المجموع المتكرر

تخيّل أنك تجيب عن مئات الأسئلة حول مجموعات نطاقات في مصفوفة واحدة. إن جمع كل نطاق من البداية بطيء، لكن المجموع التراكمي يحل المشكلة. 🚀

ما هو المجموع التراكمي

تخزّن مصفوفة المجموع التراكمي عند كل فهرس مجموعَ جميع العناصر حتى ذلك الموضع. ويحوّل مرور تمهيدي واحد عمليات الجمع البطيئة إلى إجابات فورية.

مثال صغير

بالنسبة إلى [3, 1, 4]، تكون المجاميع المتراكمة 3، ثم 4، ثم 8. وهذه القائمة المتزايدة من المجاميع هي بالضبط مجموعك التراكمي.

العلاقة التراجعية الأساسية

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

prefix[i] = prefix[i - 1] + a[i]

أنشئه في الكود

مرّ على المصفوفة مرة واحدة مع الاحتفاظ بمجموع متراكم. وتضيف كل خطوة المجموع الجديد، لذلك فإن بناء المصفوفة هو مرور خطي واحد.

prefix = [0]
for x in a:
    prefix.append(prefix[-1] + x)

لماذا يفيد الصفر في البداية

يعني بدء prefix بصفر بادئ أن prefix[i] يحتوي على مجموع أول i من العناصر. وهذا يجعل حساب النطاقات واضحًا لاحقًا.

قاعدة الفهرسة

مع وجود الصفر في البداية، تساوي prefix[k] القيمة a[0] + ... + a[k-1]. ويساعد الالتزام بهذا الاصطلاح على تجنّب أخطاء الفهرسة المزعجة.

تكلفة البناء

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

احسب مسبقًا مرة، واستعلم كثيرًا

تكمن الفائدة الكبرى في المفاضلة: تنفّذ مرورًا خطيًا واحدًا مقدمًا، لتصبح كل عملية جمع لاحقة بحثًا سريعًا بدلًا من حلقة.

اختصار بأسلوب Python

يمكن للمكتبة القياسية إنشاء المجاميع نيابةً عنك. إذ تنتج itertools.accumulate المجاميع المتراكمة باستدعاء واحد واضح.

from itertools import accumulate
prefix = [0] + list(accumulate(a))

راقب الذاكرة

تساوي مصفوفة المجموع التراكمي طول مدخلاتك مضافًا إليه واحد. وتذكّر أن المدخلات الضخمة تضاعف استهلاكك من الذاكرة.

تحقّق سريع

أنشأتَ مصفوفة مجموع تراكمي. ماذا يحتوي الفهرس 0 عادةً؟

مراجعة

تعلمت إنشاء مصفوفة مجموع تراكمي في مرور واحد بتعقيد O(n)، مع صفر في البداية لتسهيل الفهرسة. احسب مسبقًا مرة، ثم أعد الاستخدام. ✅

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

هل درس «إنشاء مصفوفة المجاميع السابقة» مجاني؟

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

ماذا ستتعلم في «إنشاء مصفوفة المجاميع السابقة»؟

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

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

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

كم من الوقت يستغرق درس «إنشاء مصفوفة المجاميع السابقة»؟

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

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

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

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

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