এই নিবন্ধে, আমরা স্বতন্ত্র উপাদান ধারণকারী একটি অ্যারে আছে. আমাদের একই পরম মান দিয়ে অ্যারেতে ধনাত্মক-নেতিবাচক মানের জোড়া প্রিন্ট করতে হবে এবং উদাহরণের জন্য সাজানো ক্রমে সেগুলি প্রিন্ট করতে হবে -
Input : arr[] = { 1, -1, 11, 12, 56, 77, -56, -12, -88} Output : -1 1 -12 12 -56 56 Input : arr[] = {30, 40, 50, 77, -51, -50, -40} Output : -40 40 -50 50
সমাধান খোঁজার পদ্ধতি
আমাদের মনে প্রথম যে পন্থাটি আসে তা হল ব্রুট ফোর্স অ্যাপ্রোচ, এবং আমরা আরেকটি তৈরি করি যাকে বলা হয় দক্ষ পন্থা। আমরা উভয় পন্থা নিয়ে আলোচনা করতে যাচ্ছি।
ব্রুট ফোর্স অ্যাপ্রোচ
এই পদ্ধতিতে, আমরা একটি সূচক হাতে নিয়ে অ্যারেটি অতিক্রম করব এবং একই পরম মান খুঁজে পাব কিন্তু একটি ভিন্ন সূচক।
উদাহরণ
#include<bits/stdc++.h> using namespace std; int main() { int arr[] = { 1, -1, 11, 12, 56, 77, -56, -12, -88 }; int n = sizeof(arr)/sizeof(int); // size of our array. vector<int> nums; // the present pairs. for(int i = 0; i < n; i++) { for(int j = i+1; j < n; j++) { if(abs(arr[j]) == abs(arr[i])) { // finding the pairs. nums.push_back(abs(arr[i])); break; // if we found the pair then we can just break as there are distinct elements in the array. } } } sort(nums.begin(), nums.end()); for(auto x : nums) // printing the pairs. cout << -x << " " << x << " "; }
আউটপুট
-1 1 -12 12 -56 56
এই পদ্ধতিতে, আমরা অ্যারে ট্র্যাভার্স করার জন্য দুটি লুপ ব্যবহার করি এবং এখন অন্য উপাদানটি খুঁজে বের করি; যদি আমরা অন্য উপাদানটি খুঁজে পাই, তাহলে কোডটি দ্রুত চালানোর জন্য আমরা ভিতরের লুপ থেকে বেরিয়ে আসি। এখন আমরা দুটি ফর-লুপ ব্যবহার করছি, আমাদের সামগ্রিক সময়ের জটিলতা হল O(N*N)। N হল একটি প্রদত্ত অ্যারের আকার যা নিম্ন সীমাবদ্ধতার জন্য ভাল কিন্তু উচ্চ সীমাবদ্ধতার জন্য ভাল নয়, তাই এখন আমরা অন্য পদ্ধতি নিয়ে আলোচনা করব৷
দক্ষ পদ্ধতি
এই পদ্ধতিতে, আমরা একটি হ্যাশম্যাপ ব্যবহার করব, যা আমাদের সময়ের জটিলতাকে উল্লেখযোগ্যভাবে হ্রাস করতে সাহায্য করবে৷
উদাহরণ
#include<bits/stdc++.h> using namespace std; int main() { int arr[] = { 4, 8, 9, -4, 1, -1, -8, -9 }; int n = sizeof(arr)/sizeof(int); // size of our array. map<int, int> found; // going to store the count of numbers found. vector<int> nums; // the present pairs. for(int i = 0; i < n; i++) found[abs(arr[i])]++; // increasing the frequency of abs(arr[i]). for(auto x : found) { // traversing the map. if(x.second == 2) // if any numbers frequency is two then push it to nums. nums.push_back(x.first); } for(auto x : nums) // printing the pairs. cout << -x << " " << x << " "; }
আউটপুট
-1 1 -4 4 -8 8 -9 9
উপরের কোডের ব্যাখ্যা
এই পদ্ধতিতে, আমরা একটি সংখ্যার ফ্রিকোয়েন্সি সংরক্ষণ করতে একটি হ্যাশম্যাপ ব্যবহার করছি; আমরা অ্যারের মধ্য দিয়ে যাওয়ার সময়, আমরা এখন বর্তমান উপাদানটির পরম মানের ফ্রিকোয়েন্সি আপডেট করছি কারণ আপনি জানেন যে সমস্ত জোড়ার মান দুটি হবে তাই আমরা মানচিত্রটি অতিক্রম করছি৷
যদি কোনো সংখ্যার ফ্রিকোয়েন্সি 2 হয়, তাহলে আমরা এটিকে সংখ্যায় সংরক্ষণ করছি, এবং অবশেষে, আমরা সাজানো ক্রমে মানগুলি প্রিন্ট করছি। (যেহেতু মানচিত্রে সংখ্যাটি সাজানো ক্রমে রয়েছে, তাই আমাদের সংখ্যা ভেক্টর সাজানোর দরকার নেই)।
উপসংহার
এই নিবন্ধে, আমরা হ্যাশিং টেকনিক ব্যবহার করে একটি অ্যারেতে ইতিবাচক নেতিবাচক মানগুলির জোড়া খুঁজে পেতে একটি সমস্যার সমাধান করি। আমরা এই সমস্যার জন্য C++ প্রোগ্রাম এবং সম্পূর্ণ পদ্ধতি ( স্বাভাবিক এবং দক্ষ) শিখেছি যার মাধ্যমে আমরা এই সমস্যার সমাধান করেছি। আমরা অন্যান্য ভাষা যেমন সি, জাভা, পাইথন এবং অন্যান্য ভাষায় একই প্রোগ্রাম লিখতে পারি। আমরা আশা করি আপনার এই নিবন্ধটি সহায়ক হবে৷