728x90
1. 시간복잡도의 O(n)과 O(nlogn)의 차이
O(n)
- 의미: 데이터의 크기 nn에 비례하여 연산 횟수가 증가합니다. 데이터가 nn만큼 커지면 수행 시간도 비슷하게 nn배로 증가합니다.
- 특징:
- 비교적 빠릅니다.
- 선형적으로 연산을 수행하기 때문에 대규모 데이터에도 적합합니다.
- 예: 투포인터 알고리즘, 단일 반복문을 사용하는 탐색 문제.
O(nlogn)
- 의미: 데이터 크기 nn에 로그 크기를 곱한 만큼 연산 횟수가 증가합니다. 이는 정렬 알고리즘과 같은 문제에서 자주 나타납니다.
- 특징:
- nn이 작을 때는 O(n)보다 큰 차이가 나지 않지만, nn이 커질수록 느려집니다.
- logn\log n은 느리게 증가하기 때문에 큰 nn에서도 실용적일 수 있습니다.
- 예: 퀵소트, 병합 정렬 등 효율적인 정렬 알고리즘.
2. 주의해야 할 점
O(n)의 알고리즘을 사용할 때
- 단일 반복문에서 실행:
- O(n)은 모든 데이터를 한 번씩 살펴보는 연산이므로, 불필요하게 중복된 연산이 없어야 합니다.
- 데이터 크기가 매우 크더라도 적합:
- 데이터 크기가 nn에 비례한 연산량이므로, 대규모 입력에도 실용적입니다.
O(nlogn)의 알고리즘을 사용할 때
- 데이터 정렬이 필요한 경우:
- 정렬을 미리 수행해야 투포인터처럼 효율적인 알고리즘을 사용할 수 있습니다.
- 데이터 크기에 유의:
- nn이 매우 클 경우 nlognn \log n은 O(n)보다 연산량이 많아질 수 있습니다.
- 정렬 비용과 이후 연산의 효율성 비교:
- 정렬 이후 O(n)으로 해결 가능한 문제라면 전체적으로 O(nlogn)만큼의 효율성을 가질 수 있습니다.
3. 어떤 상황에서 어떤 시간복잡도를 선택해야 하는가?
(1) N이 큰 경우 (예: 1<N<10,000,0001 < N < 10,000,000)
- 이 경우 nn이 매우 크므로, O(nlogn)보다 O(n)을 사용하는 것이 바람직합니다.
- 이유:
- nn이 클수록 nlognn \log n의 시간복잡도가 O(n)보다 훨씬 느려집니다.
- 투포인터와 같은 O(n) 알고리즘은 정렬 없이 바로 데이터를 처리하므로 더 효율적입니다.
(2) N이 비교적 작은 경우 (예: 1<N<15,0001 < N < 15,000)
- 이 경우 O(nlogn)으로 정렬 후 O(n) 알고리즘을 사용하는 것이 가능합니다.
- 이유:
- nn이 작을 때는 logn\log n의 증가량이 작기 때문에, 정렬을 수행하는 비용이 크지 않습니다.
- 정렬 후 투포인터를 사용하면 문제를 보다 간결하고 효율적으로 해결할 수 있습니다.
4. 투포인터 + 정렬 알고리즘의 혼합 사용
정렬 + 투포인터 알고리즘의 시간복잡도는 다음과 같습니다:
- 정렬 단계: O(nlogn)
- 투포인터 알고리즘 실행: O(n)
따라서, 전체 시간복잡도는 O(nlogn+n)O(nlogn + n), 즉 O(nlogn)O(nlogn)이 됩니다.
728x90
5. 정리
- O(n)를 사용하는 상황:
- nn이 매우 크고 데이터가 정렬되어 있거나, 정렬 없이도 문제를 풀 수 있을 때.
- 연속적인 탐색이 주된 작업일 때.
- O(nlogn)를 사용하는 상황:
- nn이 상대적으로 작거나, 문제 해결을 위해 정렬이 반드시 필요할 때.
- 정렬 이후 추가 작업의 복잡도가 낮아 전체 연산량이 효율적일 때.
추천 기준
- n>100,000n > 100,000: O(n) 알고리즘을 사용하는 것을 우선 고려.
- n≤100,000n \leq 100,000: O(nlogn)도 무리 없이 사용 가능.
이 기준은 상황에 따라 유동적일 수 있으므로, 문제에서 요구하는 성능 조건에 따라 적절히 선택하세요!
728x90
'알고리즘' 카테고리의 다른 글
[알고리즘] 등비수열 (0) | 2023.11.06 |
---|---|
[알고리즘] Q006~008 투 포인터 (시간복잡도 알고리즘) (0) | 2023.09.10 |
[알고리즘] Q005 나머지 합 구하기 (조합/Combination) (0) | 2023.08.20 |
[알고리즘] Q004 구간합 (2차 배열) (0) | 2023.08.19 |
[알고리즘] 로그확인/출력시 Tip (0) | 2023.08.19 |