개발/활동
코드잇 백엔드 스프린트 - 5주차 위클리 페이퍼 : HashSet 와 O(n)과 O(log n)의 성능 차이
나무개발자
2025. 3. 9. 23:44
반응형
1️⃣ HashSet의 내부 동작 방식과 중복 제거 메커니즘
🔹 HashSet은 어떻게 동작하는가?
HashSet은 내부적으로 HashMap을 활용하여 데이터를 저장합니다.
- HashSet의 각 요소는 HashMap의 Key로 저장되며, Value는 더미 값(Dummy Value) (PRESENT)가 사용됩니다.
- hashCode() 를 이용해 데이터를 저장할 버킷(Bucket) 을 결정합니다.
- 같은 해시 값이 발생하면 equals() 메서드를 사용해 중복 여부를 확인합니다.
🔹 HashSet의 중복 제거 과정
- 새로운 값을 추가(add) 하면, HashSet 내부에서 hashCode() 값을 계산하여 버킷 위치를 찾음
- 해당 위치에 이미 값이 있으면 equals()로 비교
- 같은 값이면 추가하지 않음(중복 제거), 다른 값이면 새로운 값으로 저장
✅ HashSet이 효율적인 이유
- 탐색, 추가, 삭제 연산이 평균적으로 O(1)
- hashCode()를 활용해 빠르게 중복 여부를 판별하여 equals() 호출을 최소화
- 배열 + 연결 리스트(혹은 트리)를 활용하여 충돌을 최소화
2️⃣ O(n)과 O(log n)의 성능 차이
🔹 O(n) vs O(log n) 실생활 예시
시간 복잡도 실생활 예시
O(n) (선형 탐색) | 전화번호부에서 원하는 이름을 처음부터 하나씩 찾기 |
O(log n) (이진 탐색) | 중간부터 찾고, 앞/뒤를 선택하여 탐색 범위를 절반씩 줄이기 |
📌 O(n) 예시 (선형 탐색)
- 전화번호부에서 특정 이름을 찾을 때 첫 페이지부터 하나씩 확인하는 방식
- 데이터가 많아질수록 검색 시간이 비례해서 증가
📌 O(log n) 예시 (이진 탐색)
- 전화번호부가 정렬되어 있다면, 중간부터 확인하고 필요 없는 절반을 버리며 탐색
- 한 번 검색할 때마다 검색 범위가 절반씩 줄어들어 매우 빠름
🔹 데이터 크기가 1백만 개일 때 연산 횟수 비교
데이터 크기 O(n) 연산 횟수 O(log n) 연산 횟수
1,000,000개 | 최대 1,000,000번 비교 | log₂(1,000,000) ≈ 20번 비교 |
🚀 O(n)은 데이터가 커질수록 연산 횟수가 선형 증가하지만, O(log n)은 매우 적은 횟수로도 원하는 데이터를 찾을 수 있음!
반응형