AIUnlimited
🌳

أسس الذكاء الاصطناعي

🌱
AI Seeds

Start from zero

🌿
AI Sprouts

Build foundations

🌳
AI Branches

Apply in practice

🏕️
AI Canopy

Go deep

🌲
AI Forest

Master AI

🔨

إتقان الذكاء الاصطناعي

✏️
AI Sketch

Start from zero

🪨
AI Chisel

Build foundations

⚒️
AI Craft

Apply in practice

💎
AI Polish

Go deep

🏆
AI Masterpiece

Master AI

📘

تطبيق الذكاء الاصطناعي

📖
فهم النماذج مفتوحة المصدر

أسس وموارد للنماذج مفتوحة المصدر

🎯
من المشكلة إلى مهمة النموذج

تحويل مشاكل الأعمال إلى مهام نموذجية

⚡
تشغيل نموذجك الأول

شاهد نتائجك الأولى في 30 دقيقة

🔧
التحسين الدقيق والتقييم

حسّن النماذج وقيّم الأداء

🚀
أنظمة التطبيقات

بناء تطبيقات ذكاء اصطناعي واقعية

🎨
الذكاء الاصطناعي التوليدي

استكشف نماذج AIGC مفتوحة المصدر

🤖
الوكيل

تعلم أطر عمل الوكيل وأدوات MCP

📐
أسس تكميلية

أساسيات LLM والتقييم

🎓

أكاديمية كلاود

🤖
Claude 101

Learn AI basics with Claude

💻
Claude Code 101

Code with Claude as your pair programmer

🤝
Introduction to Claude Cowork

Collaborate with Claude on complex projects

⚙️
Claude Platform 101

Build apps with the Claude API

المختبر

تم تحميل 7 تجارب
🧬ملعب الشبكة العصبية🤖ذكاء اصطناعي أم إنسان؟🥋دوجو التوجيهات🏁سباق الخوارزميات🧠مسابقة معلومات الذكاء الاصطناعي🏗️لوحة تصميم النظام
🎯مقابلة تجريبيةدخول المختبر→
🚀

التطوير المهني

🚀
منصة انطلاق المقابلات

ابدأ رحلتك

🌟
إتقان المقابلات السلوكية

أتقن المهارات الشخصية

💻
المقابلات التقنية

تفوّق في جولة البرمجة

🤖
مقابلات الذكاء الاصطناعي وتعلم الآلة

إتقان مقابلات تعلم الآلة

🏆
العرض وما بعده

احصل على أفضل عرض

ابدأ الآن
AIUnlimited

رخصة MIT

沪ICP备18025655号-11

تعلّم

  • أساسيات الذكاء الاصطناعي
  • تطبيق الذكاء الاصطناعي
  • أكاديمية كلاود
  • المختبر
  • التطوير المهني

المجتمع

  • عن المنصة
  • الأسئلة الشائعة

الدعم

  • footer.terms
  • footer.privacy
  • footer.contact
البرامج الأكاديمية للذكاء الاصطناعي والهندسة›✏️ AI Sketch›الدروس›أنماط البحث الثنائي
🔍
AI Sketch • متوسط⏱️ 17 دقيقة للقراءة

أنماط البحث الثنائي

البحث الثنائي الكلاسيكي - مراجعة سريعة

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

def binary_search(nums, target):
    lo, hi = 0, len(nums) - 1
    while lo <= hi:
        mid = (lo + hi) // 2
        if nums[mid] == target:
            return mid
        elif nums[mid] < target:
            lo = mid + 1
        else:
            hi = mid - 1
    return -1

بسيطة - ولكن القوة الحقيقية للبحث الثنائي تذهب إلى ما هو أبعد من المصفوفات المصنفة.

مفهوم مساحة البحث

يعمل البحث الثنائي عندما يكون لديك حالة رتيبة عبر نطاق ما. لا يلزم وجود "المصفوفة" - فأنت تحتاج فقط إلى نطاق [lo, hi] ووظيفة تنقلب من False إلى True (أو العكس) عند بعض الحدود.

Search space:  [lo .................. hi]
Condition:      F  F  F  F  T  T  T  T
                          ^-- answer
🤯
تم نشر البحث الثنائي لأول مرة في عام 1946، ولكن لم تتم كتابة أول نسخة خالية من الأخطاء حتى عام 1962 - 16 عامًا من الأخطاء المتتالية!

البحث الثنائي عن الإجابة

بدلاً من البحث في مصفوفة، ابحث في مساحة الإجابة. اسأل: "هل يمكنني تحقيق النتيجة X؟" إذا كانت الإجابة بنعم، حاول أصغر. إذا كان الجواب لا، حاول أكبر.

مثال: كوكو تأكل الموز

لدى كوكو n أكوام من الموز وh ساعة. ابحث عن الحد الأدنى لسرعة تناول الطعام حتى تنتهي في الوقت المناسب.

def min_speed(piles, h):
    lo, hi = 1, max(piles)
    while lo < hi:
        mid = (lo + hi) // 2
        hours = sum((p + mid - 1) // mid for p in piles)
        if hours <= h:
            hi = mid      # speed works, try slower
        else:
            lo = mid + 1  # too slow, go faster
    return lo

مساحة الإجابة هي [1, max(piles)] والحالة رتيبة - السرعة الأعلى تعني دائمًا ساعات أقل.

البحث الثنائي يضيق مساحة الإجابة للحد الأدنى من سرعة تناول الطعام
البحث الثنائي عن الإجابة: قم بتضييق نطاق السرعة الممكن في كل تكرار.
الدرس 7 من 100٪ مكتمل
←الكومة وقوائم الأولوية

مناقشة

تسجيل الدخول للانضمام إلى النقاش

مصفوفة مرتبة تم تدويرها

تم تدوير مصفوفة مرتبة عند نقطة محورية: [4, 5, 6, 7, 0, 1, 2]. يتم فرز النصف دائمًا. قارن mid مع lo لتحديد النصف، ثم تحقق مما إذا كان الهدف يقع في النصف الذي تم فرزه.

[4, 5, 6, 7, 0, 1, 2]
 L        M        R
Left half [4..7] is sorted.
Target 1 not in [4..7] → search right.
🧠فحص سريع

في مصفوفة مرتبة تم تدويرها [3،4،5،1،2]، أي نصف يتم فرزه عندما يكون المنتصف = 2 (القيمة 5)؟

##الحدث الأول والأخير

للعثور على الحدث الأول، عندما تصل إلى الهدف، لا تتوقف - اضبط hi = mid واستمر في البحث إلى اليسار. بالنسبة إلى الأخير، اضبط lo = mid + 1 وابحث يمينًا.

يمنحك هذا الزوج من عمليات البحث أيضًا العدد للهدف: last - first + 1.

عنصر الذروة

عنصر أكبر من كلا الجيران. حتى في المصفوفة غير المصنفة، يعمل البحث الثنائي: إذا كانت nums[mid] < nums[mid + 1]، تكون الذروة على اليمين؛ وإلا فإنه على اليسار. يا (سجل ن).

🤔
Think about it:لماذا يعمل اكتشاف الذروة مع البحث الثنائي على الرغم من عدم فرز المصفوفة؟ ما هي الخاصية التي تحل محل الترتيب المفرز هنا؟

البحث في مصفوفة ثنائية الأبعاد

إذا تم فرز الصفوف وكان العنصر الأول في كل صف أكبر من العنصر الأخير في السابق، فتعامل مع المصفوفة كمصفوفة مرتبة واحدة من عناصر m × n. فهرس الخريطة k إلى الصف k // n، العمود k % n.

الجذر التربيعي بدون مكتبة

أوجد أكبر عدد صحيح x حيث x * x ≤ n. مساحة البحث: [0, n]. البحث الثنائي الكلاسيكي عن الإجابة.

def sqrt(n):
    lo, hi = 0, n
    while lo <= hi:
        mid = (lo + hi) // 2
        if mid * mid <= n:
            lo = mid + 1
        else:
            hi = mid - 1
    return hi

نمط "تقليل الحد الأقصى".

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

🧠فحص سريع

بالنسبة لـ ”القدرة على شحن الطرود في أيام D”، ما هي مساحة البحث للبحث الثنائي؟

القالب العالمي

lo, hi = min_possible, max_possible
while lo < hi:
    mid = (lo + hi) // 2
    if condition(mid):
        hi = mid        # mid works, try smaller
    else:
        lo = mid + 1    # mid fails, need larger
return lo

اضبط hi = mid مقابل lo = mid اعتمادًا على ما إذا كنت تبحث عن صحيح الأول أو صحيح الأخير.

🧠فحص سريع

ما هو التعقيد الزمني للبحث الثنائي في مساحة إجابة بالحجم S مع فحص جدوى O(n)؟

🤔
Think about it:عندما ترى عبارة "الحد الأدنى الأقصى الممكن" أو "الحد الأقصى الممكن الأدنى" في بيان المشكلة، ما الذي يجب أن يتبادر إلى ذهنك على الفور؟

📚 مزيد من القراءة

  • NeetCode - قائمة تشغيل البحث الثنائي - المشكلات المنسقة من السهل إلى الصعب
  • دليل المقابلة التقنية - البحث الثنائي - الأنماط والنصائح والمزالق
  • خطة دراسة البحث الثنائي LeetCode - مجموعة المشكلات التقدمية