यूनिफॉर्म बाइनरी सर्च में हम लुकअप टेबल का उपयोग करके बाइनरी सर्च को लागू करते हैं। यह बाइनरी सर्च में एक सुधार है क्योंकि टेबल लुकअप शिफ्ट और एडिशन से तेज होता है। इस दृष्टिकोण की समय जटिलता O(log n) है।
एल्गोरिदम
शुरुआत डेटा को सॉर्टेड तरीके से सरणी में निर्दिष्ट करें। लुकअप सरणी की अधिकतम लंबाई की गणना करें और एक नई सरणी 'del' घोषित करें। लुकअप सरणी में मान निर्दिष्ट करें जैसे n/2, n/4 और इसी तरह '0' तक, जहां n डेटा की लंबाई है। UniBinarySearch() फ़ंक्शन कॉल करें। 'dl' सरणी के '0' इंडेक्स पर मान को मिड निर्दिष्ट करें और की की तुलना मिड इंडेक्स पर मान से करें। यदि की बराबर है तो इंडेक्स मान को मेन में लौटाएं। यदि 'dal' में इंडेक्स मान शून्य है तो एलिमेंट नहीं है, मेन में -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)?