C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++STLのバイナリ検索関数


二分探索は、ソートされた配列内のターゲット値の位置を見つける検索アルゴリズムです。二分探索は、ターゲット値をソートされた配列の中央の要素と比較します。二分探索の時間計算量はO(1)です。これは、さまざまな実装を行うC++プログラムです。 C++STLのバイナリ検索機能

アルゴリズム

Begin
   Initialize the vector of integer values.
   The functions are used here:
   binary_search(start_pointer, end_pointer, value) = Returns true if the value present in array otherwise    false.

   lower_bound(start_pointer, end_pointer, value) = Returns pointer to “position of value” if container 
      contains 1 occurrence of value. Returns pointer to “first position of value” if container contains 
      multiple occurrence of value. Returns pointer to “position of next higher number than value” if container does not contain occurrence of value.

   upper_bound(start_pointer, end_pointer, value) = Returns pointer to “position of next higher valuethan 
      value” if container contains 1 occurrence of value. Returns pointer to “first position of next higher 
      number than last occurrence of value” if container contains multiple occurrence of value. Returns 
      pointer to “position of next higher number than value” if container does not contain occurrence of value.
   Print the results.
End.

サンプルコード

#include<bits/stdc++.h>
using namespace std;
int main() {
   vector<int> a = {6,7,10,14,16,20};
   if (binary_search(a.begin(), a.end(), 50))
      cout << "50 exists in vector";
   else
      cout << "50 does not exist";
   cout << endl;
   if (binary_search(a.begin(), a.end(), 7))
      cout << "7 exists in the vector";
   else
      cout << "7 does not exist";
   cout << endl;
   cout << "The position of 7 using lower_bound ";
   cout << lower_bound(a.begin(), a.end(), 7) - a.begin();
   cout << endl;
   cout << "The position of 7 using upper_bound ";
   cout << upper_bound(a.begin(), a.end(), 7) - a.begin();
   cout << endl;
}

出力

50 does not exist
7 exists in the vector
The position of 7 using lower_bound 1
The position of 7 using upper_bound 2

  1. C++の二分探索木で最小値のノードを見つけます

    1つの二分探索木があるとします。二分探索木で最小要素を見つける必要があります。したがって、BSTが以下のような場合- 最小要素は1になります。 左のサブツリーは常に小さい要素を保持していることがわかっています。したがって、左がnullになるまで左のサブツリーを何度もトラバースすると、最小の要素を見つけることができます。 例 #include<iostream> using namespace std; class node{    public:       node *left;      

  2. C ++プログラムでの二分探索?

    二分探索は、半区間探索、対数探索、または二分探索とも呼ばれ、ソートされた配列内のターゲット値の位置を見つける検索アルゴリズムです。二分探索は、ターゲット値を配列の中央の要素と比較します。それらが等しくない場合、ターゲットが存在できない半分が削除され、残りの半分で検索が続行され、再び中央の要素がターゲット値と比較され、ターゲット値が見つかるまでこれが繰り返されます。残りの半分が空の状態で検索が終了した場合、ターゲットは配列に含まれていません。アイデアは単純ですが、バイナリ検索を正しく実装するには、特に配列の値が範囲内の整数のすべてではない場合、終了条件と中間点の計算に関する微妙な点に注意する必要