1부 알고리즘 문제 해결
1장 들어가며
2장 불변량
3장 강 건너기
4장 게임
5장 기사와 건달
6장 귀납법
7장 가짜 동전 찾기
8장 하노이의 탑
9장 알고리즘 설계의 원칙
10장 다리 건너기 문제
11장 기사의 순회
2부 수학적 기법
12장 수학의 언어
13장 불리언 대수
14장 한정 기호
15장 정수론의 요소들
16장 관계, 그래프, 경로 대수
프로그래밍 잘하는 법: 컴퓨터에게 일을 잘 시킨다
컴퓨터에게 일을 잘 시키기 위해 필요한 것은?
프로그래밍을 잘하려면 어떤 능력이 필요할까? 수학을 잘하면 프로그래밍도 잘할까? 둘 사이에 상관관계가 없진 않으나, 막연히 수학을 잘한다고 해서 프로그래밍을 잘한다고 할 수는 없다. 프로그래밍은 인간보다 계산을 더 잘 수행하는 컴퓨터에 일련의 명령을 내리는 작업인데, 이는 수학적 지식이 많거나 문제를 잘 푸는 것과 조금 다르기 때문이다. 인간은 알고리즘을 실행하는 데 꽤 능하지만 자주 실수하는 반면, 컴퓨터는 알고리즘이 엄밀하게 잘 정의되어 있다면 인간보다 더 잘 실행한다. 하지만 컴퓨터는 알고리즘을 스스로 표현해 낼 능력이 없기 때문에 창의적인 인간의 알고리즘 표현 능력에 의존할 수밖에 없다. 여기서 프로그래머가 발휘할 수 있는 능력은 ‘알고리즘을 잘 표현하는 능력’이다.
문제는 많이 풀어 봤지만, 조금만 달라져도 막막하다면?
코드 없이 배우는 알고리즘 설계의 기본 원리
이 책은 다른 알고리즘 책과 조금 다르다. 잘 알려진 알고리즘이나 문제 풀이 방법론을 구체적으로 알려 주지 않는다. 프로그래밍 언어로 작성된 코드가 단 한 줄도 등장하지 않는다. 오로지 불변량, 귀납법, 대칭성의 활용 등 문제를 해결하기 위한 알고리즘을 표현하고 공식화하는 사고 방식을 강조할 뿐이다. 문제는 많이 풀어봤지만 조금 다른 문제를 보면 어떻게 접근해야 할지 막막할 때가 있다. 특정 유형의 풀이는 알고 있지만, 알고리즘 문제 해결을 관통하는 원칙을 알지 못하는 것이다. 이 책을 통해 어떻게 문제를 분석하고, 수학적으로 모델링하는지, 어떻게 알고리즘적 해답을 도출해 내는지, 차근차근 따라가다 보면 어느샌가 알고리즘 이론에 체계적으로 입문할 수 있으며, 어떤 문제를 맞닥뜨리더라도 방법을 찾을 수 있을 것이다.