🌟 실행 시간 측정
코드의 성능을 분석하기 위해 실행 시간을 직접 측정하는 것은 비효율적인 일입니다.
기기마다 성능도 다르고 시간을 측정하는 방법도 다 다르기 때문입니다. 무엇보다 2시간 동안 실행하는 코드를 직접 실행해서 측정하는 건 매우 귀찮은 일이죠.
🌟 Big O 표기법
이런 문제를 해결하기 위해 Big O 표기법을 사용합니다. Big O 표기법은 알고리즘의 효율성을 표기 해주는 표기법으로, 다음과 같은 특징을 가집니다.
- 연산의 개수를 측정하는 것보다 Input에 따라 코드가 몇 번 실행됐는지가 더 중요하다.
- 전체적인 추세에만 관심이 있으므로 최고차항만 신경쓰면 된다.
삽입 정렬 코드를 한 번 보겠습니다. 이중 반복문 구조이기 때문에 외부 루프는 n-1번, 내부 루프는 최악의 경우 i번씩 돌아서 총 n*(n−1)/2번 비교합니다. 입력의 크기가 커질수록 최고차항에 지배적이므로 최고차항만 뽑으면 결과적으로 O(n²) 시간 복잡도가 됩니다.
const insertionSortV1 = (arr) => {
for (let i = 1; i < arr.length; i++) {
for (let j = i; j >= 0; j--) {
if (arr[j] < arr[j - 1]) swap(arr, j, j - 1);
else break;
}
}
return arr;
};

O(n²)은 그다지 좋은 성능은 아닌 것 같습니다.

'개발 > 알고리즘 + 자료구조' 카테고리의 다른 글
| 자료구조) 연결 리스트로 구현한 다항식 덧셈 프로그램 (1) | 2020.06.02 |
|---|---|
| 자료구조) 역순 연결 리스트(reverse linked list) (4) | 2020.06.01 |
| 알고리즘) 선택 정렬(Selection Sort) (2/2) (0) | 2020.05.23 |
| 알고리즘) 선택 정렬(Selection Sort) (1/2) (0) | 2020.05.23 |
| 자료구조) Queue를 이용한 은행 시뮬레이션 프로그램 (1) | 2020.05.04 |