- بواسطة x32x01 ||
يا زعيم، لو عندك مصفوفة مرتبة (Sorted Array) سواء تصاعدي (ASC) أو تنازلي (DESC)، يبقى من غير تفكير الحل الأمثل هو خوارزمية البحث الثنائي (Binary Search) 💡
الخوارزمية دي مش بس سريعة، دي كمان بتوفر وقت ومجهود رهيب مقارنة بالـ Linear Search اللي بتدور عنصر عنصر لحد ما توصل للهدف.
تعال نوضح الفرق بينهم بالأمثلة 👇
ده معناه إن الـ Time Complexity = O
، وده بيساوي الوقت اللي بياخده حسب طول المصفوفة.
الفكرة ببساطة: بدل ما تمشي عنصر عنصر، بتقسم المصفوفة لنصين في كل خطوة، وبتستبعد النص اللي مش محتاجه.
تعالى نشوف مثال 👇
🪜 الخطوات:
🕒 عدد الخطوات: 6 فقط بدل 67!
وده لأن الـ Time Complexity = O(log n) - أسرع بكتير جدًا 🔥
💬 باختصار، لو المصفوفة مرتبة، استخدم Binary Search على طول - هتوفر وقت رهيب 💪
ولو المقال فادك، ادعمه بـ 💙 أو Share عشان غيرك كمان يستفيد 🚀
الخوارزمية دي مش بس سريعة، دي كمان بتوفر وقت ومجهود رهيب مقارنة بالـ Linear Search اللي بتدور عنصر عنصر لحد ما توصل للهدف.
تعال نوضح الفرق بينهم بالأمثلة 👇
🔍 الطريقة الأولى: Linear Search
دي الطريقة التقليدية جدًا. بتبدأ من أول عنصر في المصفوفة وتمشي لحد ما تلاقي العنصر اللي بتدور عليه.🎯 مثال عملي:
عندك Array فيها الأرقام من 1 إلى 100، وعايز تدور على الرقم 67.- في Linear Search، هتمشي عنصر عنصر:
من 1 → 2 → 3 → ... لحد ما توصل لـ 67.
يعني مشيت 67 خطوة كاملة 😅
ده معناه إن الـ Time Complexity = O
⚡ الطريقة التانية: Binary Search
دي الطريقة العبقرية اللي بنستخدمها لما المصفوفة تكون مرتبة Sorted.الفكرة ببساطة: بدل ما تمشي عنصر عنصر، بتقسم المصفوفة لنصين في كل خطوة، وبتستبعد النص اللي مش محتاجه.
تعالى نشوف مثال 👇
🎯 مثال عملي:
عندنا المصفوفة [1, 2, 3, ..., 100] وعايزين نلاقي الرقم 67.🪜 الخطوات:
- نقسم المصفوفة لنصين:
[1..50] و [51..100]
الرقم 67 مش في النص الأول → نستبعده ✅ - نشتغل على [51..100]، نقسمها تاني:
[51..75] و [76..100]
الرقم 67 في الرينج الأول → نبحث فيه ✅ - نقسم [51..75]:
[51..62] و [63..75]
الرقم 67 مش في الأول → نستبعده ✅ - نبحث في [63..75] ونقسمها تاني:
[63..69] و [70..75]
الرقم 67 في الأول → نبحث فيه ✅ - نقسم [63..69]:
[63..66] و [67..69]
الرقم 67 في التاني → نبحث فيه ✅ - نحسب منتصف [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 | بطيئة نسبيًا ⏳ | أي Array | O |
| Binary Search | سريعة جدًا ⚡ | Sorted Array | O(log n) |
💬 باختصار، لو المصفوفة مرتبة، استخدم Binary Search على طول - هتوفر وقت رهيب 💪
ولو المقال فادك، ادعمه بـ 💙 أو Share عشان غيرك كمان يستفيد 🚀
التعديل الأخير: