مجاميع نافذة ثابتة الحجم
تحريك نافذة طولها k في O(n)
مجاميع نافذة ثابتة الحجم درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
مشكلة المجموع المتكرر
تطلب مسائل كثيرة حساب مجموع كل كتلة من k عناصر متتالية. إعادة حساب كل كتلة من الصفر تهدر الوقت، ويمكنكم تنفيذ ذلك بكفاءة أكبر. 🪟
الطريقة البطيئة أولًا
تجمع الفكرة الساذجة كل نافذة طولها k على حدة. وهذا يكرر العمل وتبلغ كلفته O(n × k)، وهو بطيء جدًا للمدخلات الكبيرة.
for i in range(n - k + 1):
s = sum(a[i:i + k])الفكرة الأساسية
تتداخل النوافذ المتجاورة تداخلًا شبه كامل. وعند التحرك خطوة واحدة إلى اليمين، لا نحتاج إلا إلى إزالة العنصر الموجود في أقصى اليسار وإضافة عنصر جديد من اليمين.
تهيئة النافذة الأولى
ابدؤوا بجمع أول k عناصر مرة واحدة. فهذا المجموع المفرد هو الأساس الذي ستواصلون تحديثه أثناء انزلاق النافذة إلى الأمام.
window = sum(a[:k])
best = windowحرّكوا النافذة خطوة واحدة
لتحريك النافذة، أضيفوا العنصر الداخل واطرحوا العنصر الخارج. وهكذا تبقى كلفة كل خطوة ثابتة وتساوي O(1).
for i in range(k, n):
window += a[i] - a[i - k]تتبّعوا الإجابة
بعد كل انزلاق، حدّثوا ما تحتاجون إليه، مثل أكبر مجموع نافذة ظهر حتى الآن. فقيمة النافذة تكون متاحة فورًا دائمًا.
best = max(best, window)الكلفة الإجمالية خطية
تلمسون كل عنصر لإضافته، ثم تلمسونه مرة أخرى لإزالته، لذلك تكون عملية المرور كاملة بتعقيد O(n). وهذا يتعامل بسهولة مع القيود الكبيرة.
انتبهوا إلى الفهارس
العنصر الذي يغادر النافذة هو a[i - k]، وليس a[i - 1]. ويُعد ضبط هذا الإزاحة بالشكل الصحيح الخطأ الأكثر شيوعًا في النوافذ ثابتة الطول.
المتوسطات متاحة بسهولة
هل تحتاجون إلى متوسط النافذة الأكبر بدلًا من مجموعها؟ اقسموا مجموع النافذة المتتبَّع على k فحسب. ولا يتغير منطق النافذة المنزلقة إطلاقًا.
avg = window / kتعاملوا مع المصفوفات الصغيرة
إذا كانت المصفوفة أقصر من k، فلن توجد نافذة كاملة. افحصوا len(a) مقارنةً بـ k مسبقًا وأعيدوا النتيجة مبكرًا لتجنب خطأ الفهرسة.
if n < k:
return Noneمتى تناسب النوافذ الثابتة
استخدموا هذا النمط عندما يكون طول النافذة ثابتًا وتستطيعون دمج القيم بكلفة منخفضة، مثل المجاميع أو أعداد العناصر أو الإحصاءات الجارية البسيطة.
تحقق سريع
تحرّكون نافذة بحجم k خطوة واحدة إلى اليمين عبر مصفوفة.
مراجعة
هيّئوا النافذة الأولى مرة واحدة، ثم أضيفوا واطرحوا في كل خطوة لتحريكها بتعقيد O(1). ويمر الفحص الكامل ذي الحجم الثابت في زمن خطي. ✅
الأسئلة الشائعة
هل درس «مجاميع نافذة ثابتة الحجم» مجاني؟
نعم — نص درس «مجاميع نافذة ثابتة الحجم» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
ماذا ستتعلم في «مجاميع نافذة ثابتة الحجم»؟
تحريك نافذة طولها k في O(n) تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟
لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «مجاميع نافذة ثابتة الحجم»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟
نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مجاميع نافذة ثابتة الحجم
- نافذة متغيرة بمؤشرين
- أطول سلسلة فرعية دون تكرار
- عدّ النوافذ التي تحقق قاعدة