- 책 소 개
-
컴퓨터 과학을 다루는 다양한 분야 가운데 가장 핵심적이고 중추적인 역할을 하는 분야를 꼽으라면 단연 알고리즘이다. 이 분야는 다양한 문제 해결을 위한 일반적인 해결 방법의 설계와 분석을 통해 문제 자체에 대한 지식을 길러줄 뿐만 아니라 체계적인 사고가 가능하도록 훈련시켜준다. 따라서 알고리즘에 대한 이해는 오늘날 전방위적으로 활용되는 컴퓨터 과학 분야에서도 가장 기초가 되는 학문이라 할 것이다.
이 책은 대학 강단에서 오랜 기간 컴퓨터 과학과 응용수학을 강의해온 저자가 그간 축적한 경험과 지식을 바탕으로 알고리즘 분야의 가장 일반적이고 핵심적인 내용만을 골라 제공한다. 기존의 책들이 수학적인 기초나 암호 알고리즘, 기하 알고리즘 등을 다루지 않거나 그 내용이 미약하다는 점에 착안, 꼭 알아두어야 할 암호 알고리즘과 기하 알고리즘의 기본적인 정의와 증명까지 폭넓게 다룬 것이 특징이다. 또한 알고리즘을 이루는 기초 개념은 물론, 알고리즘 구축에 필요한 설계 원칙과 예제들을 통해 학생들이 컴퓨터 알고리즘에 대한 탄탄한 기초를 다질 수 있도록 구성되어 있다.
아울러 각 장마다 학생들이 배운 내용과 정의를 응용해볼 수 있는 연습 문제들이 난이도별로 포함되어 있으며, 스스로 프로그래밍을 하면서 배운 내용을 확인할 수 있는 프로그래밍 과제도 제시하여 교재로서 그 기능성을 높였다.
알고리즘 자체가 문제를 푸는 과정에서 탄생된 만큼, 알고리즘에서 가장 중요한 것은 문제 해결을 위한 창의적인 아이디어이다. 저자는 그 창의력이 명쾌하고 정확하게 표현되어야만 알고리즘이 진정한 문제 해결력을 갖게 된다고 강조한다. 따라서 ‘문제 해결을 위한 창의적이고 효율적인’ 방법을 찾아내고 이를 다시 ‘명쾌하고 정확하게 표현하는’ 방법까지 갖춰질 때 비로소 의미 있는 알고리즘이 성립한다. 이 책의 집필 목적은 바로 알고리즘을 공부하는 학생들이 이 두 가지 방법을 모두 갖춘 알고리즘 설계자가 되도록 이끄는 데 있다.▣ 책 내용
1장은 알고리즘을 정의하고 계승과 피보나치 수, 최대공약수를 구하는 여러 알고리즘을 소개한다. 또한 알고리즘의 분석 방법을 몇 가지 예제를 통해 설명한다. 2장부터 4장까지는 전형적인 알고리즘 설계 방식에 대해 각각의 설계 원칙과 다양한 예제를 통해 설명한다. 2장은 분할 정복 방식에 의한 알고리즘 분석 방법과 그 예들에 대해 다루고, 3장에서는 욕심쟁이 방법에 의해 최적 해를 구할 수 있는 문제들을 설명하며 이러한 최적 해의 보장에 대한 증명을 몇 가지 예를 통해 소개한다. 4장은 동적 계획법의 개념과 동적 계획법에 의해 최적 해를 구할 수 있는 다양한 문제, 그에 대한 성질에 대해 설명하고 욕심쟁이 방법과의 차이점에 대해 비교한다.
5장과 6장은 컴퓨터에 의해 문제를 해결할 때 근본적으로 다루기 어려운 문제들을 논한다. 5장에서는 P-문제, NP-문제 및 NP-완전 문제에 대해 정의하고 다양한 예를 살펴본다. 또한 이러한 문제들을 해결하기 위한 근사 알고리즘에 대해 몇 가지 문제를 통해서 고찰해본 다. 6장에서는 NP-완전 문제를 해결하기 위한 백트래킹과 분기 한정에 대해 다양한 예제를 통해 설명한다.
7장부터 10장까지는 알고리즘의 다양한 분야에 대해서 기술한다. 7장에서는 다양한 정렬 알고리즘에 대해서 다루고 있으며 비교 연산을 하는 정렬 문제의 하한선에 대해 증명한다. 8장에서는 순차 탐색, 이진 탐색과 이진 탐색 트리에 관련된 여러 연산들을 다루고 일반적인 선택 문제에 대해 기술한다. 9장에서는 RSA 공개키 암호 알고리즘과 디피-헬먼 키 교환 프로토콜과 함께 그를 뒷받침하기 위한 정수론 기초에 대해 설명하고, 마지막으로 10장에서는 기하 알고리즘으로서 볼록 헐을 구하는 여러 알고리즘과 선분들의 교차 탐지를 위한 평면 일소법 및 분할 정복 방식에 의해 최근접 쌍을 효율적으로 구하기 위한 알고리즘을 설명한다.
- 저자 소개
-
지은이 : 이상호
서울대학교 계산통계학과를 졸업하고, 한국과학기술원(KAIST) 전산학과에서 석사학위와 박사학위를 받았다. 미국 일리노이대학교 컴퓨터과학과 방문교수, 이화여자대학교 공과대학장, BK21 사업단장 및 Post -BK21 사업팀장 등을 역임했다. 현재 이화여자대학교 컴퓨터공학과 교수로 재직 중이다.
- 차 례
-
머리말
1장 알고리즘 소개와 알고리즘 분석
1.1 알고리즘의 정의 | 1.2 소프트웨어 개발과 알고리즘 | 1.3 계승 및 피보나치 수 | 1.4 최대공약수
1.5 알고리즘 분석과 차수 표기법 | 연습 문제 프로그래밍 과제 프로그래밍에 관한 격언 ①
2장 분할 정복 방식
2.1 설계 원칙 | 2.2 순환 방정식 | 2.3 배열의 덧셈 | 2.4 두 정수의 곱셈과 모듈러 지수승 | 2.5 이진 탐색 | 2.6 병합 정렬 | 2.7 퀵 정렬 | 연습 문제 프로그래밍 과제 프로그래밍에 관한 격언 ②
3장 욕심쟁이 방법
3.1 설계 원칙 | 3.2 동전 교환 문제 | 3.3 테이프 장치에서의 최적 공간 배정 문제 | 3.4 분수 배낭 문제 | 3.5 최소 스패닝 트리 | 3.6 최단 경로 문제 | 3.7 허프만 코드 | 연습 문제 프로그래밍 과제 프로그래밍에 관한 격언 ③
4장 동적 계획법
4.1 설계 원칙 | 4.2 이항 계수 | 4.3 최장 증가 부분 수열 | 4.4 숫자 삼각형 | 4.5 최적성의 원리 | 4.6 편집 거리 | 4.7 연속 행렬 곱셈 순서 | 4.8 모든 쌍 최단 경로 | 4.9 욕심쟁이 방법과 동적 계획법 | 연습 문제 프로그래밍 과제 프로그래밍에 관한 격언 ④
5장 NP 이론의 소개와 근사 알고리즘
5.1 P -문제와 NP-문제 | 5.2 문제 변환과 NP-완전 문제 | 5.3 근사 알고리즘 | 연습 문제 프로그래밍 과제 프로그래밍에 관한 격언 ⑤
6장 백트래킹과 분기 한정
6.1 백트래킹 | 6.2 분기 한정 | 6.3 15-퍼즐 문제 | 연습 문제 프로그래밍 과제 프로그래밍에 관한 격언 ⑥
7장 정렬 알고리즘
7.1 정렬의 정의 | 7.2 기본적인 정렬 방법 | 7.3 셸 정렬 | 7.4 힙 정렬 | 7.5 결정 트리와 정렬 문제 복잡도의 하한선 | 7.6 기수 정렬 | 연습 문제 프로그래밍 과제 프로그래밍에 관한 격언 ⑦
8장 탐색 알고리즘
8.1 순차 탐색과 자가조정 리스트 | 8.2 이진 탐색과 변형 알고리즘 | 8.3 정적 트리 탐색 | 8.4 동적 트리 탐색 | 8.5 최대최소값 및 두 번째 큰 값 찾기 | 8.6 일반 선택 문제 | 연습 문제 프로그래밍 과제 프로그래밍에 관한 격언 ⑧
9장 정수 및 암호 알고리즘
9.1 정수론 기초 | 9.2 확장 유클리드 알고리즘 | 9.3 소수와 소수 판정 알고리즘 | 9.4 RSA 공개키 암호 알고리즘 | 9.5 디피-헬먼 키 교환 프로토콜 | 연습 문제 프로그래밍 과제 프로그래밍에 관한 격언 ⑨
10장 기하 알고리즘
10.1 용어와 기본 문제 | 10.2 볼록 헐 | 10.3 선분들의 교차 탐지 | 10.4 최근접 쌍 | 연습 문제 프로그래밍 과제 프로그래밍에 관한 격언 ⑩찾아보기 ∙387