3 - DS - Searching Algorithms

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

‫‪Sheet-3‬‬

‫تراكيب البيانات والخوارزميات‬

‫خوارزميات البحث‬
‫)‪(SEARCHING ALGORITHMS‬‬

‫أستاذ المادة‬
‫د‪ .‬خالد سويسي‬
‫ما هي خوارزميات البحث؟‬
‫■ تم تصميم خوارزميات البحث للتحقق من وجود عنصر أو استرداد عنصر من أي هيكل‬
‫بيانات يكون العنصر مخزنا فيها (كالمصفوفات أو القوائم)‪.‬‬
‫■ تصنف خوارزميات البحث بشكل عام على حسب نوع أو طبيعة عملية البحث إلى فئتين‬
‫رئيسيتين هما‪:‬‬
‫‪ .1‬البحث التسلسلي (‪ :)Sequential Search‬في هذا النوع من البحث يجري التنقل‬
‫عبر عناصر المصفوفة بالتتابع مع التحقق من كل عنصر فيها‪ ،‬ومن األمثلة على هذا‬
‫النوع هو البحث الخ ّطي (‪.)Linear Search‬‬
‫صا‬
‫‪ .2‬البحث المقطعي (‪ :)Interval Search‬صممت هذا النوع من الخوارزميات خصي ً‬
‫للبحث في هياكل البيانات المرتبة في األصل‪ .‬ويعتبر هذا النوع من خوارزميات البحث‬
‫أكثر فاعلية من البحث الخطي حيث أنها تستهدف بشكل متكرر مركز هيكلية البحث‬
‫وتقسم مساحة البحث إلى النصف‪ .‬ومن أمثلتها البحث الثنائي (‪.)Binary Search‬‬
ّ ‫ خوارزمية البحث الخ‬-1
‫طي‬
)LINEAR SEARCH ALGORITHM(
‫كيفية عمل خوارزمية البحث الخ ّطي (‪)Linear Search‬‬
‫■ تعتبر من أبسط خوارزميات البحث المتبعة‪.‬‬
‫■ تتم عملية البحث عن طريق البحث من‬
‫أول المصفوفة بشكـل متتالـي مـرورا بكل‬
‫عنصر – الواحد يلو األخر‪.‬‬
‫■ يتم التحقق من كل عنصر فيما اذا كان‬
‫يساوي العنصر المراد البحث عنه (‪.)key‬‬
‫■ إذا تطابق أي من عناصر المصفوفة مع مفتاح البحث (‪ )key‬عليه ستكون عملية‬
‫البحث ناجحة وسيتم إرجاع فهرس العنصر الذي تم إيجادة‪.‬‬
‫■ وإال سيستمر البحث بالمرور على كل العناصر وصوال الى اخر عنصر وإذ لم يتم‬
‫إيجاد العنصر المراد البحث عنه‪ ،‬عليه سينتج عن البحث "فشل في ايجاد تطابق"‪.‬‬
‫مثال عن آلية عمل دالة البحث الخطي‬
‫دالة البحث الخطي‬
‫■ فيما يلي الدالة (‪ )linearSearch‬المتبعة إلجراء عملية البحث داخل المصفوفة‪:‬‬

‫*‪/‬‬ ‫دالة البحث عن العدد ‪ x‬إذا كانت موجودة في المصفوفة أم ال‬ ‫‪*/‬‬

‫)‪int linearSearch(int arr[ ], int N, int x‬‬


‫{‬
‫)‪for (int i = 0; i < N; i++‬‬
‫)‪if (arr[i] == x‬‬
‫;‪return i‬‬
‫;‪return -1‬‬
‫}‬
‫ خوارزمية البحث الثنائي‬-2
)BINARY SEARCH ALGORITHM(
‫كيفية عمل خوارزمية البحث الثنائي (‪)Binary Search‬‬
‫■ البحث الثنائي هو خوارزمية بحث سريعة‪ .‬حيث تعمل هذه الخوارزمية على مبدأ فرق‬
‫تسد (كما هو مستخدم في الترتيب السريع)‪ .‬لكي تعمل هذه الخوارزمية بشكل صحيح ‪،‬‬
‫يجب أن تكون المصفوفة مرتبة في األصل‪.‬‬
‫■ البحث الثنائي يقوم بالبحث عن عنصر معين من خالل مقارنته بالعنصر األوسط في‬
‫المجموعة‪ .‬وفي حالة حدوث تطابق يتم إرجاع فهرس العنصر‪.‬‬
‫■ أما إذا كان العنصر المراد البحث عنه أصغر من العنصر األوسط‪ ،‬هنا سيتم البحث عن‬
‫العنصر في القسم األيسر من العنصر األوسط والتي في العادة تحوي العناصر األصغر‬
‫من العنصر األوسط ‪.‬‬
‫■ أما إذا كان العكس‪ ،‬سيتم البحث هنا عن العنصر في الجانب األيمين من العنصر األوسط‪.‬‬
‫■ تستمر هذه العملية في تقليص مساحة البحث بالتقسيم إلى مصفوفات فرعية حتى يتم إيجاد‬
‫العنصر أو أن أخر قسم للمصفوفة الفرعية ال يحتوي على العنصر الذي نبحث عنه‪.‬‬
‫مثال عن آلية عمل دالة البحث الثنائي‬
‫دالة البحث الثنائي‬
:‫) المتبعة إلجراء عملية البحث الثنائي داخل المصفوفة‬binarySearch( ‫■ فيما يلي الدالة‬
// An iterative binary search function.
int binarySearch(int arr[], int low, int high, int x)
{
while (low <= high) {
int mid = (low + high) / 2;

// Check if x is present at mid


if (arr[mid] == x)
return mid;
// If x greater, ignore left half
if (arr[mid] < x)
low = mid + 1;
// If x is smaller, ignore right half
else
high = mid - 1;
}
// If we reach here, then element was not present
return -1;
}
‫النهاية‬

THANK YOU ☺

You might also like