알고리즘의 성능은 대체 어떻게 측정할 수 있을까?
'시간복잡도'라는 것이 있다.
우선 의미를 알아보자.
시간복잡도란 특정 알고리즘이 작업을 완료하는데 걸리는 시간을 정량화하는 것이다.
-위키백과 참조-
시간을 정량화 한다? 이해가 갈듯말듯 하다.
쉽게 말하자면 시간복잡도는 어떠한 알고리즘이 완료되기까지 필요한 스텝을 의미한다. 즉, 분/초를 세는 것이 아닌 몇번의 단계가 필요한지를 측정하는 것이다.
그리고 그 단계들을 분류하기 쉽게 지표화 한 것이 'BigO Notation'이다.
1) O(1)
-Input사이즈에 관계없이 알고리즘이 완료되기까지 걸리는 스텝이 하나(=항상 일정)
-최적의 알고리즘(=가장 선호되는 알고리즘)
-구현하기 쉽지 않음
public void sayHello(){
System.out.println("Hello");
}
2) O(log N)
-알고리즘 완료까지 걸리는 스텝이 매 연산마다 특정 요인에 의해 줄어듦
-Binary Search
public int binarySearch(int answer, int smallNum, int bigNum) {
int middleNum;
if(smallNum <= bigNum) {
middleNum = (smallNum + bigNum) / 2;
if(answer == arr[middleNum]) {
return middleNum;
} else if(answer < arr[middleNum]){
return binarySearch(answer, smallNum, middleNum-1);
} else {
return binarySearch(answer, middleNum+1, bigNum);
}
}
return -1;
}
3) O(N)
-알고리즘 완료까지 걸리는 스텝이 input의 사이즈와 동일
-Linear Search
public void printNumber(number){
for(int i=1; i<=number; i++){
System.out.println("i=" + number);
}
}
4) O(N^2)
-알고리즘 완료까지 걸리는 스텝이 input사이즈의 제곱
public void printNumberSquared(number){
for(int i=1; i<=number; i++){
for(int j=1; j<=number; j++){
System.out.println("i=" + n + ", j=" + j);
}
}
}
'개발 As 공부 > Algorithm' 카테고리의 다른 글
[프로그래머스] 주차 요금 계산 - JAVA (0) | 2022.03.24 |
---|---|
[알고리즘] 동적 프로그래밍, DP(Dynamic Programming) (0) | 2022.02.18 |
[알고리즘] 이진탐색 (0) | 2022.02.15 |
[알고리즘] 너비 우선 탐색, BFS(Breadth First Search) (0) | 2022.02.14 |
[알고리즘] 깊이 우선 탐색, DFS(Depth First Search) (0) | 2022.02.13 |