전체/자료구조

파이썬 시간복잡도 이해하기

effortDev 2020. 6. 8. 14:37


알고리즘 시간복잡도가 필요한 이유는

하나의 문제를 푸는데 알고리즘이 다양할 수 있다.

복잡도를 통해 효율적인 알고리즘을 구현할 수 있다.


- 시간복잡도 : 알고리즘 실행속도를 말한다.

- 공간 복잡도 : 알고리즘이 사용하는 메모리 사이즈를 말한다.


- 시간복잡도는 반복문이 여러개 생길경우 많이 발생한다.


시간복잡도는 빅오 표기법을 사용한다.


O(1) < O( 𝑙𝑜𝑔𝑛 ) < O(n) < O(n 𝑙𝑜𝑔𝑛 ) < O( 𝑛2 ) < O( 2𝑛 ) < O(n!)



1. O(n)의 시간복잡도를 가지는 1부터 n까지의 합을 구하는 알고리즘


1
2
3
4
5
6
7
8
9
10
11
12
# 1부터 n까지의 합을 구하는 알고리즘1
 
def sum_all(n):
    total = 0
    for num in range(1, n + 1):
        total += num
    return total
 
print(sum_all(100)) # 5050 
 
# 시간복잡도  O(n)
# 입력 n에 따라 덧셈을 n 번 해야 함
cs



2. O(1)의 시간복잡도를 가지는 1부터 n까지의 합을 구하는 알고리즘


1
2
3
4
5
6
7
8
9
# 1부터 n까지의 합을 구하는 알고리즘 2
 
def sum_all(n):
    return int(n * (n + 1/ 2)
 
print(sum_all(100)) # 5050
 
# 시간복잡도  O(1)
# 반복문이 없으므로 입력이 n이어도 O(1)
cs



같은 결과를 내는 메소드라도 시간복잡도가 적은 O(1)이 효율적인 알고리즘이라고 할 수 있다.