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

2024. 8. 21. 11:37·CS/알고리즘

0. 이진 탐색(Binary Search)

이진 탐색은 타겟(원하는 값)을 찾을 때까지 이진 탐색을 반복 수행하며 검색 범위를 반으로 줄여가면서 순차 탐색보다 빠르게 검색을 수행하는 알고리즘이다.

단, 이진 탐색을 하기 위해서는 자료가 정렬된 상태여야 하는 제약이 존재한다.
분할 정복을 기반으로 하는 방식으로, 분할 정복을 알고 있다면 더욱 이해하기 쉽다.


1. 이진 탐색의 로직

  1. 자료의 중앙에 있는 원소를 고른다.
  2. 중앙값(중앙 원소의 값)과 타겟을 비교한다.
  3. 중앙값과 타겟이 일치하면 탐색을 끝낸다.
  4. 타겟이 중앙값보다 작으면 자료의 왼쪽 반에 대해 새로 검색을 수행하고, 크다면 자료의 오른쪽 반에 대해 새로 검색을 수행한다.
  5. 찾고자 하는 값을 찾을 때까지 위의 과정을 반복한다

아래 그림은 6을 찾는 이진 탐색의 그림이다.


2. 코드

코드는 재귀와 반복문으로 구현이 가능하다.

여기서는 반복문으로 구현을 해보았다.

 

 

사실 Arrays나 Collection에서 binarySearch 메서드를 지원하기 때문에 직접 구현하지 않아도 된다.

 


3. lower bound & upper bound

배열에 중복된 값이 있을 경우에는 lower bound와 upper bound로 나눠서 이진 탐색을 생각할 수 있다.

lower bound는 찾으려는 값과 같거나 큰 값 중 가장 작은 값을 찾는 것이고 → 이상

upper bound는 찾으려는 값보다 큰 값 중 가장 작은 값을 찾는 방식이다. → 초과

3-1. lower bound 코드

3-2. upper bound 코드

반응형
저작자표시 비영리 변경금지 (새창열림)
'CS/알고리즘' 카테고리의 다른 글
  • [알고리즘] 병합 정렬(Merge Sort)
  • [알고리즘] 백트래킹(Backtracking)
  • [알고리즘] 탐욕 알고리즘(Greedy Algorithm)
  • [알고리즘] 순열, 조합 응용: Next Permutation
Dreaming-J
Dreaming-J
개발자로 성장해가는 과정을 기록하기 위한 공간
    반응형
  • Dreaming-J
    꿈꾸는 개발 공간
    Dreaming-J
  • 전체
    오늘
    어제
    • 카테고리 (46)
      • Infra (2)
      • CS (25)
        • 네트워크 (3)
        • 운영체제 (3)
        • 자료구조 (4)
        • 알고리즘 (15)
      • JAVA (10)
        • IntelliJ (1)
        • Stream (2)
        • String (4)
        • Map (1)
        • 기타 (1)
      • Git·Github (7)
      • 독서 (2)
        • 객체지향 설계 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Binary search
    탐색
    GitLab
    dp
    플로이드-워샬
    다익스트라
    Dijkstra
    워셜
    그래프
    동적 계획법
    string
    0/1 knapsack
    0/1
    집합
    java
    독서
    순열
    Prim
    github
    알고리즘
    stream
    코딩테스트
    워샬
    자료구조
    정렬
    disjoint
    조합
    Kruskal
    Git
    sort
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Dreaming-J
[알고리즘] 이진 탐색(Binary Search)
상단으로

티스토리툴바