Book

[리뷰] 똑똑한 코드 작성을 위한 실전 알고리즘

Linuxias 2022. 6. 26. 14:00
반응형

똑똑한 코드 작성을 위한 실전 알고리즘
조지 하이네만 지음 | 윤대석 옮김 | 한빛미디어
(http://www.yes24.com/Product/Goods/109554881)

알고리즘 서적을 리뷰하는 건 오랜만인 것 같습니다. 대학생, 대학원생 신분을 벗어나 IT 개발자, 직장인으로 살아온 이후로 알고리즘 서적을 읽을 기회는 많지 않았습니다. 현재 담당하고 있는 개발 업무와 관련된 도메인 서적을 읽는 시간이 월등히 많았으니까요, 많은 개발자분들이 그럴거라 생각합니다. (직접적으로 꾸준히 알고리즘 최적화 등의 개발을 하지 않는 한 말입니다.)

이 책의 목차는 다른 알고리즘 도서와 유사합니다. 알고리즘의 문제해결 전략, 복잡도, 성능에 관한 글과 주 자료구조, 알고리즘에 대한 설명입니다. 목차 내용은 크게 아래와 같습니다.

목차

더보기
CHAPTER 1 문제 해결

1.1 알고리즘이란
1.2 리스트에서 가장 큰 값 찾기
1.3 주요 연산 횟수 계산하기
1.4 모델로 알고리즘 성능 예측하기
1.5 리스트에서 가장 큰 두 수 찾기
1.6 토너먼트 알고리즘
1.7 시간 복잡도와 공간 복잡도
1.8 요약
1.9 연습 문제

CHAPTER 2 알고리즘 분석

2.1 경험적 모델로 성능 예측하기
2.2 곱셈 성능 예측하기
2.3 성능 클래스
2.4 점근적 분석
2.5 모든 수행 계산하기
2.6 모든 바이트 계산하기
2.7 이진 배열 탐색
2.8 이진 배열 탐색으로 리스트에서 값 찾기
2.9 이진 배열 탐색의 또 다른 기능
2.10 알고리즘 성능 비교
2.11 곡선 피팅 vs. 상/하한
2.12 요약
2.13 연습 문제

CHAPTER 3 해싱

3.1 키와 연관된 값
3.2 해시 함수와 해시 코드
3.3 (키, 값) 쌍에 대한 해시 테이블 구조
3.4 선형 조사로 충돌 검출 및 해결하기
3.5 연결 리스트를 사용한 분리 연쇄법
3.6 연결 리스트에서 엔트리 삭제하기
3.7 개방 주소법과 분리 연쇄법 평가하기
3.8 동적 해시 테이블
3.9 동적 해시 테이블 성능 분석하기
3.10 완벽한 해싱
3.11 (키, 값) 쌍 순회하기
3.12 요약
3.13 연습 문제

CHAPTER 4 힙

4.1 최대 이진 힙
4.2 (값, 우선순위) 삽입하기
4.3 우선순위가 가장 높은 값 제거하기
4.4 배열로 이진 힙 구성하기
4.5 엔트리 이동의 구현
4.6 요약
4.7 연습 문제

CHAPTER 5 정렬

5.1 교환을 통한 정렬
5.2 선택 정렬
5.3 성능이 O(N2)인 정렬 알고리즘의 구조
5.4 삽입 정렬과 선택 정렬의 성능
5.5 재귀와 분할 정복
5.6 병합 정렬
5.7 퀵 정렬
5.8 힙 정렬
5.9 O(NlogN) 알고리즘의 성능 비교하기
5.10 팀 정렬
5.11 요약
5.12 연습 문제

CHAPTER 6 이진 트리

6.1 시작하기
6.2 이진 탐색 트리
6.3 이진 탐색 트리에서 값 탐색하기
6.4 이진 탐색 트리에서 값 제거하기
6.5 이진 탐색 트리 순회하기
6.6 이진 탐색 트리 성능 분석하기
6.7 자가 균형 이진 트리
6.8 자가 균형 이진 트리 성능 분석하기
6.9 이진 탐색 트리를 (키, 값) 심볼 테이블로 사용하기
6.10 이진 탐색 트리를 우선순위 큐로 사용하기
6.11 요약
6.12 연습 문제

CHAPTER 7 그래프

7.1 그래프로 문제 모델링하기
7.2 깊이 우선 탐색으로 미로 풀기
7.3 너비 우선 탐색으로 미로 풀기
7.4 유향 그래프
7.5 가중치 그래프
7.6 다익스트라 알고리즘
7.7 모든 쌍의 최단 경로 문제
7.8 플로이드-워셜 알고리즘
7.9 요약
7.10 연습 문제

CHAPTER 8 정리

8.1 파이썬 내장 데이터 타입
8.2 스택 구현하기
8.3 큐 구현하기
8.4 힙과 우선순위 큐 구현
8.5 이후 학습

필수로 읽었으면 하는 목차 Chapter 1/2

알고리즘을 학습할 때 많은 분들이 가장 앞 쪽에 있는 서론을 생략하는 경우가 있는 것 같습니다. 간혹 신입개발자 분들과 대화 시 나타나는 상황이 있습니다. 시간복잡도와 공간복잡도에 대해 대화를 하는 경우 복잡도에 대한 건 들어봤지만 정확히 각 알고리즘 별로 어떻게 계산해야하는지 왜 그런 복잡도가 나오는지 잘 모른다는 것입니다. 특히 본인이 작성한 알고리즘에 대해서 복잡도 계산을 하지 못하는 경우가 있었습니다.

어떤 알고리즘은 NLogN 이고, 어떤 알고리즘은 N이다. 라는건 암기를 하고 있지만 왜 그런지에 대한 이해는 부족한 경우가 많았습니다. 자료구조, 알고리즘에 대해 많이 아는 것도 좋지만 현업에서 본인이 작성하는 코드의 시간,공간복잡도에 대해 계산하고 이해하는 능력도 매우 중요하다고 생각됩니다.

그러한 이유로 이 책의 Chapter 1,2 는 꼭 읽으셨으면 좋겠습니다. 특히 그림과 예제로 쉽게 설명이 되어 있으므로 부담갖지 말고 읽으면 좋을 것 같습니다.

그림 예시를 통한 상세한 내용 전달

해시, 힙, 정렬 등 여러 알고리즘을 데이터, 코드 기반으로 이해하기는 초보자에게 어려운 일일 수 있습니다. 이 책을 추천하고 싶은 가장 큰 이유는 그림을 통한 데이터, 알고리즘의 흐름을 쉽게 파악할 수 있다는 것입니다.

위 처럼 스택의 내용을 가시화하여 보여주는 그림입니다. 스택 뿐만 아니라 트리, 정렬 등 다양한 알고리즘의 동작원리를 쉽게 이해할 수 있도록 저자는 많은 내용을 가시화 하여 전달하고 있습니다. 또한 알고리즘의 대한 성능을 표로 객관화하여 보여줍니다. 표로 전달하는 방식은 다른 책에서도 발견할 수 있으나, 파이썬 모듈을 이용한 알고리즘 동작방식에 대해서도 표로 제공해 주고 있다는 점은 파이썬을 이용하여 개발하는 분들에게는 조금 더 도움이 되지 않을까 합니다. (저 같은 경우에는, C++로 코드를 재작성하여 공부하였습니다.)

이 도서를 입문자 분들에게 추천! 연습문제는 꼭 풀자!

입문자분들이 알고리즘,자료구조 도서를 검색 시 많은 서적이 나옵니다. 내용과 그림, 번역까지 모두 깔끔하여 쉽게 읽을 수 있고 Github에서 코드도 제공하기에 테스트 및 공부하기에도 효율적입니다.

특히 제공되는 연습문제는 쉽게 넘어가는 것 보다는 조금 생각해보고 성장할 수 있는 작은 도움이 될 수 있는 문제들입니다. 꼭 생략하지 말고 풀어보면 더욱 좋을 것 같습니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형