কম্পিউটার টিউটোরিয়াল

সি++ প্রোগ্রাম: সর্টেড অ্যারেতে দেওয়া মান থেকে kটি নিকটতম উপাদান খুঁজে বের করা


একটি সর্টেড (sorted) অ্যারে A দেওয়া থাকলে, X এবং k মান দেওয়া থাকলে, X-এর নিকটতম k সংখ্যক উপাদান বের করতে হবে। X যদি অ্যারেতে থাকে, তবে আউটপুটে দেখানো হবে না। A = [12, 16, 22, 30, 35, 39, 42, 45, 48, 50, 53, 55, 56], X = 35, k = 4 হলে আউটপুট: 30, 39, 42, 45।

সমাধান: বাইনারি সার্চ (binary search) ব্যবহার করে ক্রসওভার পয়েন্ট (crossover point) বের করা। ক্রসওভার পয়েন্ট পাওয়া গেলে O(k) সময়ে k-নিকটতম উপাদান প্রিন্ট করা যায়।

উদাহরণ

#include<iostream> using namespace std; int getCrossoverPoint(int arr[], int left, int right, int x) {    if (arr[right] <= x)       return right;    if (arr[left] > x)       return left;       int mid = (left + right)/2;    if(arr[mid] <= x && arr[mid+1] > x)       return mid;    if(arr[mid] < x)       return getCrossoverPoint(arr, mid+1, right, x);       return getCrossoverPoint(arr, left, mid - 1, x); } void findKClosestNumbers(int arr[], int x, int k, int n) {    int l = getCrossoverPoint(arr, 0, n-1, x);    int r = l+1;    int count = 0;    if (arr[l] == x) l--;       while (l >= 0 && r < n && count < k) {          if (x - arr[l] < arr[r] - x)             cout << arr[l--] << " ";          else             cout << arr[r++] << " ";             count++;       }       while (count < k && l >= 0){          cout << arr[l--] << " ";          count++;       }       while (count < k && r < n){          cout << arr[r++] << " ";          count++;       } } int main() {    int arr[] ={12, 16, 22, 30, 35, 39, 42, 45, 48, 50, 53, 55, 56};    int n = sizeof(arr)/sizeof(arr[0]);    int x = 35, k = 5;    findKClosestNumbers(arr, x, k, n); }

আউটপুট

39 30 42 45 48

  1. সি++ প্রোগ্রাম: অ্যারেতে সর্বনিম্ন মানের ফ্রিকোয়েন্সি (Frequency) নির্ণয়

  2. সি++ প্রোগ্রাম: অ্যারেতে প্রতিটি উপাদানের জন্য সবচেয়ে নিকটবর্তী বড় মান (Closest Greater Value) খুঁজে বের করা

  3. সি++ প্রোগ্রাম: অ্যারেতে প্রতিটি উপাদানের জন্য সবচেয়ে নিকটবর্তী বড় মান (Closest Greater Value) খুঁজে বের করা

  4. C++-এ অ্যারে উপাদানগুলির ফ্যাক্টোরিয়ালের GCD বের করা