কম্পিউটার

C++ ব্যবহার করে একটি অ্যারের সমস্ত উপাদানের র‍্যাঙ্ক


প্রদত্ত সমস্যাটিতে, আমাদের একটি অ্যারের সমস্ত প্রদত্ত উপাদানগুলিকে র‌্যাঙ্ক করতে হবে, যার মধ্যে সবচেয়ে ছোট সংখ্যাটির সবচেয়ে ছোট র‌্যাঙ্ক রয়েছে এবং সবচেয়ে বড়টির সবচেয়ে বড় র‌্যাঙ্ক রয়েছে। আমাদের একটি সংখ্যার রেঙ্কগুলি তাদের ফ্রিকোয়েন্সির উপর নির্ভর করে পরিবর্তন করতে হবে, উদাহরণের জন্য −

Input : 20 30 10
Output : 2.0 3.0 1.0

Input : 10 12 15 12 10 25 12
Output : 1.5, 4.0, 6.0, 4.0, 1.5, 7.0, 4.0

Here the rank of 10 is 1.5 because there are two 10s present in the given array now if we assume they both take different ranks i.e. 1 and 2 and we thus divide it within themselves so their rank becomes 1.5 and 1.5.

Input : 1, 2, 5, 2, 1, 60, 3
Output : 1.5, 3.5, 6.0, 3.5, 1.5, 7.0, 5.0

সমাধান খোঁজার পদ্ধতি

সমাধান খুঁজতে দুটি ভিন্ন পন্থা আছে, এবং সেগুলো হল −

ব্রুট ফোর্স অ্যাপ্রোচ

এই পদ্ধতিতে, আমরা লুপ করব, কোনো বিশেষ উপাদান নির্বাচন করব এবং এর র‍্যাঙ্ক নির্ধারণ করব।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;

int main() {
   int arr[] = {1, 2, 5, 2, 1, 25, 2}; // given array
   int n = sizeof(arr) / sizeof(arr[0]); // size of our given array

   float rank[n] = {0}; // our ranking array
   for (int i = 0; i < n; i++) {
      int r = 1; // the number of elements greater than arr[i]
      int s = 1; // the number of elements equal to arr[i]

      for (int j = 0; j < n; j++) {
         if (j != i && arr[j] < arr[i])
            r += 1;
   
         if (j != i && arr[j] == arr[i])
            s += 1;
      }
      rank[i] = r + (float)(s - 1) / (float) 2; // using formula
      //to obtain rank of particular element

   }

   for (int i = 0; i < n; i++) // outputting the ranks
      cout << rank[i] << ' ';

   return 0;
}

আউটপুট

1.5 4 6 4 1.5 7 4

এই প্রোগ্রামটিতে O(N*N) এর সময় জটিলতা রয়েছে যেখানে N এখন একটি প্রদত্ত অ্যারের আকার; আপনি দেখতে পাচ্ছেন, আমাদের সময় জটিলতা ভাল নয়, তাই আমরা উচ্চ সীমাবদ্ধতার জন্য ভালভাবে কাজ করার জন্য এর দক্ষতা বাড়াব।

দক্ষ পদ্ধতি

এই পদ্ধতিতে, আমরা একটি নতুন অ্যারে নিতে যাচ্ছি এবং এখন এটিকে সাজাতে যাচ্ছি যেমন অ্যারেটি সাজানো হয়েছে এখন আমরা জানি যে একই র্যাঙ্কের সমস্ত উপাদান একসাথে থাকবে, তাই এখন আমরা তাদের যথারীতি র‌্যাঙ্ক করি এবং তারপর একটি র্যাঙ্ক গণনা করি। বিশেষ উপাদান।

উদাহরণ

#include <bits/stdc++.h>

using namespace std;

int main() {
   int arr[] = {1, 2, 5, 2, 1, 60, 3}; // given array
   int n = sizeof(arr) / sizeof(arr[0]); // size of our given array
   float rank[n] = {0}; // our ranking array
   int old[n];
   for(int i = 0; i < n; i++)
   old[i] = arr[i];
   sort(arr, arr+n); // sorting the array
   int prev = arr[0];
   int r = 1; // ranks
   int s = 0; // frequency
   int tot = 0; // will stack up all the rank contained by an element
   map<int, float> rrank;

   for (int i = 0; i < n; i++) {
      if(prev == arr[i]) {
         s++;
         tot += r;
      } else {
         float now = 0;
         now = (float)tot/s; // dividing the ranks equally
         rrank[prev] = now;
         prev = arr[i];
         tot = r;
         s = 1;
      }
      r++;
   }
   rrank[arr[n-1]] = (float)tot/s;
   for (int i = 0; i < n; i++) // outputting the ranks
      cout << rrank[old[i]] << " ";

   return 0;
}

আউটপুট

1.5 3.5 6 3.5 1.5 7 5

উপরের কোডের ব্যাখ্যা

এই পদ্ধতিতে, আমরা আমাদের অ্যারে সাজান, এবং তারপর আমরা প্রতিটি উপাদানকে শুরু থেকে র‌্যাঙ্ক করি (র্যাঙ্ক 1 থেকে শুরু করে)। এখন, যদি আমাদের পূর্ববর্তী উপাদান আমাদের বর্তমান উপাদানের সমান হয়, তাহলে আমরা s বৃদ্ধি করি এবং আমাদের র্যাঙ্কের যোগফল পর্যন্ত স্ট্যাক করি। যখন আমাদের উপাদানগুলি পরিবর্তন করা হয়, আমরা পূর্ববর্তী উপাদানগুলির মধ্যে র‍্যাঙ্কগুলিকে ভাগ করি, s এবং মোট রিফ্রেশ করি এবং আমাদের কোডটি চালিয়ে যাই৷

উপসংহার

এই নিবন্ধে, আমরা একটি অ্যারের সমস্ত উপাদানের র্যাঙ্ক খুঁজে পেতে একটি সমস্যার সমাধান করি। আমরা এই সমস্যার জন্য C++ প্রোগ্রাম এবং সম্পূর্ণ পদ্ধতি ( স্বাভাবিক এবং দক্ষ) শিখেছি যার মাধ্যমে আমরা এই সমস্যার সমাধান করেছি। আমরা অন্যান্য ভাষায় যেমন সি, জাভা, পাইথন এবং অন্যান্য ভাষায় একই প্রোগ্রাম লিখতে পারি।


  1. C++ এ STL ব্যবহার করে একটি অ্যারের সমস্ত বিপরীত ক্রমাগত?

  2. একটি অ্যারের (C++) মধ্যে সব জোড়া জোড়া ধারাবাহিক উপাদানের পরম পার্থক্য?

  3. হিপ সর্ট অ্যালগরিদম ব্যবহার করে 10টি উপাদানের একটি অ্যারে সাজানোর জন্য C++ প্রোগ্রাম

  4. পয়েন্টার ব্যবহার করে একটি অ্যারের উপাদান অ্যাক্সেস করার জন্য C++ প্রোগ্রাম