알기 쉬운 알고리즘 (step-by-step으로 알고리즘 완전 이해 | 개정판)

알기 쉬운 알고리즘 (step-by-step으로 알고리즘 완전 이해 | 개정판)

$29.70
Description
컴퓨터를 전공하는 대부분의 학생들에게 알고리즘의 이해는 만만치 않은 어려움을 주는 것 같다. 필자의 경험에 비추어볼 때, 알고리즘의 어려움은 여러 다양한 경우들을 조목조목 ‘따져보는’ 논리적 검토 과정에서 비롯되는 것으로 보인다. 그러나 실제 알고리즘은 컴퓨터 분야뿐만 아니라 과학, 공학, 경영학 등 광범위한 분야에서 나타나는 많은 중요한 문제들을 해결하는 기본적인 방법들과 직간접적으로 관련되어 있어, 반드시 이해하고 숙달할 필요가 있다.

본서는 필자의 강의 경험을 바탕으로 알고리즘 이해에 있어 가장 기본적이고 공통된 부분을 발췌, 정리하였다. 독자들의 쉬운 이해를 위해 각 알고리즘에 대해 다음의 네 가지 단계를 염두에 두고 설명하였다.

1. 주어진 문제에 대한 이해와 분석
2. 알고리즘의 핵심 아이디어 유추
3. 알고리즘 소개 및 단계별 설명
4. 예제 따라 알고리즘 이해하기

주어진 문제가 어떤 특성을 가졌는지를 분석해보면 그 문제를 해결할 알고리즘을 고안하는 실마리를 찾을 수 있다. 이를 통해 알고리즘의 핵심 아이디어를 유추해보면, 알고리즘을 보다 쉽게 이해할 수 있다. 또한 예제를 통해 알고리즘의 수행과정을 상세히 step-by-step으로 보임으로써 알고리즘을 완전히 이해할 수 있도록 하였다. 아울러 시간복잡도를 분석하고, 알고리즘의 효용성을 위해 알고리즘이 실제로 활용되는 사례들을 설명하였다.
저자

양성봉

연세대학교공과대학,학사
UniversityofOklahoma,컴퓨터과학,석사
UniversityofOklahoma,컴퓨터과학,박사
현재연세대학교컴퓨터과학과교수

목차

CHAPTER01알고리즘의첫걸음
1.1최대숫자찾기
1.2임의의숫자찾기
1.3동전거스름돈
1.4한붓그리기
1.5미로찾기
1.6가짜동전찾기
1.7독이든술단지
■요약
■연습문제

CHAPTER02알고리즘을배우기위한준비
2.1알고리즘이란
2.2최초의알고리즘
2.3알고리즘의표현방법
2.4알고리즘의분류
2.5알고리즘의효율성표현
2.6복잡도의점근적표기
2.7왜효율적인알고리즘이필요한가?
■요약
■연습문제

CHAPTER03분할정복알고리즘
3.1합병정렬
3.2퀵정렬
3.3선택문제
3.4최근접점의쌍찾기
3.5분할정복을적용하는데있어서주의할점
■요약
■연습문제

CHAPTER04그리디알고리즘
4.1동전거스름돈
4.2최소신장트리
4.3최단경로찾기
4.4부분배낭문제
4.5집합커버문제
4.6작업스케줄링
4.7허프만압축
■요약
■연습문제

CHAPTER05동적계획알고리즘
5.1모든쌍최단경로
5.2연속행렬곱셈
5.3편집거리문제
5.4배낭문제
5.5동전거스름돈
■요약
■연습문제

CHAPTER06정렬알고리즘
6.1버블정렬
6.2선택정렬
6.3삽입정렬
6.4쉘정렬
6.5힙정렬
6.6정렬문제의하한
6.7기수정렬
6.8외부정렬
■요약
■연습문제

CHAPTER07NP-완전문제
7.1문제분류
7.2NP-완전문제의특성
7.3NP-완전문제의소개
7.4NP-완전문제들의활용
■요약
■연습문제

CHAPTER08근사알고리즘
8.1여행자문제
8.2정점커버문제
8.3통채우기문제
8.4작업스케줄링문제
8.5클러스터링문제
■요약
■연습문제

CHAPTER09해탐색알고리즘
9.1백트래킹기법
9.2분기한정기법
9.3유전자알고리즘
9.4모의담금질기법
■요약
■연습문제

부록
Ⅰ.순환관계의해구하는방법
Ⅱ.힙자료구조
Ⅲ.매칭
Ⅳ.백트래킹기법과분기한정기법의추가문제
Ⅴ.최신정렬알고리즘과정렬알고리즘의성능비교

출판사 서평

개정판의개선내용

이책은자료구조에대한기본개념을갖춘학부3,4학년학생들을위하여집필되었으나,기술고시,올림피아드와같은경시대회를준비하는학생들에게도도움이될것이다.또한데이터사이언스,전자공학,수학,경영학을전공하는학생들에게는알고리즘을스스로배우고익힐수있는좋은입문서가되리라생각한다.독자들이알고리즘의기본개념을이해함으로써궁극적으로는실세계의어떤문제가주어지더라도그문제를분석하고해결할수있는능력을가질수있게되기를바라는마음이다.

개정판에는비교적최신정렬알고리즘인이중피봇퀵정렬과TimSort를부록V에추가하였으며,정렬알고리즘들의성능비교를표로만들어아울러추가하였다.이중피봇퀵정렬은퀵정렬대신에최신버전의Java언어의원시타입정렬라이브러리로사용되고있으며,TimSort는일반적으로성능이다른정렬알고리즘보다우수하여파이선,안드로이드,Java언어의객체타입정렬라이브러리로사용되고있다.

또한개정판에는200개가넘는새연습문제가추가되었다.그중에각장의연습문제의앞부분에는기본개념파악을위한객관식문제들과입사면접시험에자주등장하는문제들로부터난이도가비교적높은주관식문제들까지추가되었다.

이책의내용

제1장알고리즘의첫걸음
이미우리가알고있는알고리즘들부터수수께끼같이재미있는문제에대한알고리즘들을살펴본다.

제2장알고리즘을배우기위한준비
알고리즘이란무엇인가를알아보고,최초의알고리즘인유클리드의최대공약수알고리즘을소개하며,3장부터다루는알고리즘들을배울준비를위한알고리즘의표현방법,알고리즘의분류,알고리즘의효율성표현방법,복잡도의점근적표기를소개하고,마지막으로왜효율적인알고리즘이필요한가를설명한다.

제3장분할정복알고리즘
분할정복(Divide-and-Conquer)알고리즘으로해결되는문제들을소개하고,그에대한알고리즘들을설명한다.합병정렬(Mergesort),퀵정렬(Quicksort),선택(Selection)문제,최근접점의쌍(ClosestPair)찾기문제를다룬다.

제4장그리디알고리즘
그리디(Greedy)알고리즘은top-down방식으로최적화문제를해결하는알고리즘이다.동전거스름돈(CoinChange),최소신장트리(MinimumSpanningTree),최단경로(ShortestPath),부분배낭(FractionalKnapsack)문제,집합커버(SetCover),작업스케줄링(TaskScheduling),허프만압축(HuffmanEncoding)에대한그리디알고리즘을각각소개한다.

제5장동적계획알고리즘
동적계획(DynamicProgramming)알고리즘은최적화문제를해결하는bottom-up방식의알고리즘이다.모든쌍최단경로(AllPairsShortestPaths),연속행렬곱셈(ChainedMatrixMultiplication),편집거리(EditDistance)문제,배낭(Knapsack)문제,동전거스름돈(CoinChange)문제의동적계획알고리즘을소개한다.

제6장정렬알고리즘
기본적인정렬알고리즘인버블정렬(Bubblesort),선택정렬(Selectionsort),삽입정렬(Insertionsort)을다루고,이보다효율적인쉘정렬(Shellsort)과힙정렬(Heapsort)을살펴보며,특정환경에서사용되는기수정렬(Radixsort)과외부정렬(Externalsort)을소개한다.

제7장NP-완전문제
앞장에서소개된대부분의문제들은다항식시간복잡도의알고리즘으로해결되나,실세계에서많이응용되는중요한문제들은그러하지못하다.이러한문제들중에서대표적인NP-완전문제들을이해하고,그문제들간의관계를살펴본다.

제8장근사알고리즘
지수시간복잡도를가진NP-완전문제들에대한정확한해보다는근사해
(approximationsolution)를찾는알고리즘들을소개한다.이를위해여행자문제(TravelingSalesmanProblem),정점커버(VertexCover)문제,통채우기(BinPacking)문제,작업스케줄링(JobScheduling)문제,클러스터링(Clustering)문제의근사알고리즘을각각알아본다.

제9장해탐색알고리즘
NP-완전문제의해를탐색하기위한다양한알고리즘을소개한다.백트래킹(Backtracking)기법,분기한정(Branch-and-Bound)기법,유전자알고리즘
(GeneticAlgorithm),모의담금질(SimulatedAnnealing)기법을소개한다.