April 04, 2021
알고리즘이란 문제를 해결하기 위한 여러 동작들의 모임입니다. 서로 다른 두 개의 알고리즘이 같은 결과를 출력할지라도 소비되는 컴퓨터의 메모리와, 출력까지 소요되는 시간은 달라지게 됩니다. 즉, 메모리와 시간이 알고리즘을 측정할 수 있는 기준이 됩니다.
알고리즘이 어떤 문제를 해결하는데 걸리는 시간을 시간 복잡도, 소비하는 메모리의 크기를 공간복잡도라고 부르고 있습니다.
공간 복잡도는 알고리즘이 동작하기 위해 필요한 공간의 크기 입니다. 대부분의 알고리즘이 중복되는 연산의 중간과정을 저장하고 재사용하기 위해 메모리를 소비합니다.
알고리즘이 동작하는 데에 걸리는 시간 또는 연산의 횟수
반복문과 조건문을 고려해서 실행 횟수를 분석하는 방법이 있습니다.
위 코드는
으로 총 3n번의 시간복잡도를 가지게 됩니다.
NOTE: 조건문과 같이 경우에 따라 반복되는 횟수가 달라지는 경우가 있습니다. 따라서 최악의 경우, 최선의 경우, 평균적인 경우로 알고리즘의 복잡도를 정의할 수 있습니다. 그리고 일반적으로는 최악의 경우에 대해 알고리즘의 복잡도를 정의합니다.
보통 n의 크기가 작을 때는 소요되는 시간이 매우 작습니다. 따라서 알고리즘에 입력되는 자료의 개수 n이 충분히 커졌을 때 알고리즘의 성능에 따라 사용자는 영향을 받게 됩니다.
이렇게 n이 충분이 크다고 가정한 상태에서 하드웨어 성능을 배제하고 알고리즘의 성능만을 공평하게 비교할 수있는 효율적인 표기 방법이 점진적 표기법 입니다.
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(2^n) < O(n!)
Big-O는 시간의 상한을 나타냅니다. 시간의 상한이란 예를 들어 O(n^2)으로 표기된 Big-O 표기법은 O(1), O(n) 처럼 O(n^2)보다 높은 성능을 보여주는 시간 복잡도를 모두 포함한다는 의미입니다. 즉, 보통 최악의 경우를 많이 생각하기 때문에 최악의 Big-O 표기법은 해당 알고리즘이 최악의 경우에도 표기된 성능을 보장한다는 의미로 해석할 수 있습니다.
예시
Big-Omega는 하한을 나타냅니다.
예시
Big-Theta는 상한과 하한의 교집합을 나타냅니다.
의 Big-Theta Notation 정의:
예시
알고리즘은 최악, 평균, 최선의 경우로 나누어 분석할 수 있다. 그중에 일반적으로 최악의 경우를 Big-O 표기법으로 표기하는데 그 이유는 다음과 같습니다.