Search
▶️

이진 탐색(Binary Search)

1. 이진 탐색(Binary Search)

💡
Binary Search
탐색 : 특정 값을 찾는 알고리즘
이진 탐색 : 정렬되어 있는 값들 중에서 특정 값을 찾는 알고리즘
찾고자 하는 값과 중간 값을 비교하여 탐색 공간을 절반씩 제거할 수 있습니다.
탐색할 숫자를 절반씩 지워나가기 때문에 O(log n)의 시간 복잡도를 가지게 됩니다.
이미 정렬되어 있다면, 이진 탐색이 굉장히 효율적이고, 정렬을 다시 하더라도 숫자를 엄청 많이 탐색해야 하는 경우에도 효율적이라고 말할 수 있겠습니다. → 정렬하고 이진 탐색할 경우 O(n log n)의 시간복잡도를 가지게 됩니다.

2. 이진 탐색의 구현

💡
Tip
탐색하고자 하는 원소들이 이미 정렬되어 있다고 가정합니다.
재귀함수를 이용하여 구현할 수도 있고, 단순 반복문을 통해 구현할 수도 있습니다.
재귀함수 : binarySearch(array, start, end, value) // array의 start번째 값 부터 end번째 값 중 value를 찾는 함수
단순 반복문 : 투 포인터(start, end)를 활용하여 구현할 수 있습니다.
func binarySearch(_ array: [Int], _ start: Int, _ end: Int, _ value: Int) -> Bool { if start >= end { return array[start] == value ? true : false } let mid: Int = (start + end) / 2 if array[mid] == value { return true } return array[mid] < value ? binarySearch(array, mid + 1, end, value) : binarySearch(array, start, mid - 1, value) }
Swift
복사

3. 매개 변수 탐색(Parametric Search)

💡
Parametric Search
Binary Search를 이용하여 문제를 해결하는 방법입니다.
원래의 값들을 대신할 수 있는 매개변수들이 정렬되어 있는 경우 사용할 수 있습니다.
원래의 값들을 통해 매개 변수를 구하기 위한 별도 작업이 필요합니다.