피드로 돌아가기
Dev.toBackend
원문 읽기
Big-O를 넘어선 하드웨어 캐시 및 데이터 구조 최적화 전략
Binary search is O(log n), but that's not the whole story
AI 요약
Context
이론적인 O(log n) 복잡도만으로는 실제 프로덕션 환경의 실행 시간을 보장할 수 없는 한계 존재. 데이터 정렬 비용, Random Access 제약, CPU 캐시 효율성 등의 변수가 실제 성능에 결정적 영향을 미침.
Technical Solution
- O(1) Random Access 보장 여부에 따른 알고리즘 선택으로 Linked List에서의 O(n log n) 성능 저하 방지
- 정렬 비용 O(n log n)과 단일 검색 비용 O(n)의 비교를 통한 Linear Scan 도입 결정
- CPU Cache Line(64 bytes)의 순차적 읽기 특성을 활용하여 소규모 데이터셋(~1,000 elements)에서 Linear Scan 적용
- Integer Overflow 방지를 위한
lo + Math.floor((hi - lo) / 2)방식의 Mid-point 계산 로직 채택 - 단순 값 탐색을 넘어 Range Query 및 Duplicate Detection 해결을 위한 Lower Bound와 Upper Bound 변형 알고리즘 구현
- Disk I/O 비용 최소화를 위해 Binary Search 대신 Page Size 최적화된 B-tree 구조 활용
실천 포인트
- 데이터셋 크기가 1,000개 미만일 경우 Cache Friendly한 Linear Scan 우선 검토 - 1회성 검색 시 정렬 비용을 고려하여 Binary Search 대신 Linear Scan 적용 - 고정 정수형 언어 사용 시 Mid-point 계산식의 Overflow 가능성 점검 - 범위 검색이나 삽입 지점 파악이 필요할 경우 Lower/Upper Bound 구현체 사용 - Big-O 기반 예측 후 실제 하드웨어 환경에서 Benchmark 수행를 통한 교차 검증