মডিউল ১১-৫ঃ কাউন্টিং এরে অর ফ্রিকুয়েন্সি এরে
আমাদের যদি একটি এরেতে জিরো কতবার আছে, ওয়ান কতবার আছে, টু কতবার করে আছে তা কাউন্ট করতে হয় তাহলে আমরা নরমালি এভাবে চিন্তা করতে পারিঃ
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]); // এরে ইনপুট নেওয়া হচ্ছে।
}
int zero=0,one=0,two=0; // জিরো, ওয়ান, টু কাউন্ট করার জন্য তিনটি ভেরিয়েবল নেওয়া হয়েছে।
for(int i=0;i<n;i++) // লুপ চালিয়ে সম্পূর্ণ এরে ট্রাভারস করা হচ্ছে।
{
if(a[i]==0) // চেক করা হচ্ছে এরের এলিমেন্টটি জিরো কিনা।
zero++; // যদি জিরো হয় তাহলে জিরো ভেরিয়েবল এর মান ১ বাড়িয়ে দেওয়া হচ্ছে।
if(a[i]==1) // চেক করা হচ্ছে এরের এলিমেন্টটি ওয়ান কিনা।
one++; // যদি ওয়ান হয় তাহলে ওয়ান ভেরিয়েবল এর মান ১ বাড়িয়ে দেওয়া হচ্ছে।
if(a[i]==2) // চেক করা হচ্ছে এরের এলিমেন্টটি টু কিনা।
two++; // যদি টু হয় তাহলে টু ভেরিয়েবল এর মান ১ বাড়িয়ে দেওয়া হচ্ছে।
}
printf("O -> %d\n",zero); // প্রিন্ট করা হচ্ছে 0,1,2 কতবার করে আছে।
printf("1 -> %d\n",one);
printf("2 -> %d\n",two);
return 0;
}এভাবে করে আমরা করে ফেলত পারি। কিন্তু আমাদের যদি এরেতে সবগুলো এলিমেন্ট কোনটি কতবার করে আছে তা বের করতে হয় তখন কিন্তু আমরা এভাবে করতে পারব না। একটু আগে আমরা যখন 0,1,2 তিনটি সংখ্যা কতবার আছে তা কাউন্ট করতে গিয়েছি তখন আমাদের তিনটি ভেরিয়েবল নিতে হয়েছে এবং তিনবার কন্ডিশন দিয়ে চেক করতে হয়েছে। এখন যদি আমাদের এরেতে ১০০০টি সংখ্যা থাকে এবং আমাদের সবগুলো কতবার করে আছে তা বের করতে হয় তাহলে নিশ্চয়ই আমরা ১০০০টি ভেরিয়েবল এবং ১০০০ বার কন্ডিশন দিয়ে করব না।
এক্ষেত্রে আমরা যেই পদ্ধতিটি ইউজ করতে পারি তা হচ্ছে কাউন্টিং এরে অথবা ফ্রিকুয়েন্সি এরে। যেহেতু এখানে আমাদের অনেকগুলো ভেরিয়েবল নিতে হচ্ছে আর আমরা জানি অনেকগুলো ভেরিয়েবল আমরা একবারে নিয়ে নিতে পারি একটি এরের সাহায্যে। তারপর সেই এরের ০ নম্বর ইন্ডেক্সকে রেখে দিতে পারি ০ কতবার আছে তা কাউন্ট করার জন্য, ১ নম্বর ইন্ডেক্সকে রেখে দিতে পারি ১ কতবার আছে তা কাউন্ট করার জন্য, ২ নম্বর ইন্ডেক্সকে রেখে দিতে পারি ২ কতবার আছে তা কাউন্ট করার জন্য। এভাবে করে আমরা সবগুলো সংখ্যাই কাউন্ট করে ফেলতে পারব। অর্থাৎ যেখানে আমরা ০ পেলে zero++ করতাম, এখন আমরা cnt[0]++ করব।
Last updated