CS
시간 복잡도
ghDev
2024. 7. 29. 16:35
최근 자료구조 및 CS 지식에 부족함을 느껴 이전에 학습했던 것들을 복습하며 추가적인 학습을 시작했다.
알고리즘에 기본이 되는 시간 복잡도(Big O)에 대해 정리해본다.
시간 복잡도란?
const arr = [1, 2, 3, 4, 5]
만약 4를 찾는다?
좌측 부터 4번째이기에 작업량은 4
컴퓨터는 첫번째부터 하나하나 확인한다.
(사람도 마찬가지)
n개의 배열에서의 작업량은 n
Big O 최선의 경우
Big θ 최선과 최악이 같을때
Big Ω 최악의 경우
O(1)
O(logn)
O(N)
O(NlogN)
O(N²)
O(N³)
등으로 나타낸다.
복잡도는 주로 빅오 표기법을 사용해 나타낸다. 최악의 경우 걸리는 시간을 표기하는 방법으로, 최대값을 표기한다.
O(N), O(NlogN), O(N²), O(2^N)
N=1 1 0 1 2
N=10 10 23 100 1024
N=100 100 460 10000 0이 30개
하나당 0.01초가 걸린다고 해도 100개를 정렬하는 경우, O(NlogN)은 4.6초이지만 O(N²)은 100초가 걸리게 된다..
사실 100초까지는 안걸리겠지만

그래프를 보면 O(N²) 부터 성능이 말도 안되게 안좋아 진다.
이외에 θ(theta) 표기법도 있는데 평균의 경우를 나타낸다(O와 Ω의 중간)
최악의 경우가 잘 일어나지 않는 알고리즘의 경우는 θ표기법이 파악에 좀 더 유리하다고 하며
사용은 빅오 표기법과 비슷하여 O만 θ로 바꾸면 된다.
차이점이 있다면 어떤 알고리즘이 빅오 표기법의 경우에는 최선의 경우 O(1)도 나올수 있다면
세타 표기법은 항상 평균의 값만 나오게된다는 점정도라 생각된다.