국어 사전과 이진 탐색의 공통점

이진 탐색은 무엇인가

이진 탐색은 정렬된 리스트에서 검색 범위를 줄여 나가면서 원하는 데이터를 검색하는 알고리즘이다.


그래서 이거 왜 쓰는데?

국어 사전을 살펴본다고 가정하자. (지금은 잘 쓰지 않지만)

"사랑"이라는 단어를 찾아본다고 할 때, 우선 "ㅅ"에 해당하는 파트로 이동해야한다.

그리고 우연히 찾은 페이지가 "소나무"(사전순으로 봤을 때에 사랑보다 뒤에 위치한다)라면 그보다 앞으로 더 이동해서 "사랑"을 찾아야한다.

이런식으로 내가 원하는 단어와 현재 단어의 순서를 비교하며 찾아간다는 점이 유사하다고 할 수 있다.

뿐만 아니라, 해당 방식은 처음부터 원하는 단어까지 순차적으로 탐색을 하는 방식보다 시간이 매우 단축될 것이다.


이진 탐색을 사용할 수 있는 조건

앞서 예시를 둔 국어 사전은 기본적으로 사전순으로 정렬이 되어있다

따라서, 현재 단어의 위치를 파악하여 앞으로 갈지 뒤로 갈지를 판단할 수 있다.

이진 탐색도 마찬가지이다.

현재 데이터의 위치를 파악하여 앞으로 갈지 뒤로 갈지를 판단해야하기 때문에 정렬된 리스트에서만 사용할 수 있다.


동작원리와 예시 코드

1. 탐색할 배열을 정렬한다.

2. 배열의 중간 인덱스 값을 기준으로 탐색을 시작한다.

3. 중간 값과 찾고자 하는 값을 비교한다.

   3-1. 중간 값이 찾고자 하는 값보다 작으면 왼쪽 부분 배열을 탐색한다.

   3-2. 중간 값이 찾고자 하는 값보다 크면 오른쪽 부분 배열을 탐색한다.

4. 찾고자 하는 값이 중간 값과 일치하면 해당 위치를 반환하고, 아니면 반복하여 탐색을 진행한다.

5. 탐색할 부분 배열의 크기가 0이 될 때까지 위의 과정을 반복한다.

def binary_search(arr, target):
    left = 0
    right = len(arr)-1
    
    while left <= right:
        mid = (left+right)//2
        
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid+1
        else:
            right = mid-1
    
    return -1  # 찾지 못한 경우

블로그 : https://justgotothedesk.tistory.com/152

예시 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/64062


[알고리즘] 이진 탐색

IT 공부

[알고리즘] 이진 탐색

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 3월 25일 오후 1:21

조회 143

댓글 0