자원(시간과 공간)을 효율적으로 사용하는 알고리즘에 대해 효율이 높다고 표현한다. 시간과 공간은 종종 상반 관계에 있다. 메모리(공간 자원)가 충분한 환경에서는 공간 자원을 소모하여 시간 자원을 아낄 수도 있고 반대로 메모리가 충분하지 않은 환경에서는 시간 자원을 소모하여 공간 자원을 아끼는 선택이 필요할 수도 있다.
자원을 많이 사용할수록 그 알고리즘이 복잡하다고 말하며 알고리즘의 복잡도를 표현하는 방법 중 하나가 빅오(Big-O) 표기법이다.
실제 세계에서는 하드웨어마다 공간 자원과 시간 자원의 조건이 다르므로 이론상 알고리즘을 다룰 때에는 모든 알고리즘을 추상적인 공통 기계에서 실행한다고 가정한다.
다양한 하드웨어를 일반적인 형태로 추상화 한 가상의 기계를 랜덤 접근 기계(RAM)라 하며 조건은 아래와 같다.
위와 같은 일반화된 전제 조건에서 효율성을 비교하므로, 실무에서는 실제 실행 환경인 하드웨어에 따라 알고리즘의 이론적 효율과 실제 성능이 서로 다를 수 있다. 따라서 알고리즘의 이론적 성능에 대해서는 정확히 학습하되, 실무에서 하드웨어에 따른 성능을 측정하고 알고리즘을 적용/활용하기 위해서는 컴퓨터 구조 등에 대한 추가 지식이 필요하다.
과거와 비교해 컴퓨터의 발달로 메모리 확보 비용이 줄어들어 공간복잡도의 중요도가 낮아졌다. 알고리즘 학습시에는 주로 시간 복잡도 중심의 분류를 학습한다.
O: order of the function
실행시간을 일반화하여 쉽게 분류하려는 목적으로, 함수에서 가장 큰 영향을 미치는 최고차항만 사용하되 계수 또한 무시하고 표현한다.
T(n) = 5n² - n + 3 의 시간 복잡도 O(n²)
포팅(porting) : 컴퓨터 과학에서 실행 가능한 프로그램이 원래 설계된 바와 다른 컴퓨팅 환경(이를테면 CPU, 운영 체제, 서드 파티 라이브러리 등)에서 동작할 수 있도록 하는 과정
점근표기법(asymptotic notaion) : 어떤 함수의 증가 양상을 다른 함수와의 비교로 표현하는 수론과 해석학의 방법