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 الكامل بالعربي.