يعد العثور على الحد الأقصى للعنصر في المصفوفة إحدى المهام الرئيسية عند العمل مع البيانات. بغض النظر عن مدى تعقيد بنية بياناتك ، يمكن أن يكون العثور على القيمة القصوى مفيدا في كثير من الحالات. في هذه المقالة ، سنلقي نظرة على بعض الطرق والخوارزميات البسيطة التي ستساعدك في العثور على الحد الأقصى للعنصر في المصفوفة.
الطريقة الأولى والأكثر وضوحا للعثور على القيمة القصوى في صفيف هو ببساطة تكرار من خلال جميع العناصر ومقارنتها مع القيمة القصوى الحالية. إذا كانت القيمة الجديدة أكبر من الحد الأقصى الحالي ، فإنها تحل محلها. هذه الطريقة تسمى"البحث المباشر". إنه سهل التنفيذ وفعال للمصفوفات الصغيرة ، ولكنه قد يكون غير فعال لكميات كبيرة من البيانات.
الطريقة الثانية هي استخدام وظائف لغة البرمجة المدمجة للعثور على الحد الأقصى للعنصر. على سبيل المثال ، في معظم لغات البرمجة هناك وظيفة "ماكس" التي ترجع القيمة القصوى من العناصر المحددة. مجرد تمرير مجموعة كاملة لهذه الوظيفة ، وسوف يعود القيمة القصوى. هذه الطريقة هي الأبسط ، ولكنها قد تكون غير فعالة بكميات كبيرة من البيانات أو إذا كانت لديك شروط إضافية للبحث عن القيمة القصوى.
يتيح لك استخدام طرق بسيطة للعثور على الحد الأقصى للعنصر في المصفوفة حل العديد من المهام المتعلقة بمعالجة البيانات. ومع ذلك ، اعتمادا على الموقف المحدد ، قد تكون هناك حاجة إلى خوارزمية أكثر كفاءة. في الأجزاء التالية من المقالة ، سننظر في بعضها.
- البحث عن الحد الأقصى لعنصر المصفوفة
- العثور على الحد الأقصى للعنصر من خلال حلقة
- طريقة باستخدام وظائف مدمجة
- خوارزمية متكررة للعثور على الحد الأقصى للعنصر
- خوارزمية البحث الثنائية للعنصر الأقصى
- إيجاد الحد الأقصى للعنصر من خلال المقارنة
- سؤال وجواب
- ما هي الطريقة الأكثر فعالية للعثور على الحد الأقصى لعنصر المصفوفة?
- ما هي أسهل طريقة للعثور على الحد الأقصى لعنصر المصفوفة إذا كنت بحاجة إلى العثور على عنصر أقصى واحد فقط?
البحث عن الحد الأقصى لعنصر المصفوفة
يعد العثور على الحد الأقصى للعنصر في المصفوفة أحد المهام الأساسية في البرمجة. هناك العديد من الطرق والخوارزميات البسيطة التي تسمح لك بالعثور على الحد الأقصى لعنصر المصفوفة.
- البحث المتسلسل: لكل عنصر في المصفوفة ، قارن قيمته مع الحد الأقصى الحالي ، إذا كانت القيمة أكبر ، قم بتحديث العنصر الأقصى. نتيجة لذلك ، نحصل على الحد الأقصى لعنصر المصفوفة.
- البحث الثنائي (لمصفوفة مرتبة): إذا تم فرز المصفوفة بترتيب تصاعدي ، فيمكنك استخدام بحث ثنائي. جوهر الخوارزمية هو أننا نقسم المصفوفة إلى النصف ونقارن العنصر الأوسط بالقيمة المطلوبة. إذا كان العنصر المتوسط أكبر من القيمة المطلوبة ، فأنت بحاجة إلى البحث عن العنصر الأقصى فقط في النصف الأيسر من المصفوفة ، وإلا في اليمين فقط. نكرر هذه العملية حتى نجد الحد الأقصى للعنصر.
- استخدام الوظائف المضمنة: تحتوي العديد من لغات البرمجة على وظائف مضمنة للعثور على الحد الأقصى للعنصر في المصفوفة. على سبيل المثال ، في بيثون تسمى هذه الوظيفة ماكس(). مجرد تمرير مجموعة إلى هذه الوظيفة ، وسوف يعود الحد الأقصى للعنصر.
الطريقة الأولى هي الأبسط ، ولكنها تحتوي على تعقيد خطي وتتطلب عرض جميع عناصر المصفوفة. البحث الثنائي مناسب فقط للمصفوفات المصنفة وله تعقيد لوغاريتمي. يعد استخدام الوظائف المضمنة هو الحل الأبسط ، ولكنه قد يعتمد على لغة البرمجة ، وقد يكون أيضا دون المستوى الأمثل من حيث الأداء.
| صفيف | الحد الأقصى للعنصر | الخوارزمية |
|---|---|---|
| [5, 7, 3, 9, 2] | 9 | البحث المتسلسل |
| [1, 2, 3, 4, 5] | 5 | البحث المتسلسل |
| [2, 4, 6, 8, 10] | 10 | بحث ثنائي |
يعتمد اختيار الخوارزمية المثلى للعثور على الحد الأقصى للعنصر في المصفوفة على حجم المصفوفة وفرزها ومتطلبات الأداء المحددة. من المهم أن تأخذ في الاعتبار تعقيد الخوارزمية ووقت التنفيذ لتحقيق أفضل نتيجة.
العثور على الحد الأقصى للعنصر من خلال حلقة
واحدة من أسهل الطرق للعثور على الحد الأقصى للعنصر في المصفوفة هي استخدام حلقة. من خلال استعراض جميع عناصر المصفوفة ومقارنتها بالقيمة القصوى الحالية ، يمكنك العثور على أكبر عنصر.
هنا مثال على شفرة جافا سكريبت:
// إنشاء صفيف مع البيانات
مجموعة كونست = [5, 2, 9, 11, 3];
// افترض أن العنصر الأول في المصفوفة هو الحد الأقصى
السماح ماكس = مجموعة [0];
// حلقة للتكرار من خلال جميع عناصر المصفوفة
ل (اسمحوا لي = 1; أنا < صفيف.الطول ؛ أنا {) {
// إذا كان العنصر الحالي للمصفوفة أكبر من الحد الأقصى ، فقم بتحديث القيمة القصوى
إذا (صفيف [أنا] > ماكس) {
ماكس = صفيف [أنا];
}
}
وحدة التحكم.سجل (ماكس) ؛ / / الإخراج: 11
في هذا المثال ، نقوم بإنشاء مصفوفة تحتوي على بيانات ونفترض أن العنصر الأول في هذه المصفوفة هو الحد الأقصى. ثم نقوم بالتكرار من خلال جميع العناصر الأخرى للمصفوفة ومقارنتها بالقيمة القصوى الحالية. إذا وجدنا عنصرا أكبر من الحد الأقصى الحالي ، فإننا نقوم بتحديث القيمة القصوى. نتيجة لذلك ، سيتم إخراج القيمة القصوى للمصفوفة إلى وحدة التحكم.
باستخدام هذا الأسلوب ، يمكنك بسهولة العثور على الحد الأقصى للعنصر في المصفوفة دون استخدام طرق أو خوارزميات خاصة.
طريقة باستخدام وظائف مدمجة
واحدة من أبسط الطرق وأكثرها ملاءمة للعثور على الحد الأقصى للعنصر في المصفوفة هي استخدام وظائف لغة البرمجة المدمجة.
تحتوي معظم لغات البرمجة على وظائف مضمنة تسمح لك بالعثور على الحد الأقصى للعنصر في المصفوفة دون الحاجة إلى إنشاء خوارزميات إضافية. Вот несколько примеров:
- max_element = max(array)
- int maxElement = Collections.max(Arrays.asList(array));
C++:
int maxElement = *max_element(array.begin(), array.end());
- Эти функции просто принимают массив (или контейнер) в качестве аргумента и возвращают максимальный элемент. يتم تنفيذها باستخدام خوارزميات محسنة وفي معظم الحالات تعمل بسرعة وكفاءة.
ومع ذلك ، تجدر الإشارة إلى أن استخدام الوظائف المضمنة قد لا يكون الطريقة الأكثر فعالية في بعض الحالات. إذا كنت بحاجة إلى العثور على الحد الأقصى للعنصر في مصفوفة كبيرة وكان الأداء أمرا بالغ الأهمية ، فقد يكون من المفيد التفكير في خوارزميات أكثر تحسينا ، على سبيل المثال ، مقارنة العناصر مباشرة في حلقة أو استخدام خوارزميات الفصل والاتحاد.
على أي حال ، فإن استخدام الوظائف المضمنة للعثور على الحد الأقصى للعنصر هو طريقة بسيطة ومريحة مناسبة لمعظم المهام.
خوارزمية متكررة للعثور على الحد الأقصى للعنصر
تعد الخوارزمية العودية لإيجاد الحد الأقصى للعنصر في المصفوفة إحدى طرق حل هذه المشكلة. العودية هي تقنية برمجة تستدعي فيها الوظيفة نفسها.
للعثور على الحد الأقصى للعنصر في مصفوفة باستخدام العودية ، سنستخدم النهج التالي:
نحدد الحالة الأساسية. الحالة الأساسية هي حالة تتكون فيها المصفوفة من عنصر واحد. في هذه الحالة ، سيكون الحد الأقصى للعنصر مساويا لهذا العنصر الفردي.
نقوم بتقسيم المصفوفة إلى نصفين وندعو بشكل متكرر الحد الأقصى لوظيفة البحث عن العناصر لكل نصف.
نقارن العناصر القصوى التي تم العثور عليها من النصفين ونعيد أكبرها نتيجة لذلك.
ستكون نتيجة الدالة العودية أكبر عنصر في المصفوفة. هذه الخوارزمية لها وقت تشغيل ا (ن) ، أين ن هو عدد العناصر في المصفوفة.
مثال على تنفيذ خوارزمية البحث عن العناصر القصوى العودية في جافا سكريبت:
وظيفة فيندماكس (أر) {
// الحالة الأساسية: تتكون المصفوفة من عنصر واحد
إذا (آر.الطول = = = 1) {
عودة آر [0];
}
// تقسيم المصفوفة إلى نصفين
فار منتصف = الرياضيات.الطابق (آر.الطول / 2);
فار اليسار = آر.شريحة (0 ، منتصف);
فار الحق = آر.شريحة (منتصف);
// استدعاء متكرر الحد الأقصى لوظيفة البحث عن العناصر لكل نصف
// قارن العناصر القصوى التي تم العثور عليها من النصفين وأعد أكبرها
عودة الرياضيات.ماكس (ماكسليفت ، ماكسرايت);
}
مجموعة فار= [1, 5, 7, 3, 9, 2];
فار ماكس = فيندماكس (صفيف);
وحدة التحكم.سجل (ماكس) ؛ / / 9
في هذا المثال ، الدالة
- فيندماكس
- تستدعي نفسها بشكل متكرر لأجزاء من المصفوفة حتى تصل إلى الحالة الأساسية. ثم يقارن العناصر القصوى من نصفين وإرجاع أكبر منهم.
- تسمح لك خوارزمية البحث الثنائية للعنصر الأقصى بالعثور على أكبر عنصر في مصفوفة مرتبة في ا(سجل ن) الوقت ، أين ن هو عدد عناصر المصفوفة.
قارن عنصر الصفيف الحالي مع ماكسليمنت:
إذا كان العنصر الحالي أكبر من ماكسليمنت ، قم بتحديث قيمة ماكسليمنت.
إذا كان العنصر الحالي أقل من أو يساوي الحد الأقصىعنصر ، انتقل إلى الخطوة التالية.
قارن العنصر الحالي للمصفوفة بالعنصر الموجود على يمينها:
إذا كان العنصر الحالي أكبر من العنصر الموجود على اليمين ، فاتبع الخطوات التالية:
تحديث قيمة ماكسليمنت.
تحديث قيمة اليسار: تعيين القيمة الأوسط + 1.
إذا كان العنصر الحالي أقل من أو يساوي العنصر الموجود على اليمين ، فقم بتحديث قيمة اليمين: قم بتعيين القيمة منتصف — 1.
4. في نهاية الحلقة ، سيحتوي العنصر الأقصى المتغير على الحد الأقصى لعنصر المصفوفة.
نموذج شفرة جافا سكريبت:
وظيفة بيناريسيرتشماكسيليمنت (أر) {
ترك اليسار = 0;
دعونا الحق = آر.طول-1;
دع الحد الأقصى = آر [0];
بينما (يسار <= يمين) {
دعونا الأوسط = الرياضيات.الطابق ((يسار + يمين) / 2);
if (arr[middle] > maxElement) {
maxElement = arr[middle];
}
if (arr[middle] > arr[middle + 1]) {
maxElement = arr[middle];
left = middle + 1;
} else {
right = middle - 1;
}
}
return maxElement;
}
// Пример использования
let array = [1, 3, 5, 7, 9, 8, 6, 4, 2];
let max = binarySearchMaxElement(array);
console.log(max); // Выведет: 9
Поиск максимального элемента через сравнение
تتمثل إحدى أسهل الطرق للعثور على العنصر الأقصى في المصفوفة في مقارنة كل عنصر بالعنصر الأقصى الحالي وتحديث قيمة العنصر الأقصى إذا كانت قيمة العنصر الحالي أكبر. تعتمد هذه الخوارزمية على حلقة بسيطة تمر عبر كل عنصر من عناصر المصفوفة وتقارنه بقيمة العنصر الأقصى.
يوجد أدناه مثال على شفرة جافا سكريبت توضح هذه الخوارزمية:
"`
وظيفة فيندماكسيليمنت (صفيف) {
دع الحد الأقصى = صفيف [0];
ل (اسمحوا لي = 1; أنا < صفيف.الطول ؛ أنا {) {
إذا (صفيف [أنا] > ماكسليمنت) {
ماكسليمنت = صفيف [أنا];
يأخذ صفيف كوسيطة وتهيئة متغير
ماكسيليمنت
. إذا كان العنصر الحالي أكبر
ماكسيليمنت
, القيمة
ماكسيليمنت
تحديث.
بعد الانتهاء من الحلقة ، تقوم الدالة بإرجاع القيمة