알고리즘이 입력 데이터의 크기에 따라 실행되는 데 걸리는 시간을 분석
즉, 알고리즘이 수행되는 데 "시간이 얼마나 소요" 되는가를 나타냄
① 표기법
: 알고리즘의 시간 복잡도를 수치화해서 나타내는 방법
- Big-O(빅-오) : 상한 접근
- Big-Ω(빅-오메가) : 하한 접근
- Big-θ(빅-세타) : 그 둘의 평균
즉, 각각 최악, 최선, 평균의 경우 걸리는 시간을 나타냈다고 볼 수 있음
② 빅오 표기법
for(int i=0;i<10;i++){
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
if(true)cout<<k<<'\n';
}
}
}
for(int i=0;i<n;i++){
if(true) cout<<i<<'\n';
}
③ 시간 복잡도 속도 비교
위로 갈수록 더 나은(빠른, 효율적인) 알고리즘이라고 할 수 있다.
알고리즘이 실행되는 동안 사용되는 메모리 공간의 양을 분석
① 공간 복잡도 계산
int a[1004];
따라서 결론은 문제 상황에 적합한 적절한 자료구조와 함수를 통해 효율적인 알고리즘을 구현함으로써 시간복잡도와 공간복잡도를 줄일 수 있다. 제대로된 프로그래머라면 이러한 퀄리티적인 측면에 집중할 필요가 있다.
사실 알고리즘은 best를 찾기보다 worst를 피하는 것이 더 현실적일 수 있으나, 끊임없이 고민하다 보면 보다 빠르게 이상적인 알고리즘에 도달할 수 있을것이다.
복잡도 너무 헷갈려요ㅠㅠ