복잡도
-> 만들어낸 알고리즘을 직접 구현해보지 않아도 대략적인 시간을 미리 파악할 수 있다.
즉, 어떤 알고즘을 사용할지 검토할 때 비교하기 편하다.
알고리즘 A의 계산시간 T(N)이 대략 P(N)에 비례하면
T(N) = O(P(N)) 으로
알고리즘 A의 복잡도는 O(P(N))이라 한다.
ex) T(N) = 3N^2+5N+100일때 T(N) = O(T(N^2))
복잡도 종류
- 지수시간 - N이 증가함에 따라 계산시간이 급격하게 늘어남.
O(N!), O(2^n) - 다항시간
O(N^d),O(N^2),O(N^3) & 다항식은 아니지만 다항 시간이 필요한 계산량 O(NlogN),O(N*sqrt(N)) - 상수시간 - 문제 크기에 의존하지 않는 상수시간 이내에 처리가 끝남
O(1)
복잡하지만 빠른 알고리즘만 추구하면 안된다.
풀고싶은 문제의 크기에 따라 적절한 시간 복잡도를 가진 알고리즘을 판별하는것이 중요!
O(2^n)은 지수시간 알고리즘으로 N<=20정도의 문제 크기가 작은 범위라면 쓸만하다.
복잡도 표기법
란다우 빅오 표기법
- 계산시간 상한을 평가
점근적 상한성으로 아무리 최악의 시간 복잡도여도 비교 함수보다 같거나 좋다.
T(N) = O(N^2)은 O(N^3),O(N^100)으로 전부 성립한다.
오메가 표기법
- 계산시간 하한을 평가
아무리 좋은 상황이어도 비교함수보다 같거나 나쁘다.
T(N) = Ω(NlogN)
세타 표기법
- 점근적 상한&하한의 교집합. 평균 범위
T(N) = O(P(N)) 및 T(N) = Ω(P(N))이면 T(N) = Θ(P(N))
'코테 준비 > 알고리즘' 카테고리의 다른 글
전체 탐색 - 조합 전체 탐색 (비트 연산 이용) (0) | 2024.08.05 |
---|---|
숫자의 표현 문제 (0) | 2024.08.05 |
약수 구하기 (0) | 2024.08.05 |
나머지 연산의 특징 (0) | 2024.08.05 |
뉴턴-랩슨 방법 (sqrt를 쓰지 않고 제곱근을 구하는 법) (0) | 2024.08.05 |