내일배움캠프 51일차 - 자료구조 & 알고리즘 9주차 : 이진 탐색(녹화본 생성 후 수정)

순차 탐색 - "처음부터 하나씩"

정렬되지 않은 배열에서 값을 찾으려면 veoctor에서 하나씩 순회하면서 비교해간다.

시간 복잡도 O(n)...
※ "정렬된 사전에서 한 글자를 찾을 때, 첫 페이지부터 한 장씩 넘기...

이진 탐색 - "가운데를 보고 절반을 버린다"

정렬된 배열의 가운데(mid)를 보고, 찾는 값이 mid보다 크면 오른쪽 절반만, 작으면 왼쪽 절반만...

왜 O(log n)인가?
매 비교마다 탐색 범위가 절반으로 줄어든다.
n을 계속 2로 나누는 횟수 → log2n

주의사항
배열이 정렬되어 있어야 한다.
 : 정렬되지 않은 데이터에 이진 탐색을 적용하면...

이진탐색 = 분할정복 + 재귀
이진탐색은 분할 정복의 한종류
분할 vs 정복
병합 정렬과의 차이
 : 병합 정렬은 양쪽 모두를 처리, 이진 탐색은 한쪽만 처리한다. O(n log n) vs O(log n)

콜 스택 - 재귀 깊이는 log n

STL의 도구
upper_bound / lower_bound
lower_bound vs upper_bound

활용 패턴
정확한 값 찾기 -
값의 개수 - 

이진탐색의 함정
함정1 - 정렬되지 않은 배열
사진
이진 탐색은 "왼쪽은 작고 오른쪽은 크다"는 정렬 가정 위에서 동작. 그 가정이 깨지면 알고리즘 자체가 무너진다.

함정2 - 정수 오버플로우

함정3 - Off-by-one 에러
left, right의 경게를 잘못 설정하면 무한 루프에 빠진다.
위험한 패턴 vs 안전한 패턴

CS 돋보기
도서관의 카드 목록
도서관에 책 100만 권이 있다고 한다. "제목이 '해리포터'"인 책을 찾아보자.

비교 차이
※ 이것이 바로 데이터베이스...

 B-Tree - 이진 탐색의 진화
실제 노트DB에 이진 트리가 아닌 B-Tree를 사용, 한 노드에 여러 key를 저장하고, 여러 갈래ㅗ 분기.

※ 왜 이진트리가 아니아 B-Tree인가?
하드디스크에서 데이터를 읽을 때 "한번에 많이 읽는 것"이 효율적

정렬의 비용 vs 검색의 이익

실전에서는?
게임 개발
게임에서 이진 탐색은 애니메이션 키프레임 보간에 사용된다.
캐릭터 애니메이션의 키프레임이 시간순으로 정렬되어 있을 때, 현재 시간에 해당하는 두 키프레임을 ,./.

 웹/서버
검색 엔진의 핵심이 이진탐색이다.
ㅍ효ㅗㅓ혀ㅑ

CS 저ㅓㄴ반
이진 탐색의 원리 "매번 절반을 버린다"는 정보 이론과 연결된다.

Yes/No 질문 1회로 얻는 정보량 = 1비트
n개 중...

오늘의 핵심
이진 탐색 = "매번 절반을 버리는 것"
 : 정렬된 데이터의 가운데를 보고 한쪽을 통째로 제외 → 한 번에 범위가 반으로
O(log n)의 위력
 : n =100만에서 순차 100만번 vs 이진 20번 - 5만배 차이
이진 탐색 = 분할 정복 + 재귀
7회차 ...

댓글

이 블로그의 인기 게시물

내일배움캠프 사전캠프 - 사전캠프설 연휴 커피 파밍 이벤트 작품 [ EXTREMITY ]

내일배움캠프 29일차 - 커리어데이 2일차 : 클라이언트 프로그래머로서 포트폴리오, 입사준비팁