(1) 복잡도란?

(2) 시간복잡도

빅오 Big-O

다음 예제는 5개의 입력을 받아 차례대로 5회 더해준다. 이 때, 연산 횟수는 N에 비례하는 것을 알 수 있다. 따라서 빅오표기법으로 시간 복잡도를 O(N)이라고 표기한다.

array = [3, 5, 1, 2, 4]
summary = 0

for x in array : 
	summary += x

print(summary)

아래 예시는 단순히 더하기를 수행하기 때문에 연산 횟수가 1이다. 따라서 상수 연산으로 O(1)로 시간복잡도를 표기할 수 있다.

a = 5
b = 7
print(a + b)

다음 예시는 O(N^2)의 시간 복잡도를 가진다. 2중 반복문을 통해서 곱셈 결과를 매번 출력하고 있기 때문이다.

array = [3, 5, 1, 2, 4]
for i in array :
	for j in array :
		temp = i * j
		print(temp)

하지만 퀵 정렬의 경우 평균 시간 복잡도는 O(NlogN)이지만 최악의 경우 시간 복잡도는 O(N^2)이다. 일반적으로 알고리즘 테스트에서는 최악의 경우에 대한 연산 횟수가 가장 중요하기 때문에 최악의 시간 복잡도를 우선적으로 고려해야한다.