バイナリナビゲーションアルゴリズム
2404 ワード
バイナリナビゲーション
バイナリ検索は、ソートされたレコードに必要な値を含むインデックスを検索するアルゴリズムです.分割征服方式のアルゴリズムとしては,最悪の場合O(logn)速度を持つアルゴリズムである.
分割征服(Divide and Conquer)はアルゴリズム中の問題を小部分に分割して解決する小部分問題であり,元の問題サイズを結合して問題を解決する方式である.
動作原理
コード#コード#
c++
#include<iostream>
#include<vector>
using namespace std;
int BinarySearch(vector<int> arr, int target, int high, int low)
{
// 중간 값을 찾는다.
int mid = (high + low)/2;
// 전체 종료 조건 1( 전체 레코드에서 값이 없을 때)
if(low > high)
return -1;
// 전체 종료 조건 2( 값을 찾았을 때)
if(arr[mid] == target){
return mid;
}
// 중간 값이 클 때
else if(arr[mid] > target){
return BinarySearch(arr, target, high, mid+1);
}
// 중간 값이 작을 때
else if(arr[mid] < target){
return BinarySearch(arr, target, mid-1, low);
}
}
実際の操作
昇順に並べられたレコードがあります.
1, 10, 25, 40, 59, 100, 200, 312
この配列で
200
の値を検索します.初めての試み
まず、中間の任意の値
40
が選択される.選択した値
40
と検索する値200
とを比較します.選択した値は
40
より大きい.40
より右側の59, 100, 200, 312
です.バイナリ探索を行う.
2回目の試み
59, 100, 200, 312
中間の任意の値
100
を選択します.選択された値
100
は、検索する値200
よりも小さい.比
100
の右側にある200, 312
の値を用いてバイナリ探索を行った.3回目の試み
200, 312
2つのオプションから小さい値を選択します.
200
を選択します.200
は、検索する値に等しいです.は、
200
のインデックス6を返し、関数は終了します.最悪の場合の回数を計算する
記録パッチナビゲーションバイナリナビゲーション101041007100010001010000001000014
1つずつ探す線形探索が線形に回数を増やすと,バイナリ探索はlog的に増加するので回数は多く増加しないことがわかる.
Reference
この問題について(バイナリナビゲーションアルゴリズム), 我々は、より多くの情報をここで見つけました https://velog.io/@taeheon95/이진-탐색-알고리즘テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol