[서평] 쉽게 배우는 알고리즘
저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다.
<읽은기간>
2021/03/25 ~ 2021/05/12
<리뷰 순서>
1) 책의 표지
2) 단원별 구성
3) 읽은소감
우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다.
Q 이 책을 읽기 전에 필요한 수준/ 지식은?
=> 이책은 알고리즘을 깊게 설명해주는 책 이다. 기본적인 자료구조에 대한 충분한 이해가 필요하다.
더 나아가 이미 알고리즘을 어느정도 접해본 분이라면 더욱 배워갈점이 많은 책 이다.
Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까?
=> 단순 코딩테스트 준비로 문제를 많이 푸는것 또한 도움이 되기는 하겠지만, 장기적으로 보았을때 창의적인 코드와 더 나아가 어려운 문제들을 해결하기 위한 사고력을 위해 기본적인 알고리즘 공부는 필수라고 생각된다. 전공자라면 필수적으로 공부해야하는 분야라 생각된다.
Q 이 책을 읽은후 추후 공부는?
=> 이론을 접했으니 많은 문제를 풀어봐야 할 것 같다. 지금도 인프런에서 구매한 문제풀이 강좌를 듣고 있으며, 이를 다 들은 후부터는 우리나라에서 알고리즘 책으로 유명한 종만북을 구매하여 공부해 나갈 예정이다.
1. 책의 표지
표지 디자인의 경우 심플한 디자인이며, 과하지 않은 인상을 주는것 같다. 이정도 표지면 독자가 봤을때 일단 집어볼만한 디자인 이라 생각된다. 아 물론 나의 주관적인 심플한 디자인 기준에 만족은 못하지만, 그렇다고 이상한 디자인은 아닌것 같아 크게 흠잡을 부분은 없다고 생각된다.
2. 단원별 구성
목차 및 구성요소
쳅터는 총 14장 까지 있다. 다음 사진은 쳅터별 공부의 순서및 방향을 보여주는 페이지 이다.
또한 각 쳅터마다의 통일된 구성을 보여줌으로써 좀더 체계적인 구성을 보여준다.
항상 쳅터의 시작전에 Preview를 통하여 독자의 흥미를 유발해주며, 삽화와 도해 자료를 통해 내용을 읽어 나가면서 추상적이였던 부분을 좀더 구체화 시켜줬으며, 이후 연습 문제를 통해 재확인 가능하였다. 다만 연습문제의 경우 답이 없어 구글링하여 찾아야 했다.
특히 난 Drift 부분에 좋았다. 그중에서도 튜링의 정지문제에 관한 글을 재미있게 읽었다.
9장 동적프로그래밍
전 쳅터중에서 9장을 기준으로 책의 리뷰를 작성하여 보겠다.
항상 쳅터의 시작에 앞서 역사적 인물들이 말했던 내용이나, 해당 쳅터에 관련된 흥미유발의 내용들을 한 페이지에 보여주고 있다.
이런 부분이 마음에 들었다. 대략적인 한 쳅터의 스케치를 간단하게 할수있기 때문이다.
간단한 스케치가 끝났다면 이번에는 전반적인 틀을 잡을 시간이다.
각 쳅터의 1장에서는 전체적인 구조를 보여준다.
예를 들어 9장 DP 에서는 DP라는 개념이 왜 나오게 된 것 인지? 기존의 재귀호출 방식에는 어떠한 문제가 있었는지?
중복 호출이 문제라면 이를 어떻게 해결해 나갈 것 인지? 등 DP 이론의 핵심부터 나열하고 있다.
각 문제에 적용되는 이론 내용과, 접근 또 sudo코드를 통하여 어떻게 해결해 나가야 하는지 자세하게 설명해 준다.
이후 쳅터의 내용이 끝나면 가벼운 요약 파트가 있다. 해당 쳅터의 내용이 어려울 수록 요약이 적었던것 같다. 이는 당연한것이 NP-완비 나 DP같은 어려운 내용을 몇줄로 요약하기는 힘든것 같다.
이후 연습문제를 통해 해당 쳅터의 내용을 보충하고 점검할 수 있다.
다만 나는 어느순간부터 풀지 않았는데, 일단 내용이 추상화 되고 어려워 질수록 이론을 받아들이는 점에 중점을 두었으며, 내용을 다 이해하였다 해도 연습문제가 쉽게 풀리지 않아 시간이 너무 걸린다는 단점이 있었다.
더 나아가 해답이 없어 내가푼 풀이가 맞는지 검증 불가능 하기 때문에 풀지 않았다.
마지막으로 모든 쳅터마다 있던것은 아니지만 가끔 쳅터마다 drift라는 부분이 있었는데 이 부분들의 내용이 재미있는 내용이 많았다.
특히 나는 위의 사진에 나온 튜링의 정지문제가 매우 흥미롭게 다가왔다.
튜링이 진짜 비상하다 느낀점중 하나가 프로그램이B가 자기 스스로 프로그램B를 입력으로 받는 점이 독득하다 생각되었다.
프로그램이 프로그램을 입력으로 받을 생각은 왜한걸까? 란 의문이 들었다.
3. 읽은소감
▶ 장점
장점은 알고리즘에 대한 깊은 이해를 할수있었다는 점 이다. 이론에 충실한 책이라 특정 언어를 사용해서 구현해 주지는 않지만, 논리적으로 sudo코드들을 보여주기 때문에 언어에 무관하게 구현이 가능하다는 장점이 있다.
설명또한 자세하다 처음보면 어려운것 같은 부분도 일단 읽다보면 그에대한 부연 설명이 항상 나온다. 가령 Big-O 표기법의 엄밀한 수학적 표현을 보면 처음에는 무슨 의미이지? 라는 생각이 들지만, 이를 설명하는 내용이 있다. 다른 부분에서도 마찬가지로 이런 부가적 설명이 있기에 내요을 받아들일 수 있었다.
학부에서 다룰만한 내용의 알고리즘은 모두 다루며, 더 나아가 다차원 검색 트리같은 학부 이상의 내용도 가끔은 담겨 있다. 이런 부분은 흥미롭게 읽고 넘어가면 되는것 같다. 이책 한권만 여러번 더 읽으면 알고리즘은 매우 친근해질 것 이다.
책을 펼치면 각종 수학적 기호나 문자들 때문에 책이 어려울것 같아 접는 독자가 있다면 해주고 싶은 말이 있다.
책의 중간 부터 봐서 모르거나, 표현이 어색한 것 이다. 1장 부터 빼먹지 않고 한장한장 나아가면 뒤에서 나오는 수학적 접근이나, 각종 표기법이 익숙해 지고 이해하는대 방해되지 않는다. 처음부터 읽어보지 않고 지레 겁먹는 분이 없었으면 한다.
추가적으로 알고리즘 은 원래 어려운 내용이다. 어려운 내용을 가볍고, 내용을 빼가며 책을 만들면 이해하기는 쉬워지지만 중간에 빠진 내용들이 많아진다. 이런 점에서 이책은 어려운 내용을 충분하게 담았기에 쉬운책이라고는 말하지 못하겠다. 하지만 필요한 책이다. 공부할수 있다면 읽어보길 권한다.
▶ 단점
단점이 딱 2개 있다.
단점1 : 가끔 읽다보면 좀 뜬금없는 전계 이어진다. 어느정도 알고리즘을 알거나 경험이 있다면 생각을 계속해서 이를 알아내어 추후 진행이 가능하지만, 완전 초보자 라면 좀 중간 중간 설명이 가끔 부족하다는 생각이 들수도 있다.
나또한 어느정도 자료구조와 알고리즘에 익숙한 상태지만 가끔 읽다보면 "갑자기 왜이렇게 된거지?" 란 의문이 약 6번 정도는 든것 같다. 이정도의 의문은 스스로 읽어가며 해결이 가능했다.
단점2 : Matroid(매트로이드) 에 대한 설명이 어렵다....
이책 통틀어 NP-완비도 재미있게 이해하였고, 외판원 문제(TSP) 등등 중요한 문제들의 이론은 다 이해할수 있었다.
하지만 매트로이드에 한해서는 첫 한페이지를 읽는데 너무 이해가지 않아서 뒤로 나아갈 수가 없었다. 혼자 강의를 찾아보고 싶었지만... 유튜브에도 관련된 내용이 적어 아직 공부못한 상태로 남겨두었다...
쉽게 배우는 알고리즘이라는 책의 제목을 보고 입문서 라고 생각하면 큰 오산이다. 내용이 매우 심오하다. 나처럼 이악물고 읽을 분들에게 깊은 이해를 선사해줄 책 이다. 너무 겁먹지 말고 시간을 들여 읽는다면 큰 도움이 되는 책임은 분명하다!