Hello World!/공부

알고리즘의 성능을 나타내는 복잡도

헬로월드! 2020. 9. 7. 17:28

복잡도는 알고리즘의 성능을 나타내는 척도다. 

복잡도

- 시간복잡도 : 특정한 크기의 입력에 대하여 알고리즘이 얼마나 오래 걸리는지 의미

- 공간복잡도 : 특정한 크기의 입력에 대하여 알고리즘이 얼마나 많은 메모리를 차지하는지 의미 

일반적으로 복잡도가 낮을수록 좋은 알고리즘이다.

 

알고리즘 문제를 풀 때 '복잡도' 는 시간 복잡도이다. 시간 제한이 문제를 푸는 시간을 정한 듯하지만, 코딩 테스트에서는 작성한 프로그램이 모든 입력을 받아 이를 처리하고 실행 결과를 출력하는 데까지 걸리는 시간을 의미한다. 프로그램을 비효율적으로 코딩해서 시간제한을 넘긴다면 -> '시간초과' 와 함께 오답^^

 

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

빅오 표기법 (아래로 갈수록 느림 !)  명칭
O(1) 상수 시간
O(logN) 로그 시간
O(N) 선형 시간
O(NlogN) 로그 선형 시간
O(N^2) 이차 시간
O(N^3) 삼차 시간
O(2^n) 지수 시간

코딩테스트에서 보면 '시간 제한 1초, 메모리 제한 128MB' 와 같은 문장은 시간복잡도와 공간복잡도를 함께 제한하기 위하여 명시하는 것이다. 코테는 보통 리스트 ( 배열)을 이용하여 푸는데 그 이유는 다수의 데이터에 대한 효율적인 처리를 요구하기 때문이다. 

 

import time

start_time = time.time()

#프로그램 소스코드

 

end_time = time.time()

print("time:", end_time-start_time) #수행 시간 출력

 

코테에서 주로 출제 빈도가 높은 것은 그리디, 구현 , DFS/BFS 를 활용한 탐색문제다.  

 

'Hello World! > 공부' 카테고리의 다른 글

리팩토링이란?  (0) 2020.11.13
네트워크 기초 TCP/IP, IPv4 와 IPv6  (0) 2020.10.06
WAS 와 Web server 의 차이점  (0) 2020.09.02
http 와 https 의 차이  (0) 2020.07.22
MVC 패턴이란?  (0) 2020.07.10