تخطَّ إلى المحتوى

Binary Search

البحث الثنائي Binary Search

Binary Search تنصّف نطاق البحث بكل خطوة (تقارن بالعنصر الأوسط) — أسرع بكثير من البحث الخطّي، لكنها تتطلّب بيانات مرتّبة سلفًا.

بكل مقارنة، تستبعد نصف العناصر المتبقية بالكامل — لهذا تعقيدها O(log n) المذهل: مليون عنصر يحتاج بحثًا خطّيًا حتى مليون مقارنة بأسوأ حالة، لكن بحثًا ثنائيًا 20 مقارنة فقط تقريبًا.

الصياغة

low, high = 0, len(arr) - 1
while low <= high:
    mid = (low + high) // 2
    if arr[mid] == target:
        return mid
    elif arr[mid] < target:
        low = mid + 1
    else:
        high = mid - 1
return -1

📄 مثال

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

sorted_arr = [1, 3, 5, 7, 9, 11, 13]
print(binary_search(sorted_arr, 9))  # 4

أهم النقاط

النقطةالوظيفة
التعقيد الزمنيO(log n) — سريعة جدًا حتى مع ملايين العناصر
الشرط الإلزاميالبيانات يجب أن تكون **مرتّبة سلفًا** — لا تعمل بلا هذا الشرط إطلاقًا

💡 نصائح عملية

  • لو تبحث مرارًا بنفس البيانات، رتّبها مرة واحدة ثم استخدم Binary Search دائمًا بدل البحث الخطّي المتكرّر

⚠️ أخطاء شائعة

  • استخدامها على بيانات غير مرتّبة — تُعطي نتائج خاطئة تمامًا، ليس فقط أبطأ

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DSA الكامل بالعربي.