[알고리즘] 시간복잡도와 공간복잡도 (빅오 표기법)
어떤 알고리즘의 성능을 평가할 수 있는 방법은 두 가지가 있다.
시간복잡도와 공간복잡도이다.
사실, 시간복잡도와 공간복잡도의 성능 모두 좋으면 Best👍겠지만 어려운 일이다.
(시간복잡도와 공간복잡도는 함께 할 수 없는 반비례 관계라고 들은 것 같기도)
둘 중 누가 더 중요하냐고 물어보면 당연 시간복잡도다.
- 시간복잡도 : 알고리즘의 실행 속도
- 공간복잡도 : 알고리즘의 메모리 사이즈
시간복잡도를 표기하는 방법은 3가지 방법이 있다.
① 빅오(Big-O)표기법 : 최악의 실행 시간
② 오메가(Big-Ω)표기법 : 최상의 실행 시간
③ 세타(Big-θ)표기법 : 평균 실행 시간
우리는, 빅오 표기법을 사용하게 되는데 그 이유는 Worst 실행시간이어도 그 시간은 보장해줄 수 있기 때문이다.
Big-O에서 가장 중요한 것은 "반복"이다.
반복을 통해 n의 차수를 구할 수 있다.
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(2^n) < O(n!)
상수를 가진 O(1)이 가장 좋은 시간복잡도가 되고, O(n!)는 지양해야하는 시간복잡도이다.
for(int i=0;i<10;i++)
System.out.println("안녕하세요");
for(int j=0;j<n;j++)
System.out.println("안녕하세요");
같은 기능을 하는 for 문이 2개 있지만 두 개의 Big-O는 다르다.
위는 10번 반복이 정해져있는 O(1)이고, 아래는 n번 반복하는 O(n)이 되는 셈이다😅
그렇다면 중첩반복문은 어떨까?
for(int i=0;i<4;i++){
for(int j=0;j<n;j++)
System.out.println("안녕하세요");
}
첫 번째 반복문에서는 4번 반복하지만, 두 번째 반복문에서는 n만큼 반복한다.
전체적으로 4n번 반복하지만, 상수는 모두 제거하기 때문에 시간복잡도는 O(n)이 된다.
만약, 4n+3이어도 시간 복잡도는 O(n)이 된다.
그렇다면 3log2+3n^2이라면 시간복잡도는 어떻게 될까? 😖_
어렵게 느껴질 수 있지만, 빅오의 정의인 최악의 경우를 생각하면 된다. O(logn)보다 O(n^2)이 최악이므로 시간복잡도는 O(n^2)이 된다. 참 쉽죠?😻
Author And Source
이 문제에 관하여([알고리즘] 시간복잡도와 공간복잡도 (빅오 표기법)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mingsomm/알고리즘-시간복잡도와-공간복잡도-빅오-표기법저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)