메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

독자리뷰

[자바로 배우는 핵심 자료구조와 알고리즘] 알고리즘과 자료구조 공부! 이 책으로

kianms10***

|

2018-07-15

자바로 배우는 핵심 자료구조와 알고리즘

이 책은 컴퓨터과학을 공부하거나 기술 인터뷰를 준비하는 소프트웨어 개발자를 위한 실용적인 책입니다. 자료구조와 알고리즘을 빠르게 배울 수 있도록 실용적이고 중요한 부분을 중점으로 설명합니다. 자료구조가 어떻게 동작하는지보다 어떻게 활용하는지에 초점을 맞추었습니다.

  • 저자 : 앨런 B. 다우니
  • 번역 : 유동환
  • 출간 : 2018-06-01

<이 책의 리뷰는 한빛미디어 '나는 리뷰어다'로 부터 책을 지원받아 작성된 글입니다.>

 

 

책소개

자료구조와 알고리즘을 활용하여 간단한 웹 검색 엔진 만들기

이 책은 컴퓨터과학을 공부하거나 기술 인터뷰를 준비하는 소프트웨어 개발자를 위한 실용적인 책입니다. 자료구조와 알고리즘을 빠르게 배울 수 있도록 실용적이고 중요한 부분을 중점으로 설명합니다. 자료구조가 어떻게 동작하는지보다 어떻게 활용하는지에 초점을 맞추었습니다. 

이 책은 웹 검색이라는 응용 분야에 집중합니다. 이 분야는 자료구조를 광범위하게 사용하며 자체로도 흥미롭고 중요합니다. 다른 책에서는 보기 어렵지만 기술 인터뷰에 필요한 내용입니다. 또한, 버전 관리와 유닛 테스트 같은 기본적인 소프트웨어 엔지니어링 실무 내용도 다룹니다. 장마다 배운 것을 확인할 수 있는 예제가 있고, 해답을 확인할 수 있는 자동화된 테스트도 제공합니다. 

  • 리스트와 맵 등의 자료구조 사용과 작동 방식 이해하기
  • 위키피디아 페이지를 읽고, 분석하고, 결과 데이터 트리를 탐색하는 응용 프로그램 작성하기
  • 코드를 분석하여 실행시간과 필요한 메모리양 예측하기
  • 해시 테이블과 이진 검색 트리를 사용하여 맵 인터페이스 구현하기
  • 크롤러로 웹 검색 엔진 구축하기

목차

 

CHAPTER 1 인터페이스

_1.1 리스트가 두 종류인 이유 

_1.2 자바 interface 

_1.3 List interface 

_1.4 실습 1 

CHAPTER 2 알고리즘 분석

_2.1 선택 정렬 

_2.2 빅오 표기법 

_2.3 실습 2 

CHAPTER 3 ArrayList 클래스

_3.1 MyArrayList 메서드 분류하기 

_3.2 add 메서드 분류하기 

_3.3 문제 크기

_3.4 연결 자료구조 

_3.5 실습 3 

_3.6 가비지 컬렉션 

CHAPTER 4 LinkedList 클래스

_4.1 MyLinkedList 메서드 분류하기 

_4.2 MyArrayList와 MyLinkedList 비교하기 

_4.3 프로파일 

_4.4 결과 해석하기 

_4.5 실습 4 

CHAPTER 5 이중 연결 리스트 

_5.1 성능 프로파일 결과 

_5.2 LinkedList 메서드 프로파일하기 

_5.3 LinkedList 끝에 더하기 

_5.4 이중 연결 리스트 

_5.5 자료구조 선택하기 

CHAPTER 6 트리 순회

_6.1 검색 엔진 

_6.2 HTML 파싱하기 

_6.3 jsoup 사용하기 

_6.4 DOM 트리 반복하기 

_6.5 깊이 우선 탐색 

_6.6 스택 

_6.7 반복적 DFS 

CHAPTER 7 철학으로 가는 길

_7.1 시작하기 

_7.2 Iterable과 Iterator 

_7.3 WikiFetcher 

_7.4 실습 5 

CHAPTER 8 인덱서

_8.1 자료구조 선택 

_8.2 TermCounter 

_8.3 실습 6 

CHAPTER 9 Map 인터페이스

_9.1 MyLinearMap 구현하기 

_9.2 실습 7 

_9.3 MyLinearMap 분석하기 

CHAPTER 10 해싱

_10.1 해싱 

_10.2 해싱의 동작 방식 

_10.3 해싱과 변형 

_10.4 실습 8 

CHAPTER 11 HashMap 클래스

_11.1 실습 9 

_11.2 MyHashMap 분석하기 

_11.3 트레이드오프 

_11.4 MyHashMap 프로파일링 

_11.5 MyHashMap 클래스 고치기 

_11.6 UML 클래스 다이어그램 

CHAPTER 12 TreeMap 클래스

_12.1 해싱의 문제점 

_12.2 이진 탐색 트리 

_12.3 실습 10 

_12.4 TreeMap 구현하기 

CHAPTER 13 이진 탐색 트리

_13.1 단순한 MyTreeMap 클래스 

_13.2 값 탐색하기 

_13.3 put 메서드 구현하기

_13.4 중위 순회 

_13.5 로그 시간 메서드 

_13.6 자가 균형 트리 

_13.7 추가 실습 

CHAPTER 14 영속성

_14.1 레디스 

_14.2 레디스 클라이언트와 서버 

_14.3 레디스 기반 인덱스 만들기 

_14.4 레디스 데이터 타입 

_14.5 실습 11 

_14.6 추가 제안 

_14.7 설계 힌트 

CHAPTER 15 위키피디아 크롤링

_15.1 레디스 기반의 인덱서 

_15.2 조회 성능 분석 

_15.3 인덱싱 성능 분석 

_15.4 그래프 순회 

_15.5 실습 12 

CHAPTER 16 불리언 검색

_16.1 크롤러 해답 

_16.2 정보 검색 

_16.3 불리언 검색 

_16.4 실습 13 

_16.5 Comparable과 Comparator 

_16.6 확장 

CHAPTER 17 정렬

_17.1 삽입 정렬 

_17.2 실습 14

_17.3 병합 정렬 분석 

_17.4 기수 정렬 

_17.5 힙 정렬 

_17.6 제한된 힙 정렬 

_17.7 공간 복잡도 

 

 

 

 

이번에 리뷰를 하게 된 책은 

자바로 배우는 핵심 자료구조와 알고리즘 - 앨런B.다우니 지음. 유동환 옮김 입니다.

제가 많은 책들 중 책을 선택한 이유는 알고리즘 부분이 부족하다고 생각해서 입니다.

많은 개발 회사에서 코딩 테스트를 진행하고 있는데 그 중 가장 기초적으로 필요한 알고리즘에 대한 개념이 있는 좋은 책이라고 생각됩니다.

그리고 더 중요하게 생각했던 것은 크롤링과 불리언 서치에 대한 목차가 있었기 때문에 책을 선택했습니다.

 

특히, 웹 검색이라는 응용분야에 특화된 책이기 때문에 기초 알고리즘을 원하시는 분들은 다른 책을 찾아보셔야할 것 같습니다!

 

 

일단 기본적인 베이스로는 자바가 필요 합니다. 

자바를 배우기 위해서는 개인적으로

 

- 이것이 자바다 - 신용권(한빛미디어) 

 

책이 괜찮다고 생각합니다. 1권, 2권으로 나눠져있어서 중요하고 어려운 개념을 2권에서 자세하게 다루고 있습니다.

자바 책은 시중에도 많고 인터넷 검색을 통해서도 많은 자료를 찾을 수 있으니 공부하시기 어렵지는 않을겁니다.

 

 

가장 관심있던 두 부분의 목차입니다. 

위키피디아 크롤링의 경우 현재 제가 몸담고 있는 회사에서도 진행하고 있기 때문에 더욱 관심이 갔던 부분인데 무작정 보는 것이 아니라 앞에 나오는 개념들을 이해하고 나서 보면 더욱 쉽게 이해가 가능했습니다.

이 책의 좋은 점은 자주 사용하는 알고리즘이 순차적으로 나오는 겁니다.

예를 들면 C언어로 자주 나오는 연결리스트 들은 엄청 많지만 실제적으로 그 알고리즘은 라이브러리로 구현되어 있기 때문에 개념적인 부분만 알면 되는데 너무 많은 부분을 차지 하는 책들이 많았는데

이 책의 경우 딱 필요하고 자주 쓰는 부분에 대해서 자료구조로 알려주는 부분이 많습니다.

또한, 자료구조에서 중요한 스택, 큐, 트리, 그래프에 대한 개념이 없으니 

완전히 기초적인 알고리즘을 보실 분들은 다른 책으로 공부를 하고 보시는 것도 좋습니다.



 



 

레디스( Redis)는 키-값 데이터베이스이고, 데이터베이스가 포함한 자료구조는 유일한 문자열로 식별되는 데이터 베이스입니다. 웹 검색이라는 응용 분야에 집중되어 있기 때문에 이런 내용들이 나옵니다,.

[ 마무리 ]


웹 검색이라는 부분에서 필요한 자료구조와 알고리즘에 대해 개념을 이해할 수 있게 도와주는 책

 

디자인    ★★★☆☆

내용       ★★★★☆ 

난이도    ★★★☆☆ 

 

 

 

 

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?