이 책의 가장 큰 특징은 수학적인 면에 중점을 둔 점이다. 많은 공식과 정리들을 나열했으며 그것들에 대한 증명을 대부분 꼼꼼하게 다루었다. 그래서 책에서 제시하는 많은 문제들에 대해 “어떻게 해결하나”에 대한 것뿐만 아니라 “이 방법의 효율성과 명확성, 신뢰성은 어떠한가?”에 대한 관심도 두고 있다. 대학 교재로 종종 쓰일 만큼 방대한 분량으로 알고리즘을 체계적으로 정리·분석했다. 처음부터 9장까지는 기본적인 데이터 구조들, 이를테면 스택이나 큐, 트리, 그래프 등에 대한 설명과 일반적으로 구분되는 알고리즘 방법들이 각 장에서 설명되어 있다. 10장부터는 하한계 이론, NP-complete, PRAM 알고리즘, 메쉬 알고리즘, 그리고 하이퍼큐브 알고리즘 등 좀 더 고급스러운 문제들과 알고리즘에 대해 소개한다. 좋은 프로그램 서적이 그렇듯이 이 책도 많은 수의 예제들을 수반한다. 설명하는 알고리즘에 대한 실제 코드들을 적재적소에 실었다. 그것은 C++로 되어 있으며 조금 복잡하거나 긴 코드는 가상코드로 처리했다. 각 장 마지막에는 연습문제가 있어 어렵고 지루한 이론적인 내용들을 실제 코드에 적용해 볼 수 있도록 했다. 알고리즘을 처음 접하는 초보자들을 위한 책은 분명히 아니다. 많지 않은 공간에 많은 알고리즘들을 담으려다 보니 각 알고리즘의 세세한 부분에 대한 설명이 부족하다. 그렇지만 이론적이고 학문적으로 알고리즘에 접근하고자 하는 독자들에게 권하고 싶다.
|
| | 제목에서 알 수 있듯이 알고리즘을 C 언어로 구현하고 있다. 특히 함수 포인터를 적극 사용함으로써 C++의 장점인 구현과 인터페이스의 구분을 C에서도 어느 정도 수용하도록 하고 있다. 코드에 자세한 주석이 있어 이해하는 데 도움을 준다. 그렇지만 C에 대한 어느 정도의 지식이 필요하며, 특히 함수 포인터가 자주 사용되기 때문에 함수 포인터에 대한 이해가 필수다. 그러므로 어느 정도 알고리즘에 대해 익숙하거나 적어도 들어본 적이 있는 독자에게 추천한다. 또한 서문에서 밝힌대로 알고리즘의 사실 자체만을 다루고 있기 때문에 세부적인 응용이나 구현 등을 원하는 독자라면 다른 관련 서적과 같이 보기를 바란다. 총 3부 17장으로 되어 있다. 1부는 알고리즘을 하기 전에 다루어야 할 간단한 알고리즘 분석과 포인터 등을 다루고 있다. 2부는 연결리스트, 스택, 큐, 집합, 해시 테이블 같은 자료구조에 대해 설명하고 있다. 3부에는 본격적으로 알고리즘을 다루고 있다. 각 장은 간략한 소개 글과 주제로 시작하며, 실제 애플리케이션에서 어떻게 쓰이는지 간단히 설명하고 있다. 그리고 코드의 인터페이스에 대한 간략한 설명으로 이어지고, 코드의 구현과 각 코드에 대한 분석이 설명되어 있다. 전체적인 내용에서 점차 자세하고 부분적인 내용으로 좁혀가는 구성을 하고 있어, 좀 더 효율적으로 알고리즘에 접근할 수 있도록 도와주고 있다. 설명 부문의 적절한 그림은 알고리즘 이해의 촉매제 역할을 하고 있다. 번역 또한 잘 되어 있어 별 어려움 없이 볼 수 있다. 기본적인 자료구조와 알고리즘을 다루고 있는 다른 책들에서 볼 수 없는 주제도 다루고 있는데, 수치 메쏘드, 자료 압축, 자료 암호화, 기하 알고리즘 등이 그것이다. 출판된 지 꽤 지났지만 기본적인 내용을 충실히 담고 있고 C에 대한 여러 테크닉 또한 배울 수 있다. 또 함수 포인터를 이용한 구현과 인터페이스의 분리를 어느 정도 수용하고 있으므로 C++나 자바 같은 객체지향 언어로 이를 다시 구현해 보는 것도 이 책의 또 다른 묘미라 할 수 있다.
|
|