CS/Algorithm 이론

[Algorithm] 공간 / 시간 복잡도 분석

복잡도는 크게 공간 복잡도와 시간 복잡도로 나뉜다. 

 

복잡도를 분석하는 것은 한 문제에 대해서 해결방법으로 나올수 있는 알고리즘이 여러개가 있기 때문이다.

 

그 다수의 알고리즘의 성능을 비교해야 할 필요가 있으므로 공간 / 시간 복잡도를 분석하여 표기한다.

 

이때 표기 방법에는 주로 점근적 표기법 (Asymptotic Notation)이 쓰인다.

 

 


 

시간 복잡도(Time Complexity)

 

-시간복잡도: 프로그램의 수행시간을 분석하는 것, 반복문에 크게 영향을 받음

 

-계산 방법

 

    1) 연산 횟수의 함수가 주어진 경우

 

        최고차항의 계수와 그보다 낮은 차수의 항을 제외시키면 된다.

       

        예를 들어 7n^5+5n^3+3n^2+3 라는 식이 주어졌을때 최고차항인 7n^5 의 계수인 7과 나머지         5n^3+3n^2+3 를 제외 시켜 O(n^5)라고 표기해주면 된다.

 

 

    2) 코드가 주어진 경우

 

        - 보통 1억을 1초로 잡고 계산

 

        - 연산의 횟수를 세고 처리해야 할 데이터의 수 n에 대한 연산횟수의 함수 T(n)를 구한다.

 

        - 이때 모든 연산의 횟수를 세는 것이 아닌 알고리즘의 핵심이 되는 연산의 횟수만 계산한다.

 

        - 핵심이 되는 연산이란 다른 연산에 의해 연산 횟수가 바뀌는 종속적인 연산이 아닌 연산을 찾으면 된다.

 

        - 그 연산에서 최악의 경우를 찾아 빅 오 표기법(Big-O notation)으로 표기한다.

 

 


 

공간 복잡도(Space Complexity)

 

-공간복잡도: 프로그램의 메모리 사용량을 분석하는 것

 

-계산 방법

   

    * 보통 기타 지역 변수나 헤더 파일, 함수 등을 생각해서 5-10MB는 제외하고 생각한다.

    

    크기가 n인 배열에서 n x n의 이차원 배열을 생성한다면 이 알고리즘의 공간 복잡도는 n^2이 된다.

 

 

 

 

 

참고 사이트

https://ledgku.tistory.com/31

https://baactree.tistory.com/26

https://blog.encrypted.gg/724

728x90
반응형

'CS > Algorithm 이론' 카테고리의 다른 글

[Algorithm] 덱 (Deque)  (0) 2019.11.03
[Algorithm] 큐 (Queue)  (0) 2019.10.30
[Algorithm] 스택 (Stack)  (0) 2019.10.30
[Algorithm] 연결리스트(Linked List)  (0) 2019.10.17
[Algorithm] 배열  (0) 2019.10.14