Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 내돈내산
- 크루스칼알고리즘
- package-install
- 1주차완료
- 해쉬테이블
- 프림알고리즘
- DFS알고리즘
- 최단거리알고리즘
- 자료구조
- AIFFEL
- BFS알고리즘
- FastCampus
- nqueen
- 코딩테스트
- 퀵정렬
- 환급챌린지
- 패스트캠퍼스
- 시간복잡도
- 연결리스트
- 파이썬
- 트리구조
- 시나공정보처리기사
- 백준알고리즘2920번
- 코딩테스트인강
- 코딩테스트대비
- Ai
- 알고리즘
- 인강
- Korean-NLP
- 작심삼개월
Archives
- Today
- Total
DevLog
[패스트캠퍼스 :: 코딩테스트 인강] 8주차 ① 이진 탐색 본문
알고리즘/기술면접 완전 정복 올인원 패키지 Online
탐색 알고리즘 - 01. 이진 탐색 - 1
탐색 알고리즘 - 02. 이진 탐색 - 2
탐색 알고리즘 - 03. 이진 탐색 - 3
이진 탐색 (Binary Search) 이란?
- 탐색할 자료를 둘로 나누어 해당 데이터가 있을만한 곳을 탐색하는 방법
분할 정복 알고리즘과 이진 탐색
- 분할 정복 알고리즘 (Divide and Conquer)
- Divide: 문제를 하나 또는 둘 이상으로 나눈다.
- Conquer: 나눠진 문제가 충분히 작고, 해결이 가능하다면 해결하고, 그렇지 않다면 다시 나눈다.
- 이진 탐색
- Divide: 리스트를 두 개의 서브 리스트로 나눈다.
- Comquer
- 검색할 숫자 (search) > 중간값 이면, 뒷부분의 서브 리스트에서 검색할 숫자를 찾는다.
- 검색할 숫자 (search) < 중간값 이면, 앞 부분의 서브 리스트에서 검색할 숫자를 찾는다.
어떻게 코드로 만들까?
- 이진 탐색은 데이터가 정렬되있는 상태에서 진행
- 데이터가 [2, 3, 8, 12, 20] 일 때,
- binary_search(data_list, find_data) 함수를 만들고
- find_data는 찾는 숫자
- data_list는 데이터 리스트
- data_list의 중간값을 find_data와 비교해서
- find_data < data_list의 중간값이라면
- 맨 앞부터 data_list의 중간까지 에서 다시 find_data 찾기
- data_list의 중간값 < find_data 이라면
- data_list의 중간부터 맨 끝까지에서 다시 find_data 찾기
- 그렇지 않다면, data_list의 중간값은 find_data 인 경우로, return data_list 중간 위치
- find_data < data_list의 중간값이라면
- binary_search(data_list, find_data) 함수를 만들고
def binary_search(data, search):
print (data)
if len(data) == 1 and search == data[0]:
return True
if len(data) == 1 and search != data[0]:
return False
if len(data) == 0:
return False
medium = len(data) // 2
if search == data[medium]:
return True
else:
if search > data[medium]:
return binary_search(data[medium+1:], search)
else:
return binary_search(data[:medium], search)
알고리즘 분석
- n개의 리스트를 매번 2로 나누어 1이 될 때까지 비교 연산을 k회 진행
- n X 1212 X 1212 X 1212 ... = 1
- n X 12𝑘12k = 1
- n = 2𝑘2k = 𝑙𝑜𝑔2𝑛log2n = 𝑙𝑜𝑔22𝑘log22k
- 𝑙𝑜𝑔2𝑛log2n = k
- 빅 오 표기법으로는 k + 1 이 결국 최종 시간 복잡도임 (1이 되었을 때도, 비교 연산을 한번 수행)
- 결국 O(𝑙𝑜𝑔2𝑛log2n + 1)이고, 2와 1, 상수는 삭제되므로, O(𝑙𝑜𝑔𝑛logn)
[패스트캠퍼스 100% 환급 챌린지 미션 중입니다.]
알고리즘 / 기술면접 완전 정복 올인원 패키지 Online. | 패스트캠퍼스
오직 개발자 취업을 위해 만든 알고리즘/기술면접 완벽 대비 강의
fastcampus.co.kr
'IT 개발 > Algorithm 알고리즘' 카테고리의 다른 글
[패스트캠퍼스 :: 코딩테스트 인강] 9주차 ① 너비 우선 탐색(BFS), 깊이 우선 탐색(DFS) (0) | 2021.04.17 |
---|---|
[패스트캠퍼스 :: 코딩테스트 인강] 8주차 ② 순차 탐색, 그래프 (0) | 2021.04.11 |
[패스트캠퍼스 :: 코딩테스트 인강] 7주차 ② 병합정렬 (0) | 2021.04.04 |
[패스트캠퍼스 :: 코딩테스트 인강] 7주차 ① 동적 계획법, 퀵 정렬, 병합 정렬 (0) | 2021.04.03 |
[패스트캠퍼스 :: 코딩테스트 인강] 6주차 ② 재귀용법 (0) | 2021.03.28 |