Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> प्रोग्रामिंग

इंटरपोलेशन सर्च


द्विआधारी खोज तकनीक के लिए, सूचियों को बराबर भागों में बांटा गया है। प्रक्षेप खोज तकनीक के लिए, प्रक्रिया प्रक्षेप सूत्र का उपयोग करके सटीक स्थिति का पता लगाने का प्रयास करेगी। अनुमानित स्थान खोजने के बाद, वह उस स्थान का उपयोग करके सूची को अलग कर सकता है। चूंकि यह हर बार सटीक स्थान खोजने की कोशिश करता है, इसलिए खोज समय कम हो जाता है। यदि आइटम समान रूप से वितरित किए जाते हैं तो यह तकनीक आसानी से आइटम ढूंढ सकती है।

प्रक्षेपण खोज तकनीक की जटिलता

  • समय की जटिलता: O(log2(log2 n)) औसत मामले के लिए, और O(n) सबसे खराब स्थिति के लिए (जब आइटम तेजी से वितरित किए जाते हैं)
  • अंतरिक्ष जटिलता: ओ(1)

इनपुट और आउटपुट

Input:
A sorted list of data:
10 13 15 26 28 50 56 88 94 127 159 356 480 567 689 699 780 850 956 995
The search key 780
Output:
Item found at location: 16

एल्गोरिदम

interpolationSearch(array, start, end, key)

इनपुट - एक क्रमबद्ध सरणी, प्रारंभ और समाप्ति स्थान, और खोज कुंजी

आउटपुट: कुंजी का स्थान (यदि पाया जाता है), अन्यथा गलत स्थान।

Begin
   while start <= end AND key >= array[start] AND key <= array[end] do
      dist := key – array[start]
      valRange := array[end] – array[start]
      fraction := dist / valRange
      indexRange := end – start
      estimate := start + (fraction * indexRange)
      if array[estimate] = key then
         return estimate position
      if array[estimate] < key then
         start := estimate + 1
      else
         end = estimate -1
   done
   return invalid position
End

उदाहरण

#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]; //range of value
      fraction = dist / valRange;
      indexRange = end - start;
      estimate = start + (fraction * indexRange); //estimated position of the key

      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 << "Enter number of items: ";
   cin >> n;
   int arr[n]; //create an array of size n
   cout << "Enter items: " << endl;

   for(int i = 0; i< n; i++) {
      cin >> arr[i];
   }

   cout << "Enter search key to search in the list: ";
   cin >> searchKey;

   if((loc = interpolationSearch(arr, 0, n-1, searchKey)) >= 0)
      cout << "Item found at location: " << loc << endl;
   else
      cout << "Item is not found in the list." << endl;
}

आउटपुट

Enter number of items: 20
Enter items:
10 13 15 26 28 50 56 88 94 127 159 356 480 567 689 699 780 850 956 995
Enter search key to search in the list: 780
Item found at location: 16

  1. अपनी कैप्स लॉक कुंजी को Google खोज कुंजी में कैसे बदलें

    क्या आप अभी भी अपनी कैप्स लॉक कुंजी का उपयोग करते हैं? अधिकांश कंप्यूटर उपयोगकर्ता अपने कीबोर्ड पर कैप्स लॉक कुंजी को बायपास करते हैं, और यह बस अप्रयुक्त हो जाता है। क्या होगा अगर आप कैप्स लॉक की को किसी और चीज़ में बदल सकते हैं? SharpKeys के साथ, आप डिफ़ॉल्ट रूप से Google खोज को खोलने के लिए कैप्स

  1. डबल डेस क्या है?

    डेटा एन्क्रिप्शन स्टैंडर्ड (डीईएस) एक सममित कुंजी ब्लॉक सिफर है जो इनपुट के रूप में 64-बिट प्लेनटेक्स्ट और 56-बिट कुंजी बनाता है और 64-बिट सिफर टेक्स्ट को आउटपुट के रूप में बनाता है। डीईएस फ़ंक्शन पी और एस-बॉक्स से बना है। पी-बॉक्स बिट्स को स्थानांतरित करते हैं और एस-बॉक्स एक सिफर बनाने के लिए बिट्स

  1. सी # में बाइनरी सर्च

    द्विआधारी खोज क्रमबद्ध सरणी पर कार्य करता है। मान की तुलना सरणी के मध्य तत्व से की जाती है। यदि समानता नहीं मिलती है, तो आधा भाग समाप्त हो जाता है जिसमें मूल्य नहीं होता है। इसी तरह दूसरे आधे हिस्से की तलाशी ली जाती है। यहाँ हमारे सरणी में मध्य तत्व है। मान लीजिए कि हमें 62 खोजने की जरूरत है, फिर ब