ফিশার-ইয়েটস অ্যালগরিদম অ্যারে উপাদানগুলির একটি র্যান্ডম পারমুটেশন তৈরি করে অর্থাৎ এটি একটি অ্যারের সমস্ত উপাদানকে র্যান্ডমলি শাফল করে। ফিশার-ইয়েটস অ্যালগরিদম নिष্পক্ষ হওয়ার কারণে অ্যারের সমস্ত পারমুটেশন সমানভাবে সম্ভাব্য।
C++-তে ফিশার-ইয়েটস অ্যালগরিদম বাস্তবায়ন করে অ্যারে শাফলিং-এর একটি প্রোগ্রাম নিচে দেওয়া হলো:
উদাহরণ
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
int n;
cout << "Enter the array size: " << endl;
cin >> n;
int arr[n], arr1[n], index_arr[n];
int index;
cout << "Enter the array elements: " << endl;
for (int i = 0; i < n; i++)
cin >> arr[i];
for (int i = 0; i < n; i++)
index_arr[i] = 0;
for (int i = 0; i < n; i++) {
do {
index = rand() % n;
} while (index_arr[index] != 0);
index_arr[index] = 1;
arr1[i] = arr[index];
}
cout << "The shuffled array is: ";
for (int i = 0; i < n; i++)
cout << arr1[i] << " ";
return 0;
}
আউটপুট
Enter the array size: 10 Enter the array elements: 1 2 3 4 5 6 7 8 9 10 The shuffled array is: 4 7 8 6 3 10 2 1 9 5
উপরোক্ত প্রোগ্রামে, অ্যারের আকার এবং অ্যারেটি ব্যবহারকারী থেকে অনুরোধ করা হয়েছে। এটি নিচে দেওয়া হলো:
cout << "Enter the array size: " << endl;
cin >> n;
int arr[n], arr1[n], index_arr[n];
int index;
cout << "Enter the array elements: " << endl;
for (int i = 0; i < n; i++)
cin >> arr[i];
অ্যারেটি পাওয়ার পর, index_arr[] ০ দিয়ে ইনিশিয়ালাইজ করা হয়। তারপর rand() ফাংশন ব্যবহার করে arr[]-এর মানগুলি র্যান্ডমলি arr1[]-এ সংরক্ষণ করা হয়। এটি নিচের কোড স্নিপেটে প্রদর্শিত হয়েছে:
for (int i = 0; i < n; i++) {
do {
index = rand() % n;
} while (index_arr[index] != 0);
index_arr[index] = 1;
arr1[i] = arr[index];
}
শেষে শাফল করা অ্যারেটি প্রদর্শন করা হয়। এটি নিচে দেখা যাচ্ছে:
cout << "The shuffled array is: ";
for (int i = 0; i < n; i++)
cout << arr1[i] << " ";