Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

البحث الخطي

آخر تحديث

البحث الخطي (ويسمى أيضًا البحث التسلسلي) هو أبسط خوارزمية بحث: ابدأ من العنصر الأول وقارن كل عنصر بالقيمة المستهدفة حتى تجد تطابقًا أو تنفد العناصر. لا يفترض شيئًا عن البيانات — يمكن أن تكون المصفوفة غير مرتبة، ويمكن أن تكون العناصر أي شيء قابل للمقارنة بالتساوي.

تُبرز الرسوم المتحركة أعلاه كل مقارنة بينما يتحرك المسح من اليسار إلى اليمين، وتتوقف لحظة ظهور الهدف. بساطته تكلفه السرعة: في أسوأ الحالات يُفحص كل عنصر، لذا يعمل في O(n). عندما تكون البيانات مرتبة، يعثر البحث الثنائي على الإجابة نفسها في O(log n) — وإذا احتجت إلى بيانات مرتبة أولًا، فانظر الترتيب بالدمج.

التعقيد الزمني والمكاني

الحالةالتعقيدملاحظات
أفضل حالةO(1)العنصر الأول هو الهدف.
الحالة المتوسطةO(n)في المتوسط يُفحص نصف العناصر قبل العثور على الهدف.
أسوأ حالةO(n)الهدف في النهاية — أو غير موجود أصلًا.
المساحةO(1)يُحتفظ فقط بالمؤشر الحالي.

خطوة بخطوة

الخطوةما الذي يحدث
1ابدأ عند المؤشر 0، أول عنصر في المصفوفة.
2قارن العنصر الحالي بالقيمة المستهدفة.
3إذا تساويا، أعد المؤشر الحالي — تم العثور عليه.
4وإلا فانتقل موضعًا واحدًا إلى اليمين وكرر.
5إذا وصلت إلى نهاية المصفوفة دون تطابق، فالهدف غير موجود (أعد -1).

مثال محلول

البحث عن 5 في [7, 3, 9, 1, 5, 8, 2]:

المقارنةالمؤشرالعنصرالنتيجة
1077 ≠ 5 — تابع المسح.
2133 ≠ 5 — تابع المسح.
3299 ≠ 5 — تابع المسح.
4311 ≠ 5 — تابع المسح.
5455 = 5 — تم العثور عليه عند المؤشر 4.

متى تستخدم البحث الخطي

استخدمه عندماتجنبه عندما
تكون البيانات غير مرتبة أو تتغير باستمرارتكون البيانات مرتبة — البحث الثنائي أسرع أُسّيًا
تكون المجموعة صغيرة، فالبساطة تفوزتكون مجموعة البيانات كبيرة ويُبحث فيها مرارًا
لا تملك سوى وصول تسلسلي (التدفقات، القوائم المتصلة)يمكنك تحمّل كلفة فهرس أو جدول تجزئة لعمليات بحث في O(1)

تنفيذ نظيف وقابل للتشغيل لخوارزمية Linear Search بلغات Python, JavaScript, Java, C++, C, Pseudocode. اختر لغة، وانسخ الكود، أو افتحه محمّلًا مسبقًا في ساحة تجربة Coddy.

كود Linear Search بلغة Python

Python
1def linear_search(a, target):2    # Scan left to right until the target appears3    for i in range(len(a)):4        if a[i] == target:5            return i6    return -17
8
9nums = [7, 3, 9, 1, 5, 8, 2]10print("Index of 5:", linear_search(nums, 5))11print("Index of 4:", linear_search(nums, 4))
شغّل هذا الكود في ساحة تجربة Python

الأسئلة الشائعة عن البحث الخطي

ما التعقيد الزمني للبحث الخطي؟
O(n) في الحالتين المتوسطة والأسوأ — فقد يضطر المسح إلى زيارة كل عنصر — وO(1) في أفضل حالة عندما يكون العنصر الأول هو الهدف. يستخدم مساحة إضافية O(1).
هل يحتاج البحث الخطي إلى بيانات مرتبة؟
لا — وهذه ميزته الرئيسية. يعمل البحث الخطي على بيانات غير مرتبة تمامًا لأنه يفحص كل عنصر بالتساوي؛ الترتيب لا يهم أبدًا. أما البحث الثنائي فلا يعمل إلا على المصفوفات المرتبة.
متى يكون البحث الخطي أفضل من البحث الثنائي؟
عندما تكون البيانات غير مرتبة وتُبحث مرة واحدة فقط (الترتيب أولًا سيكلف O(n log n))، أو عندما تكون المجموعة صغيرة جدًا، أو عندما لا تملك سوى وصول تسلسلي مثل تدفق أو قائمة متصلة. أما لعمليات البحث المتكررة في المصفوفات المرتبة، فيفوز البحث الثنائي.
هل البحث الخطي هو نفسه البحث التسلسلي؟
نعم — الاسمان يصفان الخوارزمية نفسها: مسح العناصر بالتسلسل حتى يُعثر على الهدف أو تنتهي المجموعة.
كم عدد المقارنات التي يجريها البحث الخطي في المتوسط؟
إذا كان الهدف موجودًا ومن المحتمل بالتساوي أن يكون في أي مكان، فنحو n/2 مقارنة في المتوسط؛ وإذا كان الهدف غائبًا فبالضبط n. هذا النمو الخطي هو سبب تسميته بالبحث الخطي.
Coddy programming languages illustration

أتقن الخوارزميات مع Coddy

ابدأ الآن