가장 간단한 알고리즘
- [0]: 목표 값이 포함되어 있으면 0을 반환, 없으면 다음으로 이동
- [1]: 목표 값이 포함되어 있으면 1을 반환, 없으면 다음으로 이동
...- [N-1]:목표 값이 포함되어 있으면 N-1을 반환, 없으면 다음으로 -1을 반환
=> 시간복잡도: O(N)
+)여기서 first, last, mid는 모두 index를 의미함
따라서, last = len(list)-1을 하는 이유!!
선형 탐색
이진 탐색
Base case: 알고리즘이 추가적인 재귀 호출(recursive call) 없이 쉽게 결론(trivally conclude)을 내릴 수 있는 가장 간단한 사례
General case: 알고리즘은 동일한 문제를 더 작은 규모로 해결하기 위해 하나 이상의 재귀적 호출을 할 수 있어야함
명심할 것!!!!
이진 탐색의 Recursive version
- 시간복잡도: O(logN)
=> 각 호출(call)은 mid의 계산/value 비교/output 반환에서 각각 O(1)이 소요됨
- 비효율적임..
Combination(조합): 선택 순서가 중요하지 않고, 전체 n개 중 r개 선택하는 것
Recursive definition