প্যারালেল অ্যারেকে স্ট্রাকচার অ্যারেও বলা হয়।
সংজ্ঞা
প্যারালেল অ্যারে হলো একাধিক অ্যারে যেগুলোর i-তম উপাদানগুলো পারস্পরিকভাবে সম্পর্কিত এবং মিলে একটি এন্টিটি গঠন করে। অ্যারে C++-এ একটি মৌলিক ফিচার। প্যারালেল অ্যারে তৈরি করলে দুটি বা অধিক অ্যারে তুলনা করা সহজ হয়।
উদাহরণ
first_name = ['John', 'Dexter', 'Fredd', 'Hank', 'james'] last_name = ['Jocab', 'Jonas', 'smith', 'lee', 'banner'] height = [160, 148, 231, 153, 162]
প্যারালেল অ্যারে তৈরির পদ্ধতি
সার্চিং এবং সর্টিং প্যারালেল অ্যারে তৈরির মূল ফিচার।
সার্চিং
নির্দিষ্ট ভ্যালু অনুযায়ী সার্চ করা হয়। যেমন: উচ্চতা ১৮০ সেমির কম এমন বোক্তির ঠিকানা খুঁজুন। তাহলে height আরে-তে ১৮০-র কম ভ্যালু সার্চ করুন, সূচক পাওয়া গেলে অন্যান্য আরেতেও সেটি প্রিন্ট করুন।
সার্চিং-এর ধাপসমূহ:
- প্রাসঙ্গিক আরে-তে প্রয়োজনীয় ভ্যালু সার্চ করুন
- ভ্যালু পাওয়া যেসব সূচকে, সেগুলো স্টোর করুন
- সূচকগুলো দিয়ে সব আরে থেকে মান প্রিন্ট করুন
সর্টিং
সর্টিং-এ সব আরে-কে একই সূচক ও ভ্যালু অনুযায়ী সর্ট করা হয়। যেমন: height আরে ascending order-এ সর্ট করতে হলে, দুটি height স왑 করার সময় অন্যান্য আরেও একই সূচকের মানগুলো স왪 করতে হয়।
সর্টিং-এর ধাপসমূহ:
- আরে-তে সূচক খুঁজুন
- গণনা করা দুটি সূচকের মান সব আরে-তে স왪 করুন
বাস্তবায়ন
নিচের কোডে নাম, আভিধানিক নাম ও উচ্চতা স্টোর করা হয়েছে। কুইকসর্ট দিয়ে সর্ট করা হয়েছে এবং বাইনারি সার্চ দিয়ে ১৫৮ সেমি উচ্চতায় বিছানা ढूंढা হয়েছে।
উদাহরণ
#include <iostream>
using namespace std;
int partition(string first_name[], string last_name[], int height[], int low, int high) {
int pivot = height[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (height[j] <= pivot) {
i++;
swap(first_name[i], first_name[j]);
swap(last_name[i], last_name[j]);
swap(height[i], height[j]);
}
}
swap(first_name[i + 1], first_name[high]);
swap(last_name[i + 1], last_name[high]);
swap(height[i + 1], height[high]);
return (i + 1);
}
void quickSort(string first_name[], string last_name[], int height[], int low, int high) {
if (low < high) {
int pi = partition(first_name, last_name, height, low, high);
quickSort(first_name, last_name, height, low, pi - 1);
quickSort(first_name, last_name, height, pi + 1, high);
}
}
void binarySearch(string first_name[], string last_name[], int height[], int value, int n) {
int low = 0, high = n - 1;
while (low <= high) {
int index = (high + low) / 2;
if (height[index] == 158) {
cout << "Person having height 158 cms is " << first_name[index] << " " << last_name[index] << endl;
return;
} else if (height[index] > 158)
high = index - 1;
else
low = index + 1;
}
cout << "Sorry, no such person with height 158 cms is found in the record";
}
void printParallelArray(string first_name[], string last_name[], int height[], int n) {
cout << "Name of people in increasing order of their height: " << endl;
for (int i = 0; i < n; i++) {
cout << first_name[i] << " " << last_name[i] << " has height " << height[i] << " cms\n";
}
cout << endl;
}
int main() {
int n = 5;
string first_name[] = {"John", "Dexter", "Fredd", "Hank", "james"};
string last_name[] = {"Jocab", "Jonas", "smith", "lee", "banner"};
int height[] = {160, 148, 231, 153, 162};
quickSort(first_name, last_name, height, 0, n - 1);
printParallelArray(first_name, last_name, height, n);
cout << "Name of the second tallest person is " << first_name[n - 2] << " " << last_name[n - 2] << endl;
cout << "Name of the third shortest person is " << first_name[2] << " " << last_name[2] << endl;
binarySearch(first_name, last_name, height, 158, n);
return 0;
}
আউটপুট
Name of people in increasing order of their height: Dexter Jonas has height 148 cms Hank lee has height 153 cms John Jocab has height 160 cms Fredd smith has height 231 cms Name of the second tallest person is John Jocab Name of the third shortest person is John Jocab Sorry, no such person with height 158 cms is found in the record
প্যারালেল অ্যারের সুবিধা
- এলাইনমেন্ট সমস্যা এড়িয়ে স্পেস বাঁচায়
- স্মল আরে-তে ইন্ডেক্স পয়েন্টারের চেয়ে কম স্পেস নেয়
- সিকোয়েনশিয়াল এক্সেস দ্রুত হয় ক্যাশ বিয়বহারের কারণে
প্যারালেল অ্যারের অসুবিধা
- নন-সিকোয়েনশিয়াল এক্সেসে লোকালিটি অফ রেফারেন্স খারাপ
- রেকর্ডের ফিল্ডগুলোর সম্পর্ক অস্পষ্ট থাকে
- ভাষা szint-এ কোনো সরাসরি সাপোর্ট নেই
- ফাংশনে পাস করা কষ্টসाध्य ও এরর-প্রোন
- এক্সপ্যান্ড/কন্ট্রাক্ট করা খরচবহুল
উপসংহার
এই টিউটোরিয়ালে প্যারালেল অ্যারে তৈরির পদ্ধতি, সর্টিং, সার্চিং এবং সুবিধা-অসুবিধা আলোচনা করা হয়েছে।