0Pricing
Competitive Programming Academy · درس

البحث الثنائي الكلاسيكي دون أخطاء

إتقان حلقة low وhigh وmid

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

نصّف مساحة البحث

يعثر البحث الثنائي على قيمة في قائمة مرتبة بتقسيم النطاق إلى نصفين في كل خطوة. وبذلك يتحول المسح البطيء O(n) إلى بحث سريع بتعقيد O(log n).

a = [1, 3, 5, 7, 9]  # must be sorted

الترتيب هو القاعدة الوحيدة

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

a.sort()  # ascending order required

حدّان

ابدأ بمؤشرين: low عند الفهرس 0 وhigh عند الفهرس الأخير. وتبقى القيمة المستهدفة، إن وُجدت، بينهما دائمًا.

low, high = 0, len(a) - 1

أوجد الوسط بأمان

احسب mid على صورة low + (high - low) // 2. لا يمثل تجاوز السعة مشكلة في Python، لكن هذه الصيغة عادة آمنة في كل مكان.

mid = low + (high - low) // 2

ثلاث نتائج

قارن a[mid] بالقيمة المستهدفة. إما أن تكون قد عثرت عليها، أو أن تكون أصغر من المطلوب، أو أكبر منه. وتقلّص كل حالة النطاق بطريقة مختلفة.

if a[mid] == target:
    return mid

أصغر من المطلوب، اتجه يمينًا

إذا كانت a[mid] أصغر من القيمة المستهدفة، فلا بد أن تكون الإجابة إلى اليمين. حرّك low إلى mid + 1 وتخلّص من النصف الأيسر.

elif a[mid] < target:
    low = mid + 1

أكبر من المطلوب، اتجه يسارًا

إذا كانت a[mid] أكبر من القيمة المستهدفة، فابحث في النصف الأيسر. حرّك high إلى mid - 1 حتى لا تعيد فحص mid.

else:
    high = mid - 1

شرط الحلقة

تابع ما دام low أصغر من high أو مساويًا له. عندما يتجاوز أحدهما الآخر، يصبح النطاق فارغًا ولا تكون القيمة المستهدفة موجودة.

while low <= high:
    mid = low + (high - low) // 2

أبلغ عن عدم العثور

إذا انتهت الحلقة من دون تطابق، فالقيمة غير موجودة. أعد -1 وفقًا للعرف، حتى يتمكن المستدعي من التمييز بين النجاح والفشل.

return -1  # target not in list

فخ الانحراف بمقدار واحد

الخطأ الشائع هو نسيان +1 أو -1 عند تحريك المؤشر. وإذا أغفلته، فستُعاد مقارنة mid إلى الأبد، ما يؤدي إلى حلقة لا نهائية.

low = mid + 1  # not low = mid

استخدم المكتبة متى أمكنك ذلك

لاختبار عضوية بسيط، توفّر وحدة bisect في Python بحثًا خاليًا من الأخطاء. اكتب الحلقة يدويًا فقط عندما تحتاج إلى منطق مخصص.

import bisect
i = bisect.bisect_left(a, target)

اختبار سريع

فكّر في العامل الذي يُبقي الحلقة منضبطة.

مراجعة: ابحث بلا أخطاء

يمكنك الآن ضبط low وhigh، وحساب mid بأمان، وتقليص الجانب الصحيح، وتجنب فخ الانحراف بمقدار واحد. أصبح البحث اللوغاريتمي في متناولك. 🎯

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

هل درس «البحث الثنائي الكلاسيكي دون أخطاء» مجاني؟

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

ماذا ستتعلم في «البحث الثنائي الكلاسيكي دون أخطاء»؟

إتقان حلقة low وhigh وmid تتمرن على 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. ‏bisect_left وbisect_right
  3. أول True: البحث الثنائي بالمسند
  4. البحث الثنائي عن الإجابة
← العودة إلى Competitive Programming Academy