🖥 시간 복잡도
Ex) 자연수 N이 주어졌을때 1~N까지의 합을 구하는 프로그램
case 1]
res = 0
N = int(input())
for i in range(1, N+1):
res += i
print(res)
case 2]
N = int(input())
res = N * (N+1) // 2
print(res)
n(n+1)2 인 수학 공식을 이용하여 합을 계산했다.
N=1,000이든, N=1,000,000이든 무조건 덧셈 한 번과 곱셈 한 번, 나눗셈 한 번만을 하게 된다.
✔N에 아무 관계 없는 상수 시간 안에 계산이 처리
시간복잡도가 큰 알고리즘들은 더 크고 많은 데이터를 처리할 때 훨씬 더 오랜 시간이 걸리게 된다. 이 계산 횟수를 정확하게 측정하기 어렵기 때문에 Big O 표기법을 사용한다.
입력된 데이터의 갯수가 n개일 때 2n+7번 계산하는 알고리즘과 2n번 계산하는 알고리즘이 있다고 하자. n이 커지면 둘 사이의 차이는 사실상 없어진다.
ex)n이 1000000이면, 숫자 2000007, 2000000의 차이는 크지 않다.
O 표기법으로 나타내면 (2n+7) = O(2n)
✔상수만큼의 시간 차이는 무시
O(1) 상수 형태. n의 값에 상관없이 일정한 양의 계산만 한다.
O(logn) 로그 형태
O(n) 선형
O(nlogn) 선형로그 형태
O(n2),O(n3),⋯ 다차 형태
O(2n) 지수 형태
O(n!) 팩토리얼 형태