더북(TheBook)

빅오는 증가에 대한 것이기 때문에 가장 중요한 부분은 표기법에서 가장 큰 증가 함수이다. 실질적으로 말하자면 빅오 관점에서 O(N)과 O(4N)은 동일하다. 반면, O(N·M)에서 점은 곱셈 연산자를 의미하며, N과 M이 모두 증가할 때 N과 M이 모두 증가하며 이때 O(N)과 O(N·M)은 같지 않다. O(N·logN)은 O(N)보다 살짝 안 좋지만 O(N2)만큼 나쁘지는 않다.

반면에 O(1)은 놀랍다. 이는 성능 지표의 특성이 어떤 알고리즘에 주어진 데이터 구조의 요소 개수와 관련이 없음을 의미하며, 상수 시간이라고도 한다.

모든 레코드를 반복하여 데이터베이스에서 레코드를 찾는 검색 기능을 구현했다고 가정해 보자. 이는 알고리즘이 데이터베이스의 항목 수에 비례하여 선형적으로 증가한다는 것을 의미한다. 이번에는 데이터 저장을 위해 주판을 사용하고 있기 때문에 레코드 하나에 액세스하는 데 1초씩 걸린다고 가정해 보자. 이 경우에는 항목 60개가 있는 데이터베이스에서 항목을 검색하는 데 최대 1분이 걸린다. 이것이 O(N) 복잡도이다. 같은 팀의 다른 개발자들은 표 2-1에 나오는 다른 알고리즘을 생각할 수 있다.

알고리즘의 실행 속도와 메모리 사용량이 증가하는 것을 빅오 표기법으로 제대로 설명할 줄 알아야 데이터 구조와 알고리즘을 잘 선택할 수 있다. 알고리즘을 직접 구현할 필요가 없더라도 빅오에 익숙해져야 한다. 복잡도를 잘 살피자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.