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

C++ প্রোগ্রাম: ইন্টারপোলেশন সার্চ অ্যালগরিদম বাস্তবায়ন


বাইনারি সার্চ টেকনিকে লিস্টগুলো সমান ভাগে ভাগ করা হয়। ইন্টারপোলেশন সার্চিং টেকনিকে, প্রসিডিউর ইন্টারপোলেশন ফর্মুলা ব্যবহার করে সঠিক পজিশন লোকেট করার চেষ্টা করে। অনুমানিত লোকেশন পাওয়ার পর, সেটি ব্যবহার করে লিস্টকে আলাদা করা যায়। যেহেতু এটি প্রতিবার সঠিক লোকেশন খুঁজে বের করার চেষ্টা করে, তাই সার্চিং টাইম কমে। এই টেকনিক সহজে আইটেম খুঁজে বের করতে পারে যদি আইটেমগুলো ইউনিফর্মলি ডিস্ট্রিবিউটেড থাকে।

ইন্টারপোলেশন সার্চ টেকনিকের জটিলতা

  • সময় জটিলতা: গড় কেসে O(log₂(log₂ n)), এবং ਵอasst কেসে O(n) (যখন আইটেমগুলো এক্সপোনেনশিয়ালি ডিস্ট্রিবিউটেড থাকে)

  • স্পেস জটিলতা: O(1)

ইনপুট − একটি সর্টেড ডেটা লিস্ট: 10 13 15 26 28 50 56 88 94 127 159 356 480 567 689 699 780 850 956 995। সার্চ কি 780
আউটপুট − আইটেম লোকেশন 16-এ পাওয়া গেলো

অ্যালগরিদম

interpolationSearch(array, start, end, key)

ইনপুট: একটি সর্টেড অ্যারে, শুরু এবং শেষ লোকেশন, এবং সার্চ কি

আউটপুট: কির লোকেশন (যদি পাওয়া যায়), অন্যথায় ভুল লোকেশন।

শুরু
যতক্ষণ start <= end AND key >= array[start] AND key <= array[end]
    dist := key – array[start]
    valRange := array[end] – array[start]
    fraction := dist / valRange
    indexRange := end – start
    estimate := start + (fraction * indexRange)
    যদি array[estimate] = key হয় তবে
        estimate পজিশন ফেরত দাও
    যদি array[estimate] < key হয় তবে
        start := estimate + 1
    অন্যথায়
        end = estimate - 1
শেষ
invalid position ফেরত দাও
শেষ

উদাহরণ কোড

#include <iostream>
using namespace std;

int interpolationSearch(int array[], int start, int end, int key) {
    int dist, valRange, indexRange, estimate;
    float fraction;
    while(start <= end && key >= array[start] && key <= array[end]) {
        dist = key - array[start];
        valRange = array[end] - array[start];
        fraction = dist / valRange;
        indexRange = end - start;
        estimate = start + (fraction * indexRange);
        if(array[estimate] == key) return estimate;
        if(array[estimate] < key) start = estimate + 1;
        else end = estimate - 1;
    }
    return -1;
}

int main() {
    int n, searchKey, loc;
    cout << "আইটেমের সংখ্যা দিন: ";
    cin >> n;
    int arr[n];
    cout << "আইটেমগুলো দিন: " << endl;
    for(int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    cout << "সার্চ কি দিন: ";
    cin >> searchKey;
    if((loc = interpolationSearch(arr, 0, n-1, searchKey)) >= 0)
        cout << "আইটেম লোকেশন: " << loc << endl;
    else
        cout << "আইটেম লিস্টে পাওয়া যায়নি।" << endl;
}

আউটপুট

আইটেমের সংখ্যা দিন: 20
আইটেমগুলো দিন: 
10 13 15 26 28 50 56 88 94 127 159 356 480 567 689 699 780 850 956 995
সার্চ কি দিন: 780
আইটেম লোকেশন: 16
  1. C++ প্রোগ্রাম ল্যাঞ্জের ফর্মুলা (Lagrange Formula) ব্যবহার করে ইনভার্স ইন্টারপোলেশন (Inverse Interpolation) ইমপ্লিমেন্টেশন

  2. বাইনারি সার্চ C++ প্রোগ্রামে

  3. নির্দিষ্ট সার্চ সিকোয়েন্সের জন্য বাইনারি সার্চ অ্যালগরিদম বাস্তবায়ন করার C++ প্রোগ্রাম

  4. ইন্টারপোলেশন সার্চ (Interpolation Search)