본문 바로가기

출간 도서 소개

7. 코드와 그림으로 마스터하는 알고리즘

 

[제목]
코드와 그림으로 마스터하는 알고리즘

[부제]
이 정도는 알아야만 Google에서 일할 수 있다!


저자: 이상진
출판사: 남가람북스
발행일: 2016-11-02
ISBN: 979-11-954845-6-0
가격: 28000
페이지: 508
판형: 182*232*22
바코드: 9 791195 484560 93000

[상세 페이지]

 

[저자 소개]
핸디소프트와 삼성 SDS에서 개발자로 근무하였으며 현재는 (주)소만사에서 기업용 보안 소프트웨어를 개발하고 있습니다.
머신 러닝 기반의 검색 및 추천 알고리즘으로 서울대학교에서 박사 학위를 받았고 저서로는 《자료구조 입문》, 《열혈강의 C 언어 정복 리얼 교과서》, 《정보 보안 가이드북》 등이 있습니다.

[책 소개]
이 책은 알고리즘을 통해 여러분의 개발 실력을 향상시키는 최선의 해결책을 제시합니다. 이 책은 기능을 구현하는 방법에 대한 질문에 알고리즘이라는 해답을 제시합니다.

알고리즘이 여러분의 고민에 명쾌한 답이 될 수 있도록 다음 2가지에 집중합니다.

#. 분명한 개념 전달
알고리즘을 완벽히 이해하는 것은 물론 쉽지 않습니다. 알고리즘은 파헤치면 파헤칠수록 깊고 넓은 분야이기 때문입니다. 알고리즘의 이러한 특성으로 많은 분이 알고리즘의 핵심이 아닌 주변부 내용 때문에 알고리즘이 이해하기 어렵다고 이야기합니다.
따라서 불필요한 부분을 모두 제외하고 알고리즘의 가장 중심이 되는 개념만을 정확하게 전달하기 위해 노력했습니다. 또한, 그림으로 다소 어렵게 느껴질 수 있는 개념 설명을 시각화하였으며 설명을 간결화하여 이해도를 높였습니다.

#. 알고리즘의 실제 구현
알고리즘의 개념을 이해했더라도 실제 소스 코드로 구현하지 못한다면 알고리즘을 제대로 이해했다고 보기 어렵습니다. 소스로 구현되지 못한 알고리즘은 실제 동작이 불가능하기 때문입니다.
이 책은 각 알고리즘의 예제 소스를 제시할 뿐 아니라 알고리즘의 개념이 실제 소스로 어떻게 구현되었는지 글과 그림을 통해 설명하였습니다. 따라서 독자 여러분이 책의 설명을 따라서 직접 소스를 입력하고 실행하는 과정 가운데 알고리즘이 동작하는 개념을 보다 빨리 이해할 수 있을 것입니다.
지면 관계상 생략된 일부 소스는 남가람북스 홈페이지에서 다운로드 받을 수 있습니다.

이 책의 대상 독자는 알고리즘을 프로그램 개발에 사용하려는 분들입니다. 이분들은 C 언어와 같은 프로그래밍 언어와 자료구조를 어느 정도 알고 있는 학생일 수 있습니다.
혹은 개발자 취업 준비생이거나 정체된 개발 실력으로 고민하고 있는 경력 개발자일 수도 있습니다.

 

[출판사 리뷰]
이 책은 C 언어를 기본 구현 언어로 사용합니다. 따라서 C 언어에 대한 기초 문법과 개발 도구인 Visual Studio 혹은 XCode의 간단한 사용 방법을 익힌 분들이라면 충분히 이 책을 시작할 수 있습니다.
또한, 기본적인 자료구조(리스트, 스택, 큐 등)를 어느 정도 알고 있다고 가정합니다. 그래서 알고리즘의 설명에 꼭 필요한 사항이 아닌 이상 자료구조 자체에 대한 설명은 최소화하였습니다.

#. 누구를 위한 책인가요?

- 소프트웨어 개발에 관심 있거나 배우고 있는 고등학생, 대학생, 대학원생
- 개발 현장에서 일하고 있으며 알고리즘에 대해 알고 싶어하는 개발자
- IT 기업의 면접을 준비하고 있는 개발자

#. 이 책의 구성

1장 들어가며
알고리즘을 시작하기 전에 기본 지식을 배우는 부분입니다. 알고리즘의 개념 및 이 책에서 다루는 알고리즘의 종류와 성능 평가 방법 등을 다룹니다.

2장 정렬 알고리즘
알고리즘 중에서 가장 기본이 되는 정렬 알고리즘을 배웁니다. 선택 정렬을 먼저 배우고 이보다 효율적인 퀵 정렬과 병합 정렬을 소개합니다.

3-4장 검색 관련 알고리즘
3장과 4장에 걸쳐 찾고자 하는 자료를 빨리 검색하는 문제에 대한 알고리즘을 배웁니다. 3장에서는 계산을 통해서 자료를 찾는 해시 검색 알고리즘을, 4장에서는 검색 키 값을 비교하여 자료를 찾는 균형 검색 트리를 배웁니다. 이 책에서는 균형 검색 트리 중에서도 B-트리에 대해서 살펴보겠습니다.

5장 그래프 관련 알고리즘
5장에서는 그래프 자료구조를 활용한 알고리즘들을 살펴봅니다. 이러한 알고리즘 중에서 가장 대표적인 최단 경로를 구하는 알고리즘과 최소 신장 트리를 구하는 알고리즘을 배웁니다. 최단 경로 문제를 크게 시작점이 하나인 경우와 여러 개인 경우로 나눠 각 경우에 대한 대표적인 알고리즘으로 다이크스트라 알고리즘, 플로이드 알고리즘을 다룹니다. 아울러, 최소 신장 트리를 구하는 알고리즘으로는 크루스칼 알고리즘과 프림 알고리즘을 살펴보겠습니다.

6장 탐욕 알고리즘
6장에서는 문제의 각 단계에서 최선의 선택을 하여 문제를 해결하는 비교적 단순한 탐욕 알고리즘을 배웁니다. 또한, 동전 거스름돈 문제, 부분 배낭 문제, 압축 문제에 탐욕 알고리즘을 적용하여 실제 알고리즘으로 문제를 해결하는 방식을 살펴보겠습니다.

7장 분할 정복 알고리즘
7장에서는 하나의 큰 문제를 여러 개의 하위 문제로 쪼개서 차례로 해결하는 분할 정복 알고리즘을 배웁니다. 또한, 가장 가까운 두 점 찾기 문제와 연쇄 곱셈 행렬 문제에 분할 정복 알고리즘을 적용하여 실제 알고리즘으로 문제를 해결하는 방식을 살펴보겠습니다.

8장 동적 계획법
8장에서는 분할 정복 알고리즘과 같이 큰 문제를 작게 쪼개서 기존에 구한 값을 재활용하는 동적 계획법을 배웁니다. 또한, 동전 거스름돈 문제, 0-1 배낭 문제, 편집 거리 문제에 동적 계획법을 적용하여 실제 알고리즘으로 문제를 해결하는 방식을 살펴보겠습니다.

9장 백트래킹 알고리즘
9장에서는 문제의 답을 찾을 때까지 모든 가능성을 시도해 보는 백트래킹 알고리즘을 배웁니다. 또한, 외판원 문제, 8퀸 문제, 미로 문제에 백트래킹 알고리즘을 적용하여 실제 알고리즘으로 문제를 해결하는 방식을 살펴보겠습니다.


[목차]

서문

이 책을 보는 방법
이 책의 구성
이 책의 구성 요소
학습 로드맵

01  들어가며

1.1. 이 책에서 다루는 알고리즘
1.2. 알고리즘의 성능 평가
1.2.1 시간 복잡도
1.2.2 점근적 표기: 빅-오 표기법
1.2.3 점근적 표기의 다른 방법들

02 정렬 알고리즘

2.1. 정렬의 개념
2.2. 정렬 알고리즘의 종류
2.3. 선택 정렬
2.3.1 선택 정렬의 과정
2.3.2 선택 정렬의 구현
2.3.3 선택 정렬의 특성
2.4. 퀵 정렬
2.4.1 퀵 정렬의 과정
2.4.2 퀵 정렬의 구현
2.4.3 퀵 정렬의 특성
2.5. 병합 정렬
2.5.1 병합 정렬의 과정
2.5.2 병합 정렬의 구현
2.5.3 병합 정렬의 특성
2.6. 연습 문제

03 해시

3.1. 해시의 개념
3.1.1 해시 함수
3.1.2 해시 검색
3.1.3 해시 검색의 과정
3.2. 해시 함수
3.2.1 나머지(제산: Division) 함수
3.2.2 접기(접지: Folding) 함수
3.2.3 중간 제곱 함수(Mid-square function)
3.2.4 숫자 분석 기반의 해시 함수
3.3. 첫 번째 충돌 해결 방법: 개방 주소법
3.3.1 선형 조사법
3.3.2 제곱 조사법
3.3.3 이중 해시
3.4. 해시 테이블의 추상 자료형
3.5. 해시 검색의 첫 번째 구현: 개방 주소법 사용
3.5.1 해시 테이블의 생성
3.5.2 자료 추가
3.5.3 자료 검색
3.5.4 자료 제거
3.5.5 기타
3.6. 두 번째 충돌 해결 방법: 체이닝
3.7. 해시 테이블의 두 번째 구현: 체이닝 사용
3.7.1 해시 테이블의 생성
3.7.2 자료 추가
3.7.3 자료 검색
3.7.4 자료 제거
3.8. 해시 검색의 성능 분석
3.8.1 키 값 밀도
3.8.2 적재 밀도
3.9. 연습 문제

04 균형 검색 트리

4.1. 이진 검색 트리
4.2. 다원 검색 트리
4.3. B-트리
4.4. B-트리의 연산
4.4.1 B-트리에서의 자료 추가
4.4.2 B-트리에서의 자료 제거
4.4.3 예제: 자료 추가 및 제거
4.5. B-트리의 구현
4.5.1 B-트리 생성
4.5.2 검색 연산
4.5.3 자료 추가
4.5.4 자료 제거
4.5.5 기타
4.6. 간단한 형태의 B-트리
4.6.1 2-3 트리
4.6.2 2-3-4 트리
4.7. B-트리의 변형
4.7.1 B+트리
4.7.2 B*트리
4.8. 연습 문제

05 그래프

5.1. 그래프 자료구조
5.2. 최단 경로 구하기
5.2.1. 하나의 시작점에서 구하기: Dijkstra(다이크스트라) 알고리즘
5.2.2 모든 시작점에서 경로 구하기: Floyd(플로이드) 알고리즘
5.2.3 도달 가능성 구하기
5.3. 최소 비용 신장 트리
5.3.1 신장 트리란?
5.3.2 최소 비용 신장 트리란?
5.3.3 크루스칼(Kruskal) 알고리즘
5.3.4 프림(Prim) 알고리즘
5.4 연습 문제

06 탐욕 알고리즘

6.1. 탐욕 알고리즘의 개념
6.2. 동전 거스름돈 문제
6.2.1 탐욕 알고리즘의 적용
6.2.2 탐욕 알고리즘의 구현
6.3. 부분 배낭 문제
6.3.1 탐욕 알고리즘의 적용
6.3.2 탐욕 알고리즘의 구현
6.4. 허프만 코딩
6.4.1 탐욕 알고리즘의 적용
6.4.2 탐욕 알고리즘의 구현
6.5. 연습 문제

07 분할 정복 알고리즘

7.1. 이진 검색을 통해 알아보는 분할 정복 알고리즘
7.2. 팩토리얼 문제
7.3. 가장 가까운 두 점 찾기 문제
7.3.1 분할 정복 알고리즘의 적용
7.3.2 분할 정복 알고리즘의 구현
7.4. 연쇄 행렬 곱셈 문제
7.4.1 연쇄 행렬 곱셈 문제란?
7.4.2 분할 정복 알고리즘의 적용: 행렬이 4개인 경우
7.4.3 일반적인 경우에 분할 정복 알고리즘의 적용
7.4.4 분할 정복 알고리즘의 구현
7.5 연습 문제

08 동적 계획법

8.1. 피보나치 수열로 알아보는 동적 계획법
8.2. 동전 거스름돈 문제
8.2.1 분할 정복법의 적용과 구현
8.2.2 동적 계획법의 적용
8.2.3 동적 계획법의 구현
8.3. 0-1 배낭 문제
8.3.1 분할 정복법의 적용과 구현
8.3.2 동적 계획법의 적용
8.3.3 동적 계획법의 구현
8.4. 편집 거리 문제
8.4.1 분할 정복법의 적용과 구현
8.4.2 동적 계획법의 적용
8.4.3 동적 계획법의 구현
8.5 연습 문제

09 백트래킹 알고리즘

9.1. 외판원 문제
9.1.1 백트래킹의 적용
9.1.2 백트래킹의 구현
9.2. 8퀸 문제
9.2.1 백트래킹의 적용
9.2.2 백트래킹의 구현
9.3. 미로 문제
9.3.1 백트래킹의 적용
9.3.2 백트래킹의 구현
9.4 연습 문제

연습문제 정답

찾아보기