실행 시간이 짧고, 저장 공간도 적게 쓰는 알고리즘이 좋은 알고리즘
기본 연산의 종류
- 데이터 입출력 - copy, move...
- 산술 연산 - add, multiply ...
- 제어 연산 - if, while ...
예시
T(n) = n^2+2n+1 = O(n^2) : 최고차항만 나타냄
T(n) = 2n = O(n) : 최고차항의 계수를 제외
T(n) = 4n+3 = O(n)int func (int n) { int sum = 0; // 대입연산 1회 int i = 0; // 대입연산 1회 for(i=0; i<n; i++) { // 반복문 n회 sum += i; // 덧셈 연산 n회 } for(i=0; i<n; i++) { // 반복문 n회 sum += i; // 덧셈 연산 n회 } return sum; // 리턴 1회 }

빅 오 표기법을 생각해볼 때, 고정 공간은 상수이므로 공간 복잡도는 가변 공간에 의해 좌우됨
public static int factorial1(int n){
int fac = 1;
while (n>0){
fac = fac * n;
n--;
}
return fac;
}
이때 공간복잡도는 O(1), n의 값에 상관없이 항상 변수 n과 fac이 저장될 공간이 필요함
public static int factorial2(int n){
if(n>0){
return n * factorial2(n-1);
}else{
return 1;
}
}
이때 공간복잡도는 O(n), 재귀함수므로 변수 n에 따라 method가 호출되는 횟수(스택에 쌓이는 양) 달라짐.
출처
https://yoongrammer.tistory.com/79
http://bigocheatsheet.com/