250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- @NoArgsConstructor
- 선형 리스트
- 트리
- query
- 쿠키
- 코드
- 내부 정렬
- 배열
- code
- 자료구조
- 마크다운
- @ComponentScan
- java
- CleanCode
- 클린
- mysql
- 스택 큐 차이
- JsonNode
- 마크다운 테이블
- 계산 검색 방식
- 클린코드
- @RequiredArgsConstructor
- 연결 리스트
- 클래스
- 리스트
- WebClient
- 정렬
- 빅 오 표기법
- 쿼리메소드
- 인터페이스
Archives
- Today
- Total
Developer Cafe
시간복잡도 Time Complexity 본문
728x90
효율적인 알고리즘이란 입력값이 커짐에 따라 증가하는 시간의 비율을 최소화한 알고리즘을 말한다.
이때 고려되는것이 시간복잡도인데 주로 빅-오 표기법으로 나타낸다.
코드를 예시로 자세히 알아보자
1. O(1)
O(1)는 일정한 복잡도(constant complexity)라고 하며, 입력값이 증가하더라도 시간이 늘어나지 않는다.
즉, 입력값 크기와 관계없이, 즉시 출력값을 얻어낼 수 있다는 의미이다.
function O_1_algorithm(arr, index) {
return arr[index];
}
let arr = [1, 2, 3, 4, 5];
let index = 1;
let result = O_1_algorithm(arr, index);
console.log(result); // 2
2. O(n)
O(n)은 선형 복잡도(linear complexity)라고 부르며, 입력값이 증가함에 따라 시간 또한 같은 비율로 증가하는 것을 의미한다.
function O_n_algorithm(n) {
for (let i = 0; i < n; i++) {
// do something for 1 second
}
}
3. O(log n)
O(log n)은 로그 복잡도(logarithmic complexity)라고 부르며, Big-O표기법중 O(1) 다음으로 빠른 시간 복잡도를 가진다.
- 이해하기 쉬운 게임으로 비유해 보자면 up & down을 예로 들 수 있다.
- 1~100 중 하나의 숫자를 플레이어1이 고른다. (30을 골랐다고 가정한다.)
- 50(가운데) 숫자를 제시하면 50보다 작으므로 down을 외친다.
- 1~50중의 하나의 숫자이므로 또다시 경우의 수를 절반으로 줄이기 위해 25를 제시한다.
- 25보다 크므로 up을 외친다.
- 경우의 수를 계속 절반으로 줄여나가며 정답을 찾는다.
4. O(n2)
O(n2)은 2차 복잡도(quadratic complexity)라고 부르며, 입력값이 증가함에 따라 시간이 n의 제곱수의 비율로 증가하는 것을 의미한다.
function O_quadratic_algorithm(n) {
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
// do something for 1 second
}
}
}
5. O(2n)
O(2n)은 기하급수적 복잡도(exponential complexity)라고 부르며, Big-O 표기법 중 가장 느린 시간 복잡도를 가진다. (재귀함수로 구현된 피보나치 수열이 대표적)
function fibonacci(n) {
if (n <= 1) {
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
728x90
'개발자답게' 카테고리의 다른 글
WS(Web Server)와 WAS(Web Application Server) (0) | 2022.10.27 |
---|---|
int와 Integer (0) | 2022.10.27 |
HTTP가 지원하고 있는 메소드 (0) | 2022.01.17 |
일반인에게 개발의 세계에 대해서 (0) | 2021.06.22 |
URI VS URL VS URN 차이 (0) | 2021.05.07 |
Comments