jicjj***
2018-07-25

이 책은 컴퓨터과학을 공부하거나 기술 인터뷰를 준비하는 소프트웨어 개발자를 위한 실용적인 책입니다. 자료구조와 알고리즘을 빠르게 배울 수 있도록 실용적이고 중요한 부분을 중점으로 설명합니다. 자료구조가 어떻게 동작하는지보다 어떻게 활용하는지에 초점을 맞추었습니다.
200p가 되지 않는 얇은 책이기 때문에 부담없이 읽을 수 있는 책입니다. 물론 한 언어의 알고리즘이란 주제로 200p라면 모든 내용을 담지 못하기 때문에, 중요한 내용들을 잘 응축해 놓았겠죠?! 그 중에서도 중요하거나 괜찮은 내용이 들은 챕터를 위주로 리뷰를 해보겠습니다.
알고리즘에 대한 자세한 설명 전, List와 List를 implements한 ArrayList, LinkedList를 가지고 Casting에 대한 매우 간략한 (주로 Downcasting 에 대한)설명이 나옵니다. 인터페이스를 왜 쓰는지 아는건 중요한 일이죠.
제목은 ArrayList지만, ArrayList의 구성 요소들 (get, equals, remove, removeAll 등등...)을 보여주고, LinkedList를 설명해준다. (음...? chap4가 LinkedList인데 여기서 나오네...?)
chapter의 제목을 조금 바꿔야할 것 같네요... chap4에서는 ArrayList와 LinkedList(add 메서드의)의 성능 비교를 합니다. 몇개를 add할 때, 얼마나 걸리는지를 구한 뒤, 수식을 통해 어떤 결과가 나오는 지 확인할 수 있습니다.
LinkedList의 앞, 뒤에 Element가 추가될 때의 성능을 비교하고, 이중 연결 리스트에서 같은 연산에서 어떤 자료구조가 효율적인지 확인해봅니다.
검색 엔진 (검색 엔진은 크롤링 / 인덱싱 / 검색으로 이루어짐)을 주제로 [위키트리의 본문의 제일 첫 소문자 링크를 클릭하고 이어지는 기사에서도 이를 반복하다 보면 마지막 글은 철학에 도달하게 된다] 라는 추측을 테스트 해 봅니다. 깊이 우선 탐색을 Iterator로 반복하여 탐색하는 구조에 대해 설명하는데, 짧게 설명하다보니 생략된 부분이 많아 내용을 모르고 보는 초보자들에게는 조금 어려울 수 있을 것 같네요. 반복적인 트리 순회로 크롤러를 만드는 챕터입니다.
인덱서란 검색어가 다수라면 이들의 집합을 분석하고, 검색어를 바탕으로 관련성 높은 페이지를 추리는 작업을 합니다. 콜렉션, 맵이 이에 알맞는 자료구조지만 이 중 속도면에서는 맵이 더 빠르기에, 맵을 이용해 인덱서를 구성해봅니다.
가장 많이 사용하는 자료구조 중 하나인 Map입니다. 반복적이고 단순한 구조인 LinearMap에 대해 설명되어 있습니다.
Map 인터페이스를 해시값으로 구현한 해싱입니다. 반복으로 키에 매핑되는 값을 구해내는 LinearMap과는 달리, 해시된 키를 이용하여 값을 구하는 방법입니다.
해시맵에서도 O(n)구조를 벗어날 수 없었기에, 조금 더 빠른 구조인 TreeMap이 나왔습니다. (O(logn)) 이 TreeMap에 사용된 이진 탐색 트리 구조가 어떤 것인지, 또 다른 트리구조엔 어떤것이 있는지 알아봅니다.
이번 리뷰 도서는 조금... 애매합니다. 주관적으로 생각하기에는 난이도가 고르지 못한 느낌이었고, chapter의 제목이 내용과 매치되지 않는 부분이 존재했습니다. 문장들이 이해하긴 쉬웠지만 조금 다듬어야 될 것 같습니다.
이번 리뷰는 여기서 마치겠습니다.
감사합니다.