Reasoning About Growth

Reading Code as a Function


코드의 실행 경로를 줄별 횟수로 바꾸면 정확한 비용 함수가 나타난다. 연속 블록은 더하고, 중첩 반복은 곱하며, 크기를 절반으로 줄이는 반복에는 로그가 나타난다.

연속 블록각 블록의 실행 수를 더한다.
중첩 반복바깥 반복마다 안쪽 반복이 다시 실행된다.
절반 반복n을 1이 될 때까지 반으로 줄이는 횟수는 ⌊log₂ n⌋이다.

한 단계가 어느 코드 줄의 비용인지 연결한다

단계는 실제 반복 본문이 실행되는 순서를 따른다. 반복 제어와 함수 호출 비용은 이 모형에서 세지 않는다.

강조된 줄, 실행 횟수, 누적 비용식은 같은 단계의 상태를 나타낸다.

정확한 식에서 증가 차수를 분리한다

위 절에서 고른 입력 크기 n과 코드 예제를 그대로 쓴다. 같은 n에서도 반복 구조가 다르면 정확한 연산 수와 최고차항이 달라진다.

반복 구조정확한 연산 수현재 값증가 차수

시간과 공간은 서로 다른 자원을 센다

같은 애너그램 판정도 복사 목록에서 문자를 찾아 지우는 방법과 26칸 빈도표를 쓰는 방법은 시간과 추가 공간의 증가가 다르다.

방법주된 작업시간추가 공간
복사 목록남은 문자에서 같은 문자를 찾아 삭제Θ(n²), 최악의 경우Θ(n)
26칸 빈도표고정된 문자 칸을 갱신하고 확인Θ(n)Θ(1)
알파벳 종류가 26개로 고정된 모형이다. 입력 문자열은 추가 공간에서 제외한다.
비교 기준같은 과제, 같은 입력 크기 n
따로 셀 자원문자 작업과 추가 저장 셀

정확한 작업 수를 함수로 바꾼 뒤에는 시간과 공간을 한 값으로 섞지 않는다. 더 빠른 방법이 언제나 추가 공간도 더 적게 쓰는 것은 아니다.