> ## Content Index
> Fetch the complete content index at: https://informatic-ar.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# خوارزمية البحث الثنائى Binary search
- URL: https://informatic-ar.com/binary-search/
- Published: 2018-01-12T05:17:19.000Z
- Updated: 2026-10-03T22:31:33.000Z
- Author: dr.savealife
- Tags: جافا, خوارزميات, Binary search, خوارزمية البحث الثنائى, #wordpress-archive, #Import 2026-10-03 20:48

افترض انك تبحث عن شخص فى دليل التليفون وكان اسمة يبدأ بحرف الكاف (بالطريقة التقليدية) فأنت تبدأ بفتح الدليل وتبحث من الصفحة الاولى وتقلب الصفحات الى أن تصل للصحفة التى بها حرف الكاف . لكن كان من الافضل ان تبدأ من منتصف الدليل لانك تعلم أن حرف الكاف ليس من الحروف الاولى فى الترتيب الابجدى

افترض انك مسجل فى Facebook عندما تقوم بعمل دخول sign in فأن Facebook يجب ان يتأكد ان اسم المستخدم موجود لدية فى الdatabase اى يبحث عنة ومن الافضل ان يبدأ البحث فى الdatabase من نقطة فى الوسط

هذة التطبيقات وغيرها كثير عبارة عن مشاكل بحثsearch problem تستخدم او تحتاج لاستخدام خوارزمية binary search لحلها.

**Binary search** هى عبارة عن خوارزمية المدخل لها عبارة عن قائمة بها عناصر مرتبة والمخرج منها عبارة عن موقع العنصر الذى تبحث عنة  
**مثال:**

لكى نفهم كيف تتم العمليات فى binary search المثال عبارة عن لعبة التخمين وفيها اعطيك قائمة مرتبة بها الارقام من 1 الى 100

وانت عليك ان تخمن الرقم الذى اخترتة فى اقل عدد من التخمينات وكل مرة تقوم بتخمين رقم سوف ارشدك بأننى اقول لك الرقم كبير جدا too high او صغير جدا too low او صحيح correct

**لنبدأ :**  
كما بالصورة الرقم الصحيح هو 7 وقام اللاعب بتخمين رقم واحد فكانت الاجابة too low  
[![](https://informatic-ar.com/wp-content/uploads/2017/12/guess_1.png)](https://informatic-ar.com/wp-content/uploads/2017/12/guess%5F1.png)

ثم قام اللاعب بتخمين الرقم 2 وكانت الاجابة too low فقام بالغاؤة الى ان وصل اللاعب للرقم 7 وهو الرقم الصحيح , نلاحظ فى هذة الطريقة انك بدأت من البداية للقائمة بالرقم واحد وعندما كان خطأ خذفتة وقلت الرقم الذى يلية وهكذا الى ان تصل للرقم الصحيح .

[![](https://informatic-ar.com/wp-content/uploads/2017/12/guess_2.png)](https://informatic-ar.com/wp-content/uploads/2017/12/guess%5F2.png)لكن هناك طريقة افضل فى البحث هى :  
ان تبدأ بالرقم فى الوسط middle وليكن 50 فتكون الاجابة too low لذلك انت تقوم بالغاء الارقام من 1 الى 50 دفعة واحدة  
[![](https://informatic-ar.com/wp-content/uploads/2017/12/guess_3.png)](https://informatic-ar.com/wp-content/uploads/2017/12/guess%5F3.png)ثم تبدأ بتخمين رقم جديد وليكن 75 فتكون الاجابة too high

[![](https://informatic-ar.com/wp-content/uploads/2017/12/guess_4.png)](https://informatic-ar.com/wp-content/uploads/2017/12/guess%5F4.png)

مرة اخرى تقم بالغاء الارقام من 75 الى 100 وتكون الارقام المرجح انها صحيحة بين 51 الى 74 وهكذا الى ان تصل للرقم الصحيح

[![](https://informatic-ar.com/wp-content/uploads/2017/12/guess_5.png)](https://informatic-ar.com/wp-content/uploads/2017/12/guess%5F5.png)

هذة هى خوارزمية البحث الثنائى لو اردنا حساب كم رقم ممكن ان نحذفة فى كل خطوة iteration

فمهما كان الرقم الذى افكر فية فيمكنك ان تستنتجة فى 7 خطوات iteration فقط لانك فى كل مرة تخمن فيها رقم سوف تقوم بالغاء نصف الارقام .

[![](https://informatic-ar.com/wp-content/uploads/2018/01/guess6.png)](https://informatic-ar.com/wp-content/uploads/2018/01/guess6.png)**للتوضيح اكثر تخيل اننا نبحث عن كلمة فى قاموس والقاموس بة 240,000 كلمة فكم عدد الخطوات سوف تأخذ الخوارزمية العادية وخوارزمية البحث الثنائى لايجادها**  
[![](https://informatic-ar.com/wp-content/uploads/2018/01/guess_7.png)](https://informatic-ar.com/wp-content/uploads/2018/01/guess%5F7.png)

فى الخوارزمية العادية فى اسوء الحالات لو كانت الكلمة اخر كلمة فى القاموس فسوف تأخذ 240,000 خطوة لايجاد الكلمة اما خوارزمية البحث الثنائى ففى كل خطوة سوف تقوم بتقسيم الكلمات الى نصفين وتلغى احدهما الى ان تصل الى كلمة واحدة فقط

[![](https://informatic-ar.com/wp-content/uploads/2018/01/guess_8.png)](https://informatic-ar.com/wp-content/uploads/2018/01/guess%5F8.png)اذا سوف تأخذ 18 خطوة فقط اكيد طبعا فرق كبير بين عدد الخطوات فى الخوارزميتين

**بصورة عامة فأن خوارزمية البحث الثنائى اذا كان لدى قائمة مكونة من n عنصر فهى تأخذ عدد من الخطوات بمقدار log2 n لايجاد اى عنصر فى قائمة**  
**ملحوظة :**  
عند استخدام خوارزمية البحث الثنائى يجب ان تكون العناصر فى القائمة مرتبة sorted list  
**Running time**

عند التحدث عن اى خوارزمية يجب ان نتحدث عن كفائتها من حيث إما :

- **الوقت running time**
- **أو المساحة فى الذاكرة space**

بالنسبة لخوارزمية البحث الثنائى كم هو الوقت الذى نحفظة عند استخدامها ؟

لو نظرنا الى الخوارزمية العادية نجد اننا نختبر كل عنصرمرة تلو الاخرى اى اذا لدينا قائمة بها 100 عنصر فسوف نخمن 100 مرة واذا لدينا قائمة بها 4 بليون عنصر سوف نخمن 4 بليون مرة اى عدد التخمينات يكون مساوى لحجم القائمة ونطلق على ذلك ان **الخوارزمية تعمل فى linear time او** **O(n)**  
فى خوارزمية البحث الثنائى الامر مختلف اذا لدينا قائمة بها 100 عنصر سوف يكون عدد التخمينات 7 مرات واذا لدينا قائمة بها 4 بليون عنصر سوف يكون عدد التخمينات 32 مرة اى ان **الخوارزمية تعمل فى log time اى O(log(n))**  كما موضح بالشكل

[![](https://informatic-ar.com/wp-content/uploads/2018/01/guess_9.png)](https://informatic-ar.com/wp-content/uploads/2018/01/guess%5F9.png)  
**الكود بالبايثون:**  
اذا اردنا كتابة الكود للبحث عن رقم ما بالقائمة -فهذا الكود يبحث عن رقم 3 بالقائمة  
\[1, 3, 5, 7, 9\]

```plain
def binary_search(list, item):
low = 0
high = len(list)—1
while low <= high:
mid = (low + high)//2
guess = list[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None
my_list = [1, 3, 5, 7, 9]
print binary_search(my_list, 3) # => 1
print binary_search(my_list, -1) # => None
```

**الكود بالجافا**

```plain
public static int binarySearch(int[] a, int key) { 
 int low = 0; 
 int high = a.length - 1; 
 while (low <= high) { 
  int mid = (low + high) / 2; 
  int midVal = a[mid];  
  if (midVal < key) 
    low = mid + 1 
  else if (midVal > key) 
    high = mid - 1; 
  else 
    return mid; // key found
  } 
 return -(low + 1); // key not found. 
}
```

**رجاء:لا تنسونى من الدعاء عن ظهر غيب** 

**رَبِّ إِنِّي لِمَا أَنزَلْتَ إِلَيَّ مِنْ خَيْرٍ فَقِيرٌ**

**الحمد الله رب العالمين والصلاة والسلام على أشرف المرسلين سيدنا محمد صلى الله علية وسلم وعلى اله وصحبة وسلم -اللهم دومها نعمة وأحفظها من الزوال -أمين**