0_ch4n
기계쟁이\n개발자
0_ch4n
0chn.xxx@gmail.com @0ch._.n
전체 방문자
오늘
어제

공지사항

  • All (282)
    • 🖥 CS (21)
      • 네트워크 (12)
      • 운영체제 (3)
      • 자료구조 (2)
      • Web (4)
    • 🧠 Algorithm (185)
      • [C] BOJ (93)
      • [JAVA] Programmers (91)
    • 📚 Study (69)
      • HTML&CSS (19)
      • MySQL (11)
      • JAVA (22)
      • Servlet&JSP (8)
      • Thymeleaf (2)
      • Spring (5)
      • JPA (2)
    • 📖 Book (1)
    • 📃 Certification (6)
      • 정보처리기사 (6)

인기 글

최근 글

최근 댓글

태그

  • til
  • java
  • kakao
  • 코테
  • 자바
  • 프로그래머스
  • Programmers
  • 코딩테스트
  • CSS
  • 카카오

블로그 메뉴

  • 홈
  • 태그
  • 방명록

티스토리

hELLO · Designed By 정상우.
0_ch4n

기계쟁이\n개발자

이진 탐색(Binary Search)
🖥 CS/자료구조

이진 탐색(Binary Search)

2022. 4. 16. 16:23
반응형

✔️ 이진 탐색이란?

이진 탐색이란 데이터가 정렬되어 있는 배열에서 특정한 값을 찾아내는 알고리즘입니다.

배열의 중간에 있는 임의의 값을 선택하여 찾고자 하는 값 X와 비교합니다.

만약 X가 중간 값보다 작으면 중간 값을 기준으로 좌측의 데이터들로, X가 중간 값보다 크면 중간 값을 기준으로 우측의 데이터들로

다시 탐색을 시작하여 해당 값을 찾을 때까지 반복합니다.

 

📌 시간 복잡도

N개의 배열을 이진 탐색하게 되면 N, N/2, N/4, N/8 ... 으로 진행될 것입니다.

여기서 탐색 횟수가 시간 복잡도가 될 것이고 그 값을 K라고 한다면 K = log2N일 것입니다.

즉, 이진 탐색의 시간 복잡도는 O(logN)입니다. 

 

✔️ 이진 탐색의 예시

1. 예를 들어 { 17, 28, 43, 67, 88, 92, 100 } 의 오름차순으로 정렬된 배열에서 43의 값을 찾는 과정입니다.

 

2. 첫 번째 시도로 가운데의 임의의 값 67을 선택하고 67과 43을 비교합니다.

 

3. 43 < 67 이므로 43은 가운데 값 67의 좌측에 있다는걸 알 수 있습니다.

 

4. 두 번째 시도로 67의 좌측 값을인 { 17, 28, 43 } 을 기준으로 다시 탐색합니다.

 

5. 좌측 배열 들의 가운데 임의의 값인 28을 기준으로 하면 28 < 43 이므로 28의 우측에 있다는걸 알 수 있습니다.

 

6. 28의 우측 값으로 배열을 다시 설정하면 { 43 } 이 남고 우리가 원하는 값인 43을 찾을 수 있게 됩니다.

 

✔️ 예시 코드

int binary_search(int arr[], int left, int right, int key) {
    int mid = (left + right) / 2;

    if(arr[mid] == key) {
        return mid;
    }
    else if(arr[mid] > key) {
        return binary_search(arr, left, mid - 1, key);
    }
    else {
        return binary_search(arr, mid + 1, right, key);
    }
}

이 때 arr는 오름차순으로 정렬된 배열, left는 배열의 첫 번째 인덱스, right는 배열의 마지막 인덱스, key는 우리가 원하는 값입니다.

mid값을 구한 후 우리가 원하는 값과 비교하여 재귀함수를 통해 배열을 재설정하는 방식으로 구현하였습니다.

우리가 원하는 값을 찾을 시 정렬된 배열에서 해당 값의 인덱스를 반환합니다.

 

📄 참고

https://cjh5414.github.io/binary-search/

반응형
저작자표시 (새창열림)

'🖥 CS > 자료구조' 카테고리의 다른 글

연결 리스트(Linked List)  (0) 2022.04.12
    0_ch4n
    0_ch4n
    while(true) { study(); }

    티스토리툴바