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

x32x01
  • بواسطة x32x01 ||
يا زعيم، لو عندك مصفوفة مرتبة (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
المشاهدات
547
x32x01
x32x01
x32x01
الردود
0
المشاهدات
445
x32x01
x32x01
x32x01
الردود
0
المشاهدات
572
x32x01
x32x01
x32x01
الردود
0
المشاهدات
450
x32x01
x32x01
x32x01
الردود
0
المشاهدات
433
x32x01
x32x01
x32x01
الردود
0
المشاهدات
56
x32x01
x32x01
x32x01
الردود
0
المشاهدات
715
x32x01
x32x01
x32x01
الردود
0
المشاهدات
620
x32x01
x32x01
x32x01
الردود
0
المشاهدات
52
x32x01
x32x01
x32x01
الردود
0
المشاهدات
751
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,830
المشاركات
2,027
أعضاء أكتب كود
466
أخر عضو
chaouki
عودة
أعلى