[ALGORITHM] 완전탐색(Brute-Force) & 이분탐색
less than 1 minute read
ALGORITHM
- 알고리즘 스터디(2)
- 탐색
- 완전탐색(Brute-Force)
- 이분탐색(Binary Search)
- 깊이우선탐색(Depth First Search)
- 너비우선탐색(Breadth First Search)
- 문자열탐색
- KMP(Knuth-Morris-Pratt)
- BM(Boyer-Moore)
완전탐색
- 가능한 모든 경우의 수를 탐색
- 효율성의 관점에서는 최악
- 구현방법
- 반복문
- 재귀함수
- cf. 재귀함수는 동적 계획법/ 백트래킹/ 탐욕법에서도 사용됨
# card 안에 8의 순서를 찾는 함수 (반복문)
def solution(card):
for i in range(len(card)):
if card[i] == 8:
return i
return -1
# card 안에 8의 순서를 찾는 함수 (재귀문)
def solution2(card, idx):
if card[idx] == 8:
return idx
return solution2(card, idx+1)
cards = [5,1,6,7,3,8,2,4]
print(solution(cards))
print(solution2(cards, 0))
이분탐색
- 오름차순으로 정렬된 리스트에서 특정 값의 위치를 찾는 알고리즘
- 중간의 값을 선택하여 찾고자 하는 값과의 크고 작음을 비교함
# card 안에 8의 순서를 찾는 이분탐색 함수
def solution(card):
l,r = 0,len(card)-1
while l <= r:
m = (l+r)//2
if card[m] == 8:
return m
elif card[m] < 8:
l = m + 1
elif card[m] > 8:
r = m - 1
return m
cards = [5,1,6,7,3,8,2,4]
print(solution(cards))
관련 알고리즘 풀이