기타/기타

[책] 알고리즘 산책:수학에서 제네릭 프로그래밍까지

TwinParadox 2018. 8. 24. 07:19
728x90

학부 과정이나 입문자를 위한 알고리즘 책이라고 하면, 프로그래밍이 메인이고, 수학은 시간 복잡도 계산이나 근사치 계산 정도에 쓰이는 정도가 전부인 경우가 많다. 책 구성 또한 시간 복잡도 및 공간 복잡도 계산부터 시작해서 그리디나 다이나믹 프로그래밍(동적계획법) 같은 최적해를 구하는 알고리즘들, 그래프를 이용한 알고리즘(DFS, BFS)들로 구성되어 있다. 


이들 알고리즘에 대해 충분히 학습했거나, 이런 내용보다 수학적인 연관성에 관심이 가는 사람들에게는 보통의 책들이 어딘가 부족할 수도 있다. 오늘은 그런 사람들을 위한 책을 하나 소개해볼까 한다.









알고리즘 산책 : 수학에서 제네릭프로그래밍까지





먼저 책의 목차를 살펴보자.



1. 이 책에 관하여

2. 첫 번째 알고리즘

3. 고대 그리스의 정수론

4. 유클리드의 알고리즘

5. 근대 정수론의 시초

6. 수학에서의 추상화

7. 제네릭 알고리즘 유도 방법

8. 기타 대수 구조

9. 수학 지식 체계화 과정

10. 기초 프로그래밍 개념

11. 순열 알고리즘

12. GCD 확장

13. 실전 응용

14. 결론

15. 읽을거리


부록 A. 표기법

부록 B. 일반적 증명 기법

부록 C. C++의 기초

부록 D. 참고 문헌




이 책은 그런 사람들을 위해 수학적인 내용을 바탕으로 알고리즘과 제네릭 프로그래밍으로 확장하는 방식으로 책을 썼다. 어떤 부분이 최적화에서 이득을 볼 수 있는지, 제네릭 프로그래밍과의 연관성이 무엇인지 서술하여 다른 책에서는 찾기 힘든 내용들을 주로 다루고 있다.


부록은 책에서 다루는 내용에 대해서 최소한의 필요 지식을 채워주는 내용들로 구성되어 있다. 표기법, 증명 기법, C++ STL 등의 내용 등, 독자가 처음 접할 수도 있는 내용에 대해 간단히 다루고 있다.





책에서 요구하는 수학의 수준이 고등학생과 대학생의 수준에서 크게 벗어나지 않을 것이라고 이야기는 했으나, 보편적인 고등학생들에게는 고대 그리스 정수론까지가 한계일 것 같고, 그 이후부터는 조금 어려울 수 있다. 이는 전적으로 독자의 수준에 달려 있는 문제일 것이며 책에서도 다소 어렵다고 느껴지는 부분들은 크게 중요하지 않으니 넘어가도 좋다.(고 이야기하고 있다.)


책에서 처음 언급되는 인물들이나 이야기에 대해서는 간략한 스토리가 적혀 있다. 책에 수학 공식과 C++ 코드만 있어서 지루할 수도 있다고 판단해서 넣은 것인지는 몰라도 중간중간 머리를 식히기에 딱 좋은 양과 내용이다.


역사적인 수학자들이 증명한 것들을 툭 던져주고 이를 코드로 구현하는 게 전부가 아니고, 그것들을 체계화하고 최적화하면서 코드를 발전시키는 방향으로 책을 써나가려고 노력한 모습이 보였다.


간간이 연습문제의 형식을 통해서 앞에서 배운 내용들이나 사실들에 대해서 증명하는 문제들이 있는데, 수학이라면 이골이 나는 사람이라면 시작부터 거부감이 느껴질 수도 있겠으나, 이들 문제를 풀어보면 앞의 내용들을 확실히 짚고 넘어갈 수 있을 것 같다.






부록에 C++ 내용이 들어있는 것을 보고 눈치가 빠른 사람이라면, 이 책의 모든 코드들이 C++로 작성되었음을 알아차렸을 것이다. 부록에는 C++을 모르거나, C++의 문법적인 내용 정도는 알지만 STL(Standard Template Library;표준 템플릿 라이브러리)이나 함수에 대해서 잘 모르는 사람들을 위해서 이것들에 설명을 대략적으로 작성해놨다. 이를 적극 활용하면 코드를 이해하는데 크게 어려움이 없을 것으로 보인다.




이 책의 저자인 알렉산더 A. 스테파노프는 C++의 STL을 설계한 사람이다. STL을 설계한 사람을 통해 수학과 프로그래밍에 대해 이야기를 들을 수 있는 것은 더없이 좋은 기회가 아닐까 싶다. 특히 결론 부분에 적은 내용이 꽤나 인상적이다. 제네릭 프로그래밍에 많은 기여를 한 저자이다 보니까, 수학과 밀접한 알고리즘을 최적화시키는 과정 같은 것들이 제네릭 프로그래밍의 핵심과 유사하다고 이야기하며 제네릭 프로그래밍에 대한 본인의 생각을 써놨으니 한 번 읽어보는 것도 괜찮다.


프로그래밍에 관심이 없는 사람들은 수학적 지식의 확장에 틀을 맞추면 좋을 것이고, 프로그래밍 쪽에 몸을 담고 있는 사람이라면 수학적으로 지식의 확장이나 체계화가 알고리즘과 제네릭 프로그래밍과 어떤 부분에서 관계가 깊은지 알아보는 방향으로 책을 읽으면 좋을 것 같다. 이 책을 잘 읽고서 본질을 깨닫게 되면 좀 더 체계적이고 최적화된 프로그램을 작성할 수 있으리라 생각한다.


728x90

'기타 > 기타' 카테고리의 다른 글

사이트맵  (0) 2018.09.29
[책] 양과 질을 한 곳에, C언어 코딩 도장  (0) 2018.04.29
사이트맵  (0) 2018.04.05
스마트카(Smart Car) 정리  (0) 2018.03.26
넥슨] 넥슨 로그인 기록 확인하기  (31) 2017.07.08