Computer Science/알고리즘

[알고리즘] 이분탐색(Binary Search)

2023. 3. 15. 15:32
목차
  1. 설명
  2. 사용처
  3. Code

개인의 짧은 식견으로 작성했으니, 많은 조언 부탁드립니다.

설명

  • 이분탐색은 기본적으로 Array와 같은 자료 구조에서 특정 값을 찾아낼 때 쓰인다.
  • 찾고자 하는 값과, 현재 보고 있는 값을 비교하여 왼쪽과 오른쪽으로 탐색 범위를 쪼개 다시 탐색하는 과정을 거친다.
  • 보고 있는 값과 찾고자 하는 값의 대소관계가 분명해야 하기 때문에, 이분 탐색을 사용하기 위해서는 배열이 정렬되어 있어야 한다.
  • 한번 탐색마다 탐색 범위를 반으로 축소하기 때문에(left or right), O(nlogn)의 TC를 갖는다.

사용처

  • 배열 속의 특정 값을 찾고자 할 때.
  • 배열의 값들을 활용하여 찾아야 할 값에 특정 범위 내의 최적해를 찾을 때.

Code

  • 가장 기본적인 이분탐색 코드는 다음과 같다.

```cpp
#include
#include

using namespace std;

int main(){
//Data - 크기가 5인 배열을 선언.
int arr[] = {1,4,2,6,8};

// 배열이 정렬되어 있어야 이분 탐색을 사용할 수 있으므로 배열 정렬.
sort(arr,arr+5);

// 찾고자 하는 값, 값의 유무를 판단할 boolean 변수 선언
int ans = 2; bool result = false;

//처음 시작할 때 위치는 양 끝 점을 위치로 한다.
int left = 0; right = 5 - 1;

//left index가 right index를 넘어갈 경우, 배열의 모든 범위를 탐색한 것이기 때문에 종료.
while(left <= right){
 //left와 right index의 중간 값을 선언하고, 이 값을 찾고자하는 ans와 비교.
 int mid = (left + right) / 2;

    //1. 찾고자 하는 값보다 중간 값과 같으므로, result 변수값을 변경하고 루프에서 빠져나옴.
    if(mid == ans){
     result = true;
        break;
    }
    //2. 현재 값이 찾고자 하는 값보다 크므로, 현재 값보다 작은 범위에서 다시 탐색을 시작.
    else if(mid > ans) right = mid - 1;
    //3. 2번의 반대 개념이므로 현재 값보다 큰 범위에서 다시 탐색.
    else left = mid + 1;
}

cout << result << endl;

return 0;

}

'Computer Science > 알고리즘' 카테고리의 다른 글

[알고리즘] Knapsack Problem(배낭 문제)  (1) 2023.03.15
  1. 설명
  2. 사용처
  3. Code
'Computer Science/알고리즘' 카테고리의 다른 글
  • [알고리즘] Knapsack Problem(배낭 문제)
inseoking
inseoking
Github 주소: https://github.com/ko-inseoklee
inseoking
내 두뇌의 외장하드.
inseoking
전체
오늘
어제
  • 분류 전체보기 (25)
    • 개발 (17)
      • Typescript (4)
      • React (4)
      • Java (0)
      • Kotlin (0)
      • Spring Boot (3)
      • Android (0)
      • Flutter (2)
      • Python (1)
      • 문제풀이 (2)
    • Computer Science (7)
      • 알고리즘 (2)
      • 데이터베이스 (5)
    • 끄적끄적 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • knapsack
  • MariaDB
  • react testing library
  • NPM
  • react
  • Flutter
  • useCallback
  • nginx
  • pm2
  • typescirpt
  • WebSecurityConfigurerAdapter
  • Signing&Capabilities
  • Build Identifier
  • pip3
  • 동적계획법
  • Batch Processing
  • Spring Boot
  • jest
  • Environment
  • 프로그래머스
  • UPSERT
  • Unit Test
  • JavaScript
  • 무인도 여행
  • VAC
  • TypeScript
  • falsy
  • hooks
  • 동시성제어
  • docker

최근 댓글

최근 글

hELLO · Designed By 정상우.
inseoking
[알고리즘] 이분탐색(Binary Search)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.