ইউনিফর্ম বাইনারি সার্চে আমরা লুকআপ টেবিল ব্যবহার করে বাইনারি সার্চ বাস্তবায়ন করি। এটি বাইনারি সার্চে একটি উন্নতি কারণ টেবিল লুকআপ শিফ্ট এবং যোগের চেয়ে দ্রুত। এই পদ্ধতির সময় জটিলতা O(log n)।
অ্যালগরিদম
শুরু ডাটা অ্যারেতে সর্টেডভাবে বরাদ্দ করুন। লুকআপ অ্যারের সর্বাধিক দৈর্ঘ্য গণনা করুন এবং 'del' নামক একটি নতুন অ্যারে ঘোষণা করুন। লুকআপ অ্যারেতে মান বরাদ্দ করুন n/2, n/4 ইত্যাদি '0' পর্যন্ত, যেখানে n হল ডাটা অ্যারের দৈর্ঘ্য। UniBinarySearch() ফাংশন কল করুন। mid কে 'dl' অ্যারের '0' ইনডেক্সের মানে বরাদ্দ করুন এবং key কে mid ইনডেক্সের মানের সাথে তুলনা করুন। যদি key সমান হয় তবে ইনডেক্স মানটি main-এ ফেরত দিন। যদি 'dal'-এ ইনডেক্স মান শূন্য হয় তবে উপাদানটি নেই, main-এ -1 ফেরত দিন। যদি কম হয়, তবে 'dal' অ্যারেতে সংরক্ষিত পরবর্তী মান বিয়োগ করুন এবং 'dal' অ্যারেতে পরবর্তী মানের দিকে পয়েন্টার শিফ্ট করুন। যদি বেশি হয়, তবে 'dal' অ্যারেতে সংরক্ষিত পরবর্তী মান যোগ করুন এবং 'dal' অ্যারেতে পরবর্তী মানের দিকে পয়েন্টার শিফ্ট করুন। ফাংশন দ্বারা ফেরত দেওয়া ইনডেক্স মান প্রিন্ট করুন এবং আরও সার্চ করার জন্য ইউজারের চয়েস জিজ্ঞাসা করুন। শেষ
উদাহরণ কোড
#include <iostream>
using namespace std;
void lookUpArray(int *a, int N) {
int power = 1, i = 0;
do {
int half = power;
power *= 2;
a[i] = (N + half) / power;
i++;
} while (a[i-1] != 0);
}
int UniBinarySearch(int *a, int *dal, int key) {
int i = d[0] - 1, d = 0;
flag:
if (key == a[i]) return i;
else if (dal[d] == 0) return -1;
else {
if (key < a[i]) {
i -= dal[++d];
goto flag;
} else {
i += dal[++d];
goto flag;
}
}
}
int main(void) {
int i, n = 10, d = 0, pow = 1, index;
char ch;
int a[10] = {2, 6, 7, 10, 12, 14, 12, 16, 20, 26};
while (pow <= n) {
pow *= 2;
d++;
}
int del[d];
lookUpArray(d, n);
up:
cout << "\nসার্চ করার উপাদান লিখুন: ";
cin >> n;
index = UniBinarySearch(a, del, n);
if (index == -1)
cout << "\nআইটেম পাওয়া যায়নি";
else
cout << "\nআইটেম " << n << " " << index + 1 << " পজিশনে পাওয়া গেছে";
cout << "\n\n\tআরও সার্চ করতে চান...চয়েস লিখুন (y/n)? ";
cin >> ch;
if (ch == 'y' || ch == 'Y')
goto up;
return 0;
}
আউটপুট
সার্চ করার উপাদান লিখুন: 7 আইটেম 7 3 পজিশনে পাওয়া গেছে আরও সার্চ করতে চান...চয়েস লিখুন (y/n)? y সার্চ করার উপাদান লিখুন: 21 আইটেম পাওয়া যায়নি আরও সার্চ করতে চান...চয়েস লিখুন (y/n)?