في كثير من الأحيان ، عند العمل مع المصفوفات ، يصبح من الضروري العثور على عدد العناصر التي تساوي قيمة معينة. يمكن أن تكون هذه المهمة مفيدة جدا عند تحليل البيانات أو عند البحث عن عناصر معينة في مصفوفة. في هذه المقالة ، سننظر في طرق لحل هذه المشكلة باستخدام لغة برمجة.
يمكن استخدام طرق مختلفة لحل هذه المشكلة. واحدة من أسهل الطرق هي التكرار من خلال جميع عناصر المصفوفة ومقارنتها بقيمة معينة. إذا كان عنصر الصفيف مساويا للقيمة المحددة ، فقم بزيادة العداد بمقدار 1. وبالتالي ، فإن عدد العناصر المساوية للقيمة المحددة سيكون قيمة العداد.
طريقة أكثر فعالية لحل هذه المشكلة هي استخدام الوظائف المضمنة في لغة البرمجة. على سبيل المثال ، في بايثون ، يمكنك استخدام وظيفة العد() للعثور على عدد العناصر التي تساوي قيمة معينة. تأخذ هذه الوظيفة قيمة كمدخل وتعيد عدد العناصر في المصفوفة المساوية لهذه القيمة. هذا النهج يوفر الوقت ويبسط رمز البرنامج.
- كيف يمكنني العثور على عدد من العناصر في صفيف يساوي قيمة معينة س?
- مشكلة إيجاد عدد العناصر في المصفوفة
- النهج 1: التكرار على العناصر مع العد
- النهج 2: استخدام وظيفة العد
- النهج 3: وظيفة العودية
- مقارنة فعالية النهج المختلفة
- 1. التكرار من خلال عناصر المصفوفة
- 2. باستخدام البحث الثنائي
- 3. باستخدام جدول التجزئة
- الاستنتاجات
- سؤال وجواب
- كيف يمكنني العثور على عدد من العناصر في صفيف يساوي قيمة معينة من س?
- كيف يمكنني العثور على عدد من العناصر في مجموعة التي تساوي سلسلة فارغة?
- كيف يمكنني العثور على عدد من العناصر في صفيف يساوي عدد 100?
- كيف أجد عدد العناصر في صفيف يساوي العنصر الذي ندخله من لوحة المفاتيح?
كيف يمكنني العثور على عدد من العناصر في صفيف يساوي قيمة معينة س?
المصفوفات هي هياكل بيانات ملائمة تسمح لك بتخزين ومعالجة عدد كبير من القيم. في بعض الأحيان يصبح من الضروري العثور على عدد العناصر في المصفوفة التي تساوي قيمة معينة من س. في هذه المقالة ، سننظر في عدة طرق لحل هذه المشكلة.
1. التكرار من خلال عناصر المصفوفة
واحدة من أسهل الطرق للعثور على عدد العناصر في صفيف يساوي قيمة معينة من س هو تكرار من خلال جميع عناصر الصفيف وزيادة العداد في كل مرة عنصر يساوي س.
مثال:
كثافة العمليات [] صفيف = {1, 2, 3, 2, 4, 2};
إنت س = 2;
عدد الباحث = 0;
ل (الباحث ط = 0; أنا < صفيف.الطول ؛ أنا {) {
إذا (صفيف [أنا] = = س) {
count++;
}
}
النظام.خارج.برينتلن ("عدد العناصر يساوي" + س +": "+ عدد);
في هذا المثال ، نقوم بإنشاء مصفوفة صفيف وتهيئة المتغير س بالقيمة 2. ثم نعلن عدد المتغير ، الذي سيخزن عدد العناصر يساوي س. في الحلقة ، نكرر من خلال جميع عناصر المصفوفة ونتحقق مما إذا كان العنصر الحالي يساوي س.إذا تم استيفاء الشرط ، فقم بزيادة العداد بمقدار 1.
2. باستخدام طرق فئة المصفوفات
توفر جافا فئة المصفوفات ، والتي تحدد طرقا مختلفة للعمل مع المصفوفات. إحداها هي طريقة الدفق () ، والتي توفر القدرة على إنشاء دفق من صفيف. ثم يمكننا استخدام طريقة التصفية() لتصفية عناصر المصفوفة وطريقة العد () لحساب عدد العناصر.
مثال:
استيراد جافا.أوتيل.صفائف;
كثافة العمليات [] صفيف = {1, 2, 3, 2, 4, 2};
إنت س = 2;
عدد طويل = صفائف.تيار (صفيف)
.تصفية (عنصر - > عنصر = = س)
.عدد();
النظام.خارج.برينتلن ("عدد العناصر يساوي" + س +": "+ عدد);
في هذا المثال ، نستخدم طريقة الدفق () لفئة المصفوفات لإنشاء دفق من صفيف. ثم نطبق طريقة المرشح () ، حيث نحدد الشرط الذي تساوي فيه العناصر س. أخيرا ، نسمي طريقة العد () لحساب العناصر التي تفي بالشرط.
3. باستخدام فئة المجموعات
جافا لديها أيضا فئة مجموعات ، والتي توفر أساليب مختلفة للعمل مع المجموعات ، بما في ذلك المصفوفات. تتيح لك إحدى طرق فئة المجموعات-التردد () - العثور على عدد العناصر في مجموعة مساوية لقيمة معينة.
مثال:
استيراد جافا.أوتيل.صفائف;
استيراد جافا.أوتيل.التحصيل;
عدد صحيح [] صفيف = {1, 2, 3, 2, 4, 2};
إنت س = 2;
عدد الباحث = مجموعات.التردد (المصفوفات.أسليست (صفيف) ، س);
النظام.خارج.برينتلن ("عدد العناصر يساوي" + س +": "+ عدد);
في هذا المثال ، نقوم بإنشاء مصفوفة صفيف وتهيئة المتغير س بالقيمة 2. ثم نقوم بتحويل المصفوفة إلى قائمة باستخدام طريقة أسليست () لفئة المصفوفات واستدعاء طريقة التردد () لفئة المجموعات ، مع تحديد القائمة وقيمة س. طريقة التردد () ترجع عدد العناصر يساوي س.
بغض النظر عن الطريقة المختارة ، ستكون النتيجة هي نفسها — عدد العناصر في المصفوفة يساوي قيمة س. يعتمد اختيار الطريقة على تفضيلاتك ومتطلبات الأداء.
مشكلة إيجاد عدد العناصر في المصفوفة
تتمثل إحدى المهام الشائعة المرتبطة بالعمل مع المصفوفات في العثور على عدد العناصر في صفيف يساوي قيمة معينة. تحدث هذه المشكلة غالبا في البرمجة ويمكن حلها باستخدام خوارزميات مختلفة.
حل المشكلة هو التكرار من خلال جميع عناصر المصفوفة وحساب عدد العناصر المساوية للقيمة المحددة. هذه الخوارزمية لها تعقيد ا (ن) ، أين ن هو عدد العناصر في المصفوفة.
ومع ذلك ، قد يكون الحل الأكثر فعالية هو استخدام الوظائف المضمنة في لغة البرمجة. على سبيل المثال ، في لغة جافا ، يمكنك استخدام المصفوفات.تيار (آر) الأسلوب.تصفية (س - > س = = قيمة).عد () لحساب عدد العناصر في الصفيف يساوي القيمة المحددة. هذه الطريقة لها تعقيد ا (ن) وهو أكثر إحكاما من التكرار من خلال جميع العناصر.
قد تكون هناك طريقة أخرى لحل المشكلة وهي استخدام خوارزمية بحث ثنائية. يتضمن الفرز المسبق للمصفوفة ثم البحث عن القيمة باستخدام تقسيم المصفوفة إلى جزأين. البحث الثنائي له تعقيد ا (سجل ن) ، أين ن هو عدد العناصر في المصفوفة ، وقد يكون أكثر كفاءة في حالة المصفوفات الكبيرة.
للتلخيص ، يمكننا القول أن العثور على عدد العناصر في صفيف يساوي قيمة معينة هو مهمة شائعة في البرمجة. يمكن تنفيذ حلها بطرق مختلفة ، بما في ذلك التكرار من خلال العناصر ، باستخدام وظائف مدمجة أو خوارزميات البحث. يعتمد اختيار نهج معين على تفاصيل المهمة ومتطلبات الأداء.
النهج 1: التكرار على العناصر مع العد
النهج الأول هو التكرار من خلال جميع عناصر المصفوفة وحساب عدد العناصر المساوية لقيمة معينة من س. للقيام بذلك ، يمكنك استخدام حلقة من شأنها أن تذهب من خلال كل عنصر من عناصر مجموعة وتحقق ما إذا كان يساوي قيمة س.
مثال على تنفيذ هذا النهج في جافا سكريبت:
عدد الدالةالعناصر (صفيف ، س) {
دعونا العد = 0;
إلى عن على (دعني = 0; أنا < صفيف.الطول ؛ أنا {) {
إذا (صفيف [أنا] = = = س) {
count++;
}
}
عد العودة;
}
دعونا مجموعة = [1, 2, 3, 4, 5, 4, 3, 2, 1];
السماح س = 4;
دع النتيجة = العدالعناصر (صفيف ، س);
وحدة التحكم.سجل (نتيجة) ؛ / / النواتج 2
في هذا المثال ، تأخذ وظيفة الكونتليمنتس معلمتين: صفيف الصفيف والقيمة س التي يمكن العثور عليها. بعد ذلك ، داخل الدالة ، نقوم بتهيئة متغير العد لتخزين عدد العناصر التي تساوي س.
بعد ذلك ، باستخدام حلقة الفهرس الأول ، نمر عبر كل عنصر من عناصر المصفوفة. داخل الحلقة ، نتحقق مما إذا كان العنصر الحالي يساوي قيمة س. إذا كان متساويا ، فقم بزيادة عداد العد بمقدار 1.
بعد الانتهاء من الحلقة ، نعود نتيجة العد العد. في المثال ، نقوم بإخراج النتيجة إلى وحدة التحكم ، ولكن يمكنك استخدامها كما يحلو لك.
وبالتالي ، يتيح لك هذا الأسلوب العثور على عدد العناصر المساوية لقيمة معينة من س في المصفوفة عن طريق التكرار من خلال جميع العناصر وحساب القيم الضرورية.
النهج 2: استخدام وظيفة العد
طريقة أخرى للعثور على عدد العناصر في صفيف يساوي قيمة معينة من س هو استخدام وظيفة العد. تتيح لك هذه الوظيفة حساب عدد مرات حدوث عنصر معين في المصفوفة.
مثال على استخدام وظيفة العد:
ar آر = صفيف(1, 2, 3, 4, 2, 3, 2);
x س = 2;
count العد = العد (ar آر ، x س);
صدى "عدد العناصر في المصفوفة يساوي x س: count العد";
نتيجة لتنفيذ هذا الرمز ، سيكون الإخراج:
عدد العناصر في المصفوفة ، يساوي 2: 3
في هذا المثال ، تقوم دالة العد بإرجاع عدد العناصر في المصفوفة يساوي القيمة المحددة 2. ستكون النتيجة الرقم 3 ، نظرا لوجود 3 عناصر في صفيف ar آر بالقيمة 2.
تقوم دالة العد بإرجاع قيمة عدد صحيح.
هذا النهج مناسب لأنه لا يتطلب كتابة رمز إضافي لحساب العناصر في المصفوفة. ومع ذلك ، تجدر الإشارة إلى أن وظيفة العد تؤدي اجتياز كامل للمصفوفة ، والتي يمكن أن تبطئ البرنامج على المصفوفات الكبيرة.
النهج 3: وظيفة العودية
تتمثل الطريقة العودية لحل المشكلة في استخدام وظيفة تستدعي نفسها لمعالجة كل عنصر من عناصر المصفوفة.
تبدو خوارزمية الدالة العودية لحساب عدد العناصر المساوية لقيمة معينة من س كما يلي:
- نتحقق مما إذا كان العنصر الحالي في المصفوفة يساوي قيمة س.
- إذا كانت الإجابة بنعم ، فقم بزيادة العداد بمقدار واحد.
- استدعاء الدالة بشكل متكرر للجزء المتبقي من المصفوفة.
- نلخص النتائج لكل استدعاء دالة ونعيد النتيجة النهائية.
مثال على تنفيذ وظيفة متكررة في جافا سكريبت:
وظيفة كونتليمنتس (آر ، س) {
إذا (آر.الطول = = = 0) {
العودة 0;
} آخر {
إذا (آر [0] = = = س) {
عودة 1 + العدعناصر (آر.شريحة (1) ، س);
} آخر {
عودة العدعناصر (آر.شريحة (1) ، س);
}
}
}
تأخذ هذه الوظيفة وسيطتين: مجموعة من العناصر وقيمة س. في بداية كل استدعاء دالة ، يتم فحص صفيف فارغ. إذا كانت المصفوفة فارغة ، تقوم الدالة بإرجاع صفر. خلاف ذلك ، تتحقق الوظيفة مما إذا كان العنصر الحالي للمصفوفة يساوي قيمة س. إذا كانت الإجابة بنعم ، يتم زيادة العداد بمقدار واحد ويتم استدعاء الوظيفة بشكل متكرر للجزء المتبقي من المصفوفة. إذا كان العنصر الحالي لا يساوي س ، وتسمى وظيفة أيضا بشكل متكرر للجزء المتبقي من مجموعة ، ولكن من دون زيادة العداد.
يوفر هذا النهج إحصاء دقيقا لعدد العناصر المساوية لقيمة معينة من س في المصفوفة. ومع ذلك ، قد تكون الوظائف العودية أقل كفاءة مقارنة بالطرق الأخرى ، خاصة بالنسبة للمصفوفات الكبيرة ، نظرا للعدد الكبير من استدعاءات الوظائف.
مقارنة فعالية النهج المختلفة
عند البحث عن عدد العناصر في صفيف يساوي قيمة معينة من س ، يمكن استخدام طرق مختلفة. دعونا ننظر إلى عدد قليل منهم ومقارنة فعاليتها.
1. التكرار من خلال عناصر المصفوفة
أسهل طريقة للعثور على عدد من العناصر يساوي س هو ببساطة تكرار من خلال جميع عناصر مجموعة وعد المباريات. يتم تنفيذ هذا النهج باستخدام حلقة:
عدد الباحث = 0;
ل (الباحث ط = 0; أنا < صفيف.الطول ؛ أنا {) {
إذا (صفيف [أنا] = = س) {
count++;
}
}
هذا النهج سهل التنفيذ ، لكن كفاءته قد تكون منخفضة ، خاصة مع حجم صفيف كبير. في أسوأ الحالات ، عندما تكون جميع عناصر المصفوفة مساوية لـ س ، هذا النهج له تعقيد خطي ا (ن) ، أين ن هو حجم المصفوفة.
2. باستخدام البحث الثنائي
إذا تم فرز المصفوفة ، يمكنك استخدام البحث الثنائي للبحث بشكل أكثر كفاءة. يجد البحث الثنائي أولا منتصف المصفوفة ، ثم يقارن قيمة العنصر الأوسط مع س. إذا كانت متساوية ، يزيد العد بمقدار 1. إذا كانت القيمة أقل من س ، يستمر البحث على الجانب الأيمن من الصفيف ، إذا كان أكبر ، على اليسار. Этот подход требует отсортированного массива и реализуется с использованием рекурсии или цикла.
عدد الباحث = 0;
الباحث اليسار = 0;
الباحث اليمين = صفيف.طول-1;
بينما (يسار <= يمين) {
كثافة العمليات منتصف = (يسار + يمين) / 2;
إذا (صفيف [منتصف] = = س) {
count++;
استراحة;
}
آخر إذا (صفيف [منتصف] > س) {
يمين = منتصف 1;
}
آخر {
اليسار = منتصف + 1;
}
}
البحث الثنائي لديه تعقيد لوغاريتمي س (سجل ن) ، مما يجعلها أكثر كفاءة للمصفوفات الكبيرة.
3. باستخدام جدول التجزئة
لتسريع البحث عن العناصر ، يمكنك استخدام جدول التجزئة. Хеш-таблица позволяет выполнять доступ к элементам за константное время, если хеш-функция хорошо распределяет значения по ячейкам таблицы.
Map hashMap = new HashMap();
for (int i = 0; i < array.length; i++) {
if (hashMap.containsKey(array[i])) {
int count = hashMap.get(array[i]);
hashMap.put(array[i], count + 1);
} else {
hashMap.put(array[i], 1);
}
}
int count = hashMap.getOrDefault(x, 0);
يوفر استخدام جدول التجزئة وقت تنفيذ ثابتا للعمليات ، مما يجعله أحد أكثر الأساليب فعالية. ومع ذلك ، هناك حاجة إلى ذاكرة إضافية لتخزين جدول التجزئة ، والتي يمكن أن تكون مشكلة مع حجم صفيف كبير.
الاستنتاجات
الأساليب المختلفة لها كفاءات مختلفة اعتمادا على حجم المصفوفة وخصائصها. باستخدام تكرار بسيط للعناصر ، يمكن تنفيذ الوظائف بسهولة ، ولكن من أجل البساطة ، قد يستغرق الأمر وقتا أطول لمعالجة المصفوفات الكبيرة. يسمح لك البحث الثنائي بتسريع البحث في المصفوفات المصنفة ، ولكنه يتطلب الفرز المسبق ويمكن أن يكون أكثر صعوبة في التنفيذ. يوفر استخدام جدول التجزئة وصولا سريعا جدا إلى العناصر ، ولكنه يتطلب ذاكرة إضافية لتخزين الجدول. عند اختيار نهج ، يجب أن تأخذ في الاعتبار تفاصيل مهمة محددة ومتطلباتها من الكفاءة والموارد المستخدمة.
سؤال وجواب
كيف يمكنني العثور على عدد من العناصر في صفيف يساوي قيمة معينة من س?
للعثور على عدد العناصر في صفيف يساوي قيمة معينة من س ، استخدم حلقة تتكرر من خلال جميع عناصر الصفيف. داخل الحلقة ، قارنا كل عنصر مع قيمة س معينة وزيادة العداد إذا تطابق العناصر. في نهاية الحلقة ، ستكون قيمة العداد هي عدد العناصر في المصفوفة التي تساوي س.
كيف يمكنني العثور على عدد من العناصر في مجموعة التي تساوي سلسلة فارغة?
للعثور على عدد العناصر في صفيف يساوي سلسلة فارغة ، يمكننا استخدام نفس الأسلوب المستخدم في البحث عن قيم أخرى. نستخدم حلقة تتكرر من خلال جميع عناصر المصفوفة ، وداخل الحلقة نقارن كل عنصر بسلسلة فارغة. إذا كان العنصر يساوي سلسلة فارغة ، فإننا نزيد العداد. في نهاية الحلقة ، ستكون قيمة العداد هي عدد العناصر في المصفوفة التي تساوي سلسلة فارغة.
كيف يمكنني العثور على عدد من العناصر في صفيف يساوي عدد 100?
لإيجاد عدد العناصر في صفيف يساوي الرقم 100 ، يمكننا استخدام طريقة مماثلة للبحث عن قيم أخرى. تعتمد هذه الطريقة على حلقة تتكرر عبر جميع عناصر المصفوفة. داخل الحلقة ، نقارن كل عنصر بالرقم 100 ونزيد العداد إذا كان العنصر 100. نتيجة لذلك ، ستمثل قيمة العداد عدد العناصر في المصفوفة التي تساوي الرقم 100.
كيف أجد عدد العناصر في صفيف يساوي العنصر الذي ندخله من لوحة المفاتيح?
للعثور على عدد العناصر في المصفوفة المساوية للعنصر الذي تم إدخاله من لوحة المفاتيح ، سنحتاج إلى استخدام مشغل إدخال بيانات لوحة المفاتيح. نقرأ القيمة من لوحة المفاتيح ونحفظها في متغير. بعد ذلك ، باستخدام حلقة ، نكرر جميع عناصر المصفوفة ونقارن كل عنصر بالقيمة المعطاة. إذا كان العنصر يساوي القيمة المدخلة ، فإننا نزيد العداد. في نهاية الحلقة ، ستكون قيمة العداد مساوية لعدد العناصر في المصفوفة المساوية للقيمة المدخلة.