더북(TheBook)

(2)번 식에 따르면 샤시가 요구한 밀알 개수는 다음 식으로 계산할 수 있다.

1 + 2 + ⋯ + 263 = 264 - 1

밀알을 1초에 한 톨씩 셀 수 있다면 밀알을 모두 세는 데 약 5850억 년이 걸린다. 지구 나이의 100배가 넘는 시간이다. 기하급수의 무서움을 보여주는 대표적인 예다. 문제가 커지면서 계산 시간도 기하급수적으로 증가하는 알고리즘은 문제의 크기가 매우 작은 경우를 제외하면 실용성이 없다고 할 수 있다.

밀알 개수를 체스판의 칸마다 두 배씩 늘리는 대신 두 알씩 늘려달라고 요구했다면 몇 알을 받게 될까? 그런 경우, 밀알 개수는 다음과 같이 된다.

1 + 3 + ⋯ + (2·64 - 1) = 642

이번에도 밀알을 1초에 한 톨씩 셀 수 있다면 1시간 14분 만에 밀알을 모두 셀 수 있다. 알고리즘 실행시간 면에서 보면 2차함수적인 증가율이 훨씬 더 받아들일 만한 수준이라고 할 수 있다.

2차함수적인 알고리즘보다 훨씬 빠른 선형 알고리즘도 있다. 실행시간이 입력 크기에 비례하는 알고리즘이다. 로그 실행시간 알고리즘은 이보다 더 빠르다. 로그 실행시간 알고리즘은 보통 문제의 크기를 상수 배율(예를 들어 1/2)만큼씩 줄이는 방식으로 돌아간다(알고리즘 설계 전략 관련 튜토리얼 참조). 기하급수적인 증가와 반대로 문제의 크기를 기하급수적으로 줄이는 방식이다. 첫 번째 튜토리얼에서 살펴본 숫자 맞히기를 풀 때 사용한 알고리즘이 이 부류에 속한다.

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