شرح Binary Search وأفضل طريقة للبحث في المصفوفات

x32x01
  • بواسطة x32x01 ||
  • #1
يا زعيم، لو عندك مصفوفة مرتبة (Sorted Array) سواء تصاعدي (ASC) أو تنازلي (DESC)، يبقى من غير تفكير الحل الأمثل هو خوارزمية البحث الثنائي (Binary Search) 💡

الخوارزمية دي مش بس سريعة، دي كمان بتوفر وقت ومجهود رهيب مقارنة بالـ Linear Search اللي بتدور عنصر عنصر لحد ما توصل للهدف.
تعال نوضح الفرق بينهم بالأمثلة 👇

🔍 الطريقة الأولى: Linear Search​

دي الطريقة التقليدية جدًا. بتبدأ من أول عنصر في المصفوفة وتمشي لحد ما تلاقي العنصر اللي بتدور عليه.

🎯 مثال عملي:​

عندك Array فيها الأرقام من 1 إلى 100، وعايز تدور على الرقم 67.
  • في Linear Search، هتمشي عنصر عنصر:
    من 1 → 2 → 3 → ... لحد ما توصل لـ 67.
    يعني مشيت 67 خطوة كاملة 😅

ده معناه إن الـ Time Complexity = O(n)، وده بيساوي الوقت اللي بياخده حسب طول المصفوفة.



⚡ الطريقة التانية: Binary Search​

دي الطريقة العبقرية اللي بنستخدمها لما المصفوفة تكون مرتبة Sorted.
الفكرة ببساطة: بدل ما تمشي عنصر عنصر، بتقسم المصفوفة لنصين في كل خطوة، وبتستبعد النص اللي مش محتاجه.

تعالى نشوف مثال 👇

🎯 مثال عملي:​

عندنا المصفوفة [1, 2, 3, ..., 100] وعايزين نلاقي الرقم 67.

🪜 الخطوات:
  1. نقسم المصفوفة لنصين:
    [1..50] و [51..100]
    الرقم 67 مش في النص الأول → نستبعده
  2. نشتغل على [51..100]، نقسمها تاني:
    [51..75] و [76..100]
    الرقم 67 في الرينج الأول → نبحث فيه ✅
  3. نقسم [51..75]:
    [51..62] و [63..75]
    الرقم 67 مش في الأول → نستبعده ✅
  4. نبحث في [63..75] ونقسمها تاني:
    [63..69] و [70..75]
    الرقم 67 في الأول → نبحث فيه ✅
  5. نقسم [63..69]:
    [63..66] و [67..69]
    الرقم 67 في التاني → نبحث فيه ✅
  6. نحسب منتصف [67..69]:
    mid = Math.floor((67 + 69) / 2) = 68
    نقارن… الرقم أصغر من 68 → يبقى 67 هو اللي بندور عليه 🎯

🕒 عدد الخطوات: 6 فقط بدل 67!
وده لأن الـ Time Complexity = O(log n) - أسرع بكتير جدًا 🔥



💻 كود تنفيذ Binary Search في​

JavaScript:
JavaScript
function binarySearch(arr, target) {
  let left = 0;
  let right = arr.length - 1;

  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    if (arr[mid] === target) return mid;
    if (arr[mid] < target) left = mid + 1;
    else right = mid - 1;
  }

  return -1; // العنصر مش موجود
}

// تجربة بسيطة
const numbers = Array.from({ length: 100 }, (_, i) => i + 1);
console.log(binarySearch(numbers, 67)); // الناتج: 66 (بسبب الـ index)

⚠️ ملاحظات مهمة​

  • لازم المصفوفة تكون مرتبة Sorted قبل ما تستخدم Binary Search.
  • لو المصفوفة غير مرتبة، استخدم Linear Search بدلها.
  • الفرق في الأداء بيبان جدًا لما المصفوفة تكون كبيرة.

✅ الخلاصة​

الطريقةالسرعةنوع البيانات المطلوبةالتعقيد الزمني
Linear Searchبطيئة نسبيًا ⏳أي ArrayO(n)
Binary Searchسريعة جدًا ⚡Sorted ArrayO(log n)

💬 باختصار، لو المصفوفة مرتبة، استخدم Binary Search على طول - هتوفر وقت رهيب 💪
ولو المقال فادك، ادعمه بـ 💙 أو Share عشان غيرك كمان يستفيد 🚀
 
التعديل الأخير:

المواضيع ذات الصلة

x32x01
الردود
0
المشاهدات
337
x32x01
x32x01
x32x01
الردود
0
المشاهدات
300
x32x01
x32x01
x32x01
الردود
0
المشاهدات
850
x32x01
x32x01
x32x01
الردود
0
المشاهدات
446
x32x01
x32x01
x32x01
الردود
0
المشاهدات
313
x32x01
x32x01
الوسوم : الوسوم
binary search javascript linear search o log n o n sorted array time complexity الخوارزميات المصفوفات هياكل البيانات
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟

آخر المشاركات

إحصائيات المنتدى
المواضيع
2,387
المشاركات
2,600
أعضاء أكتب كود
574
أخر عضو
الياس
عودة
أعلى