মনে করুন আমাদের একটি অ্যারে আছে যা গাণিতিক অনুক্রমের উপাদানগুলো ক্রমানুসারে উপস্থাপন করে। একটি উপাদান অনুপস্থিত। আমাদের অনুপস্থিত উপাদানটি বের করতে হবে। তাই যদি arr = [2, 4, 8, 10, 12, 14], আউটপুট হবে 6, কারণ 6 অনুপস্থিত।
বাইনারি সার্চ ব্যবহার করে এই সমস্যাটি সমাধান করা যায়। আমরা মধ্যবর্তী উপাদানে যাব, তারপর চেক করব মধ্যবর্তী এবং তার পরবর্তী উপাদানের পার্থক্য সাধারণ পার্থক্যের সমান কিনা। যদি না হয়, তবে অনুপস্থিত উপাদান mid এবং mid+1 ইনডেক্সের মাঝপথে আছে। যদি মধ্যবর্তী উপাদান AP-এ n/2তম উপাদান হয়, তবে অনুপস্থিত উপাদান ডান পাশে আছে, অন্যথায় বাম পাশে।
উদাহরণ
#include <iostream>
using namespace std;
class Progression {
public:
int missingUtil(int arr[], int left, int right, int diff) {
if (right <= left)
return INT_MAX;
int mid = left + (right - left) / 2;
if (arr[mid + 1] - arr[mid] != diff)
return (arr[mid] + diff);
if (mid > 0 && arr[mid] - arr[mid - 1] != diff)
return (arr[mid - 1] + diff);
if (arr[mid] == arr[0] + mid * diff)
return missingUtil(arr, mid + 1, right, diff);
return missingUtil(arr, left, mid - 1, diff);
}
int missingElement(int arr[], int n) {
int diff = (arr[n - 1] - arr[0]) / n;
return missingUtil(arr, 0, n - 1, diff);
}
};
int main() {
Progression pg;
int arr[] = {2, 4, 8, 10, 12, 14};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "The missing element is: " << pg.missingElement(arr, n);
}
আউটপুট
The missing element is: 6