YYYEJI

[Algorithm] 시간복잡도(Time complexity)란? 본문

Algorithm

[Algorithm] 시간복잡도(Time complexity)란?

YEJI ⍢ 2023. 4. 16. 16:13
728x90

시간복잡도(Time complexity)란?

작성한 코드의 실행 시간을 말합니다.

 

작성한 코드의 반복문, 입력 값 등을 통해 대략적으로 실행 시간을 추측할 수 있습니다.

 

 

아래 그래프는 

자료의 수가 증가함에 따라 소요되는 처리시간 증가율을 나타내는 그래프입니다.

 

 

하나하나 살펴보도록 하겠습니다!

 

 

O(1)


printf("Hello world!")

O(1)은 일정한 복잡도(constant complexity)이며, 입력값이 증가하더라도 시간이 증가하지 않습니다.

 

o(n)


for(int i = 0; i<10; i++){
	printf("%d\n". i);
}

O(n)은 선형 복잡도(linear complexity)이며, 입력값이 증가함에 따라 시간이 같은 비율로 증가합니다.

 

 

 O(logn)


int i = 0, j = n;
while(j>0){
	i+=j;
    j/=2;
}

O(log n)은 로그 복잡도(logarithmic complextify)라고 부르며, 알고리즘을 수행할 때마다 찾아야할 대상이 절반으로 줄게됩니다.

→  O(1) 다음으로 빠른 시간 복잡도를 갖습니다.

 

O(n²)


for(int i = 0; i<10; i++){
	for(int j = 0; j<10; j++){
    	printf("%d x %d = %d\m", i, j, i*j);
    }
}

O(n²)은 2차 복잡도(quadratic complexity)라고 부르며, 입력값이 증가함에 따라 시간이 n의 제곱수의 비율로 증가합니다.

 

O(2ⁿ)


int fib(int n) {
    if (n == 0) return 0;
    else if (n == 1) return 1;
 
    return fib(n - 1) + fib(n - 2);
}

O(2ⁿ)는 기하급수적 복잡도(exponential complexity)라고 부르며, 가장 느린 시간 복잡도를 가지고 있습니다.

 

 

◡̈