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

सी ++ एसटीएल में बाइनरी सर्च फ़ंक्शन (बाइनरी_सर्च, लोअर_बाउंड और अपर_बाउंड)


द्विआधारी खोज एक खोज एल्गोरिथम है जो किसी तत्व को सरणी के मध्य मान से तुलना करके और मान के आधार पर विभाजित करके उसकी खोज करता है। एल्गोरिथम ऐसा तब तक बार-बार करता है जब तक कि तत्व नहीं मिल जाता।

सरणी को एक बाइनरी खोज लागू करने के लिए क्रमबद्ध किया जाना चाहिए।

द्विआधारी खोज की समय जटिलता लघुगणक . की है गण। इसलिए प्रोग्रामर के लिए एल्गोरिथम को कोड करने के लिए समय को कम करने के लिए इसके कार्यान्वयन के साथ-साथ बाइनरी सर्च से संबंधित शॉर्टहैंड को जानना बहुत महत्वपूर्ण है। मानक टेम्पलेट लाइब्रेरी (एसटीएल) में शामिल बाइनरी सर्च एल्गोरिथम से संबंधित कार्यों पर यहां चर्चा की गई है।

निचला_बाउंड -निचली बाध्य खोज उस स्थिति को लौटाती है जहां तत्व पाया जाता है।

सिंटैक्स

lower_bound(start_pointer , end_pointer, element )

यहाँ,

प्रारंभ_सूचक वह सूचक है जो खोज संरचना के शुरुआती बिंदु की स्मृति स्थान रखता है।

end_pointer एक सूचक है जो खोज संरचना के समापन बिंदु की स्मृति स्थान रखता है।

तत्व वह तत्व है जो फ़ंक्शन का उपयोग करके पाया जाना है।

फ़ंक्शन उस तत्व की अनुक्रमणिका देता है जिसे ढूँढना है।

रिटर्न वैल्यू में कई मान हो सकते हैं -

यदि तत्व संरचना में एक बार होता है, तो स्थिति वापस आ जाती है।

यदि तत्व संरचना में एक से अधिक बार आता है, तो पहले तत्व की स्थिति वापस आ जाती है।

यदि संरचना में तत्व नहीं होता है, तो तत्व की तुलना में अगली उच्च संख्या की स्थिति वापस आ जाती है।

सूचकांक संरचना की आधार स्थिति को घटाकर किसी भी तत्व का पता लगाया जाता है।

उदाहरण

#include<bits/stdc++.h>
using namespace std;
int main(){
   vector<int> sortedarray = {2 , 5, 7, 8 , 15, 20 };
   vector<int> sortedarray2 = {2, 3, 4, 6 , 9 , 23 };
   vector<int> sortedarray3 = {2 , 5, 7, 7 , 15, 20 };
   cout<<"The position of element 7 found using lower_bound function :";
   cout<<"\nCase 1 : When element is present in array but only once ";
   cout<<lower_bound(sortedarray.begin() , sortedarray.end(), 7) - sortedarray.begin();
   cout<<"\nCase 2 : When element is present more than one times in the array ";
   cout<<lower_bound(sortedarray3.begin() , sortedarray3.end(), 7) - sortedarray3.begin();
   cout<<"\nCase 3 : When element is not present in the array ";
   cout<<lower_bound(sortedarray2.begin() , sortedarray2.end(), 7) - sortedarray2.begin();
}

आउटपुट

The position of element 7 found using lower_bound function :
Case 1 : When element is present in array but only once 2
Case 2 : When element is present more than one times in the array 2
Case 3 : When element is not present in the array 4

ऊपरी_बाउंड - ऊपरी बाध्य खोज उस तत्व की स्थिति लौटाती है जो पारित तत्व से अधिक है।

सिंटैक्स

upper_bound(start_pointer , end_pointer, element)

यहाँ,

प्रारंभ_सूचक वह सूचक है जो खोज संरचना के शुरुआती बिंदु की स्मृति स्थान रखता है।

end_pointer एक सूचक है जो खोज संरचना के समापन बिंदु की स्मृति स्थान रखता है।

तत्व वह तत्व है जो फ़ंक्शन का उपयोग करके पाया जाना है।

फ़ंक्शन उस तत्व की अनुक्रमणिका देता है जिसका मान तत्व के मान से अधिक है।

रिटर्न वैल्यू में कई मान हो सकते हैं -

यदि तत्व संरचना में एक बार आता है, तो अगले उच्च तत्व की स्थिति लौटा दी जाती है।

यदि तत्व संरचना में एक से अधिक बार होता है, तो अंतिम तत्व के अगले तत्व की स्थिति वापस आ जाती है।

यदि संरचना में तत्व नहीं होता है, तो तत्व की तुलना में अगले उच्च संख्या की स्थिति वापस आ जाती है।

सूचकांक संरचना की आधार स्थिति को घटाकर किसी भी तत्व का पता लगाया जाता है।

उदाहरण

#include<bits/stdc++.h>
using namespace std;
int main(){
   vector<int> sortedarray = {2 , 5, 7, 8 , 15, 20 };
   vector<int> sortedarray2 = {2, 3, 4, 6 , 9 , 23 };
   vector<int> sortedarray3 = {2 , 5, 7, 7 , 15, 20 };
   cout<<"The position of element 7 found using upper_bound function :";
   cout<<"\nCase 1 : When element is present in array but only once ";
   cout<<upper_bound(sortedarray.begin() , sortedarray.end(), 7) - sortedarray.begin();
   cout<<"\nCase 2 : When element is present more than one times in the array ";
   cout<<upper_bound(sortedarray3.begin() , sortedarray3.end(), 7) - sortedarray3.begin();
   cout<<"\nCase 3 : When element is not present in the array ";
   cout<<upper_bound(sortedarray2.begin() , sortedarray2.end(), 7) - sortedarray2.begin();
}

आउटपुट

The position of element 7 found using upper_bound function :
Case 1 : When element is present in array but only once 3
Case 2 : When element is present more than one times in the array 4
Case 3 : When element is not present in the array 4

बाइनरी_सर्च एक फ़ंक्शन है जो यह जांचता है कि तत्व संरचना में मौजूद है या नहीं।

सिंटैक्स

binary_search(start_pointer , end_pointer, element)

यहाँ,

प्रारंभ_सूचक वह सूचक है जो खोज संरचना के शुरुआती बिंदु की स्मृति स्थान रखता है।

end_pointer एक सूचक है जो खोज संरचना के समापन बिंदु की स्मृति स्थान रखता है।

तत्व वह तत्व है जो फ़ंक्शन का उपयोग करके पाया जाना है।

यदि तत्व संरचना में मौजूद है, तो फ़ंक्शन सही हो जाता है। अन्यथा, यह झूठी वापसी करेगा।

उदाहरण

#include<bits/stdc++.h>
using namespace std;
int main(){
   vector<int> sortedarray = {6, 15, 21, 27, 39, 42};
   cout<<"The element to be found in the array is 21\n" ;
   if(binary_search(sortedarray.begin(), sortedarray.end(), 21))
      cout<<"The element is found";
   else
      cout<<"The element is not found";
      cout<<"\nThe element to be found in the array is 5\n" ;
   if(binary_search(sortedarray.begin(), sortedarray.end(), 5))
      cout<<"The element is found";
   else
      cout<<"The element is not found";
}

आउटपुट

The element to be found in the array is 21
The element is found
The element to be found in the array is 5
The element is not found

  1. C++ में बाइनरी सर्च ट्री पुनर्प्राप्त करें

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है, अब इस बीएसटी के दो तत्वों की अदला-बदली पर विचार करें, इसलिए हमें इस बाइनरी सर्च ट्री को पुनर्प्राप्त करना होगा। तो अगर दिया गया पेड़ नीचे जैसा है (पहला वाला), तो बरामद पेड़ होगा (दूसरा वाला) - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - नोड्

  1. C++ . में अद्वितीय बाइनरी सर्च ट्री

    मान लीजिए कि हमारे पास एक पूर्णांक n है, हमें सभी संरचनात्मक रूप से अद्वितीय बाइनरी सर्च ट्री को गिनना होगा जो 1 से n तक के मानों को संग्रहीत करते हैं। तो अगर इनपुट 3 है, तो आउटपुट 5 होगा, जैसे पेड़ होंगे - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - n + 1 आकार की एक सरणी बनाएं dp[0] :=1 i क

  1. सी ++ प्रोग्राम में बाइनरी सर्च?

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