-
반응형
Hello Coding 그림으로 개념을 이해하는 알고리즘 -
아디트야 바르가바 지음, 김도형 옮김/한빛미디어컴퓨터 개발을 하면서 알고리즘을 학습하는 것은 매우 중요하다. 너무 오래전에 배워서 이미 잊혀진 것들이 있을 수 있지만 개발을 하다보면 다시 알고리즘을 학습해야하는 순간은 종종 찾아온다.
- 앱을 통해서 택시와 나를 연결해주고 싶다. 어떻게 현재 위치에서 가까운 기사들에게 알림을 보낼 수 있을까?
- 웹 브라우저의 뒤로가기/앞으로가기는 어떻게 구현해야 하는 걸까?
- 영화 추천 서비스는 어떻게 나에게 영화를 추천해주는 걸까?
이렇듯 꾸준히 학습을 해야하는 알고리즘은 시중에 책들이 많이 나와 있다. C/C++로 된 책부터 Java, Python까지 다양한 언어로 알고리즘에 대한 학습 서적이 이미 나와있다. 하지만 이런 책들을 구매해서 끝까지 본 책은 얼마나 있을까? 알고리즘은 중요하지만 생각보다 쉽지는 않다.
이 책의 첫 페이지를 보면 책의 목표가 명확히 나와 있다. '쉽고', '재미있게', '끝까지' 책을 읽게 하는 것이다. 쉽고 재미있게 그리고 끝까지 책을 읽게 한다는 점에서 매우 공감한다. 내용은 쉽게 잘 풀어나갔고 기술적인 이야기 또한 잊지 않은 책이라고 말하고 싶다. 책을 처음부터 끝까지 읽는데 5시간 정도 걸렸다. 내용이 어렵지 않기 때문에 몰입만 한다면 대부분 하루안에 볼 수 있을 것이다.
이 책은 그림을 통해서 쉽게 설명하고 있을 뿐 아니라 놓치기 쉬운 부분들을 잘 알려주고 있다. 예를 들면 빅오에 대한 것인데, 빅오는 몇가지 사실을 알고 있어야 이상한 결론에 빠져들지 않게 된다. 아래 내용은 "4장 퀵정렬" 내용을 일부 요약한 것이다.
- 빅오 표기법에서 시간복잡도는 평균을 이야기할 수 있다.
- 퀵 정렬은 최악의 경우 O(N 제곱)이니 느린편이잖아!라고 오해할 수 있겠지만 평균적으로는 O(NlogN)이다. best, worst, average 이렇게 3가지로 고민해볼 수 있음.
- 빅오 표기법은 가끔 상수가 중요해질수 있다.
- O(N), O(logN) 에 대해서 코드로 작성하여 테스트 해보면 상수 때문에 성능이 비슷하게 보일 수 있다. 하지만 상수를 고려할 수 있는 수준은 데이터가 얼마 없을 때이다. 데이터가 100억개 가까이 된다고 가정을 해보면 정확한 알고리즘 성능을 보여준다.
공간 복잡도에 대한 이야기는 없지만 시간 복잡도만 따지고 본다면 초보자를 이해시키는데 부족함이 없다.
이 책의 장점 중에 한 가지는 알고리즘 문제를 어떻게 활용해야 하는지 설명해주고 있다는 점이다. 사실 그렇다. 어떤 알고리즘이 있고 어떻게 구현하는지만 알게 되면 잘 활용할 수 없다. 이 책은 매 장마다 문제 상황을 설명하고 알고리즘(또는 자료구조)를 사용해서 어떤 장점을 얻어갈 수 있을지를 설명한다. 책을 몰입하여 읽을 수 있게 도와준다.
아래는 스택에 대한 그림 설명 부분. 마치 선생님이 칠판을 활용하여 직접 설명하고 있는 것처럼 느껴졌다.
매 장 끝부분에 가벼운 팁들이 나온다. 이런 팁들은 개발자들끼리 커뮤니케이션(말빨, 아는척)하는데 큰 도움이 된다고 생각한다. 내용 자체는 전문적이지 않지만 특히 초보자에게는 꽤 쏠쏠한 팁이 될 것이다.
책 마지막장에 KNN 알고리즘이 나온다. 생각보다 내용이 간단하니 KNN 알고리즘을 추가로 찾아보게 되었다. 알고리즘을 계속 학습할 수 있게 해주는 것, 이 책의 장점이다. 여담이지만 KNN 알고리즘과 더 공부해야할 것들에 대한 책이 나왔으면 하는 바람이 있다.
단점을 이야기하면 첫째로 그림과 글자색 때문에 몰입이 잘 되지 않는다. 배경을 빼고 보면 몽땅 파란색이다. 초보자들에게 거부감을 없게 하기 위함인가하는 생각도 들었지만 세련되지 않다고 생각한다. 저자 아디트야 바르가바가 쓴 책 느낌을 살렸으면 어땠을까 하는 생각이 든다.
두번째로 "추가로 공부해야할 것들" 내용이다. 장점에 가까운 내용이었지만 일부는 너무 수박 겉핥기 식으로 적어두었다. 조금 더 자세히 적어둔 내용이 있었으면 하는 아쉬움이 있다.
마지막으로 이 책은 이런 사람들에게 추천한다.
- 알고리즘을 한번도 학습하지 않은 사람
- 알고리즘 책을 사서 수집만 하고 끝까지 읽어본적이 없는 사람
- 알고리즘을 초보자에게 알려주고 싶은 사람
한빛미디어 "나는 리뷰어다" 이벤트에 당첨되어 책을 제공 받았음.
반응형