عند العمل مع صفائف البيانات في البرمجة ، يصبح من الضروري أحيانا العثور على عدة عناصر أصغر. يتم ذلك عادة عن طريق فرز المصفوفة وأخذ العناصر القليلة الأولى. ومع ذلك ، هناك طريقة للعثور على أصغر ثلاثة عناصر في مسار واحد عبر المصفوفة دون فرز.
تتكون الخوارزمية من ثلاث خطوات:
- تهيئة المتغيرات الثلاثة دقيقة 1 ، دقيقة 2 و دقيقة 3 مع القيم"إنفينيتي".
- انتقل إلى جميع عناصر المصفوفة وقم بتحديث قيم الحد الأدنى 1 والدقيقة 2 والدقيقة 3 إذا كان العنصر الحالي أقل من القيمة الحالية لأحد متغيرات الحد الأدنى.
- بعد النجاح ، نحصل على ثلاثة متغيرات بأقل القيم.
يتيح لك هذا الأسلوب العثور على أصغر ثلاثة عناصر في مسار واحد عبر المصفوفة ، مما يسرع بشكل كبير من تنفيذ البرنامج مقارنة بفرز المصفوفة وأخذ العناصر الثلاثة الأولى.
- الخوارزمية لإيجاد أصغر ثلاثة عناصر
- تحديد المهمة
- الحل هو تمريرة واحدة من خلال مجموعة
- مثال على كيفية عمل الخوارزمية
- سؤال وجواب
- كيف يمكنني العثور على أصغر ثلاثة عناصر في مجموعة?
- ما هي الخوارزمية التي يجب أن أستخدمها للعثور على أصغر ثلاثة عناصر?
- هل هناك طريقة للعثور على أصغر ثلاثة عناصر في تمريرة واحدة من خلال مجموعة?
- كيف يمكنني العثور على أصغر ثلاثة أرقام في صفيف دون استخدام الفرز?
الخوارزمية لإيجاد أصغر ثلاثة عناصر
للعثور على أصغر ثلاثة عناصر في صفيف في مسار واحد ، يجب تنفيذ الخوارزمية التالية:
- تهيئة ثلاثة متغيرات (دقيقة 1 ، دقيقة 2 ، دقيقة 3) بقيم مضمونة لتكون أكبر من جميع العناصر في المصفوفة ، على سبيل المثال ، القيم القصوى لنوع بيانات المصفوفة.
- تذهب من خلال جميع عناصر المصفوفة ومقارنة كل عنصر مع القيم الحالية للمتغيرات دقيقة 1 ، دقيقة 2 و دقيقة 3.
- إذا كانت قيمة العنصر أقل من دقيقة 1 ، ثم إعادة تعيين دقيقة 3 = دقيقة 2 ، دقيقة 2 = دقيقة 1 ، دقيقة 1 = قيمة العنصر.
- إذا كانت قيمة العنصر أكبر من الحد الأدنى 1 وأقل من الحد الأدنى 2 ، فقم بإعادة تعيين الحد الأدنى 3 = الحد الأدنى 2 ، الحد الأدنى 2 = قيمة العنصر.
- إذا كانت قيمة العنصر أكبر من دقيقة 2 وأقل من دقيقة 3 ، ثم إعادة تعيين دقيقة 3 = قيمة العنصر.
- بعد الانتهاء من المرور عبر المصفوفة ، ستحتوي المتغيرات الدقيقة 1 والدقيقة 2 والدقيقة 3 على أصغر ثلاثة عناصر.
مثال على تنفيذ هذه الخوارزمية في جافا سكريبت:
وظيفة العثور علىثلاثثلاث (آر) {
اسمحوا دقيقة 1 = عدد.ماكس سافي;
اسمحوا دقيقة 2 = عدد.ماكس سافي;
دعونا دقيقة 3 = عدد.ماكس سافي;
for (let i = 0; i < arr.length; i++) {
if (arr[i] < min1) {
min3 = min2;
min2 = min1;
min1 = arr[i];
} else if (arr[i] > min1 && arr[i] < min2) {
min3 = min2;
min2 = arr[i];
} else if (arr[i] > min2 && arr[i] < min3) {
min3 = arr[i];
}
}
return [min1, min2, min3];
}
let numbers = [5, 2, 8, 1, 9, 3, 6];
let result = findThreeSmallest(numbers);
console.log(result); // [1, 2, 3]
В результате выполнения данного алгоритма для массива [5, 2, 8, 1, 9, 3, 6] будут найдены три наименьших элемента: 1, 2 и 3.
تحديد المهمة
المهمة هي العثور على أصغر ثلاثة عناصر في مجموعة معينة من الأرقام. لحل هذه المشكلة ، تحتاج إلى المرور عبر المصفوفة مرة واحدة فقط.
عند حل المشكلة ، من الضروري مراعاة الخيارات الممكنة عندما يكون هناك
- أقل من ثلاثة عناصر في المصفوفة;
- بالضبط ثلاثة عناصر;
- أكثر من ثلاثة عناصر.
وتجدر الإشارة أيضا إلى أن عناصر المصفوفة يمكن أن تحتوي على قيم موجبة وسالبة ، كما أن العناصر المكررة ممكنة أيضا.
نتيجة لذلك ، تحتاج إلى إرجاع أصغر ثلاثة عناصر ، مرتبة بترتيب تصاعدي.
الحل هو تمريرة واحدة من خلال مجموعة
للعثور على أصغر ثلاثة عناصر في صفيف في مسار واحد ، يمكنك استخدام الخوارزمية التالية:
- تهيئة ثلاثة متغيرات لتخزين أصغر ثلاثة عناصر.
- انتقل من خلال المصفوفة وفي كل تكرار قارن العنصر الحالي للمصفوفة بثلاثة متغيرات تخزن العناصر الثلاثة الأصغر.
- إذا كان العنصر الحالي أصغر من المتغير الأول ، فقم بتحديث جميع المتغيرات الثلاثة عن طريق تحويل القيم.
- إذا كان العنصر الحالي أكبر من المتغير الأول ولكنه أصغر من المتغير الثاني ، فقم بتحديث المتغيرين الثاني والثالث.
- إذا كان العنصر الحالي أكبر من المتغيرين الأول والثاني ، ولكنه أصغر من المتغير الثالث ، فقم بتحديث المتغير الثالث فقط.
- بعد المرور عبر المصفوفة بأكملها ، سيتم تخزين أصغر العناصر الموجودة في ثلاثة متغيرات.
ميزة هذا النهج هو أن المصفوفة يتم اجتيازها مرة واحدة فقط ، وبالتالي فإن وقت تنفيذ الخوارزمية هو ا(ن) ، أين ن هو طول المصفوفة.
مثال على تنفيذ هذه الخوارزمية في بايثون:
مواطنه العثور على_ثلاث_أصغر_العناصر(آر):
إذا لين (أر) < 3:
عودة " يجب أن تحتوي المصفوفة على ثلاثة عناصر على الأقل."
أصغر = آر [0]
ثاني أصغر = آر [1]
ثالث أصغر = آر [2]
لأني في النطاق (3 ، لين (آر)):
إذا أر [أنا] < أصغر:
ثالث أصغر = ثاني أصغر
الثاني_الأصغر = الأصغر
أصغر = آر [أنا]
إليف آر [أنا] < ثاني أصغر:
ثالث أصغر = ثاني أصغر
ثاني أصغر = أر [أنا]
إليف آر [أنا] < ثالث أصغر:
ثالث أصغر = آر [أنا]
العودة [أصغر ، ثاني أصغر ، ثالث أصغر]
Данная функция принимает массив целых чисел и возвращает список из трех наименьших элементов. إذا كان الصفيف يحتوي على أقل من ثلاثة عناصر ، تقوم الدالة بإرجاع رسالة الخطأ المقابلة.
مثال على كيفية عمل الخوارزمية
لنفترض أن لدينا مجموعة الأرقام التالية:
آر = [9, 5, 7, 2, 4, 1, 6, 8, 3]
نريد إيجاد أصغر ثلاثة عناصر من هذه المصفوفة.
تعمل الخوارزمية على النحو التالي:
- تهيئة ثلاثة متغيرات: الأول والثاني والثالث مع قيم اللانهاية.
- نذهب من خلال كل عنصر من عناصر المصفوفة.
- إذا كان العنصر الحالي أقل من قيمة المتغير الأول ، فإننا نقوم بتحديث قيم المتغيرات الأولى والثانية والثالثة ، على التوالي: الثالث = الثاني والثاني = الأول والأول = العنصر الحالي.
- إذا كان العنصر الحالي أكبر من قيمة المتغير الأول ، ولكنه أقل من قيمة المتغير الثاني ، فإننا نقوم بتحديث قيم المتغيرين الثاني والثالث ، مع تخصيص قيمة العنصر الحالي لهما.
- إذا كان العنصر الحالي أكبر من قيمة المتغير الثاني ، ولكنه أقل من قيمة المتغير الثالث ، فقم بتحديث قيمة المتغير الثالث وفقا لذلك.
بعد المرور عبر المصفوفة ، ستحتوي قيم المتغيرات الأولى والثانية والثالثة على أصغر ثلاثة عناصر.
في مثالنا ، بعد عمل الخوارزمية ، نحصل على قيم المتغيرات التالية:
أولا = 1
الثاني = 2
الثالث = 3
وبالتالي ، فإن أصغر ثلاثة عناصر من مجموعة أر هي 1 و 2 و 3.
سؤال وجواب
كيف يمكنني العثور على أصغر ثلاثة عناصر في مجموعة?
للعثور على أصغر ثلاثة عناصر في صفيف ، يمكنك استخدام خوارزمية" تمرير واحد". تتكون الخوارزمية من المرور عبر المصفوفة مرة واحدة ومقارنة العنصر الحالي بأصغر ثلاثة عناصر موجودة في كل تكرار. إذا كان العنصر الحالي أصغر من واحد منهم على الأقل ، فإنه يأخذ مكانه ، ويتم تحويل العناصر المتبقية وفقا لذلك. في نهاية الممر ، ستخزن ثلاثة متغيرات أصغر ثلاثة عناصر من المصفوفة.
ما هي الخوارزمية التي يجب أن أستخدمها للعثور على أصغر ثلاثة عناصر?
للعثور على أصغر ثلاثة عناصر في صفيف ، يمكنك استخدام خوارزمية" تمرير واحد". تتكون الخوارزمية من المرور عبر المصفوفة مرة واحدة ومقارنة العنصر الحالي بأصغر ثلاثة عناصر موجودة في كل تكرار. إذا كان العنصر الحالي أصغر من واحد منهم على الأقل ، فإنه يأخذ مكانه ، ويتم تحويل العناصر المتبقية وفقا لذلك. نتيجة للخوارزمية ، سيتم تخزين أصغر ثلاثة عناصر من المصفوفة في ثلاثة متغيرات.
هل هناك طريقة للعثور على أصغر ثلاثة عناصر في تمريرة واحدة من خلال مجموعة?
نعم ، هناك خوارزمية ذات مسار واحد تسمح لك بالعثور على أصغر ثلاثة عناصر في مسار واحد عبر المصفوفة. تتكون الخوارزمية من مقارنة العنصر الحالي بأصغر ثلاثة عناصر موجودة في كل تكرار للتمرير. إذا كان العنصر الحالي أصغر من واحد منهم على الأقل ، فإنه يأخذ مكانه ، ويتم تحويل العناصر المتبقية وفقا لذلك. نتيجة لمثل هذا التمرير ، سيتم تخزين أصغر ثلاثة عناصر من المصفوفة في ثلاثة متغيرات.
كيف يمكنني العثور على أصغر ثلاثة أرقام في صفيف دون استخدام الفرز?
للعثور على أصغر ثلاثة أرقام في صفيف دون استخدام الفرز ، يمكنك استخدام خوارزمية تمرير واحد. في بداية التمريرة ، يمكنك تهيئة ثلاثة متغيرات تخزن أصغر ثلاثة أرقام. ثم ، في كل تكرار للمرور ، قارن العنصر الحالي مع هذه المتغيرات. إذا كان العنصر الحالي أصغر من واحد منهم على الأقل ، فإنه يأخذ مكانه ، ويتم إزاحة الأرقام المتبقية وفقا لذلك. بعد نهاية الممر ، سيتم تخزين أصغر ثلاثة أرقام من المصفوفة في ثلاثة متغيرات.