서브메뉴

본문

알고리즘으로 생각하기
알고리즘으로 생각하기
저자 : 양성봉
출판사 : 생능출판
출판년 : 2022
ISBN : 9788970505299

책소개

이 책에서는 효율적인 알고리즘을 소개하기 전에 먼저 문제 해결을 위한 다양한 생각을 해보고 문제점을 짚어보면서 효율적인 알고리즘에 접근하는 단계를 두었다. 문제 해결을 위해 이렇게 다양한 방법을 생각해보는 시도는 새로운 문제를 해결할 때 많은 도움을 줄 것이다.
소개된 알고리즘들보다 효율적인 알고리즘이 있는 경우, 이에 대한 설명을 생략하였다. 이들을 언급하지 않은 이유는 이에 관한 설명 자체가 독자들이 알고리즘의 핵심 아이디어를 파악하는 것을 방해하고 대다수의 경우 컴퓨터 전공 지식이 필요하므로 독자들에게 적지 않은 부담감을 주기 때문이다.
대부분 알고리즘의 경우 파이썬 프로그램을 제공하였고, 프로그램에 대한 간략한 설명도 추가하였다. 프로그램은 알고리즘의 각 단계가 어떻게 파이썬 언어로 구현되는지를 확인하고, 사용된 자료구조도 프로그램 내에서 어떤 역할을 하는지 이해하는 데 도움을 줄 것이다. 또한 주어진 문제들에 대해 자료구조 연산이나 알고리즘의 효율성을 나타내는 수행 시간 분석을 간소화하였다.
[교보문고에서 제공한 정보입니다.]

출판사 서평

Part 1 알고리즘으로 생각하기에 앞서
알고리즘이 무엇인가를 알아보고, 알고리즘의 수행 시간의 분석 및 점근 표기법을 소개하며, 이 책에 수록된 파이썬 프로그램을 이해하는 데 필요한 파이썬 언어의 기본 지식에 대해 살펴본다.

Part 2 순환과 기본적인 자료구조
알고리즘과 자료구조의 관계와 자료구조의 필요성을 알아보고, 알고리즘 또는 프로그램에서 사용되는 함수가 함수 자신을 호출하는 순환(recursion)을 설명하고, 단순 연결 리스트, 스택, 큐, 이진 트리, 이진 힙, 그래프 등의 기본 자료구조를 소개한다.

Part 3 나누어 풀어보기
분할 정복(Divide-and-Conquer) 알고리즘으로 해결되는 n-비트 이진수 곱하기, 퀵 정렬, 합병 정렬, K번째 작은 수, 가장 가까운 두 점 찾기에 대한 알고리즘들을 설명한다.

Part 4 욕심내어 풀어보기
그리디(Greedy) 알고리즘은 하향식(top-down) 방식으로 최적화(최댓값 또는 최솟값을 찾는) 문제를 해결하는 알고리즘이다. 구간 스케줄링(Interval Scheduling), 구간 분할(Interval Partitioning) 문제, 초 증가 순서(Super Increasing Sequence), 최소 신장 트리, 최단 경로, 허프만 코딩을 해결하기 위한 그리디 알고리즘을 각각 소개한다.

Part 5 작은 것들부터 풀어보기
가장 긴 증가 순서, 벨만-포드(Bellman-Ford) 최단 경로 알고리즘, 서열 정렬(Sequence Alignment), 합이 최대 K 되는 숫자, 배낭 문제를 해결하기 위한 동적 계획(Dynamic Programming) 알고리즘을 소개한다.

Part 6 되돌아가며 풀어보기
해를 찾는데 지수 시간이 소요되는 N P-완전 문제들 을 해결하는 백트래킹(B ack tracking)과 분기 한정(Branch-and-Bound) 알고리즘을 소개한다. 이 Part에서는 그래프 색칠하기, 여왕 말 문제, 합이 K 되는 숫자, 배낭 문제를 차례로 다룬다.

Part 7 근사하게 풀어보기
대표적인 NP-완전 문제들에 대한 근사해를 찾는 근사 알고리즘(Approx imation Algorithms)들을 소개한다. 이 Part에서는 외판원 문제, 집합 커버, 통 채우기, 합이 최대 K 되는 숫자 문제를 다룬다.

부록
파이썬 메모리, 단순 연결 리스트를 위한 파이썬 프로그램, 마스터 정리, NP-완전 문제들이 설명된다.
[교보문고에서 제공한 정보입니다.]

목차정보

PART 01 알고리즘으로 생각하기에 앞서
1.1 알고리즘이란?
1.2 수행 시간의 점근적 표현
1.3 파이썬의 기본 지식
■ 요약
■ 연습문제

PART 02 순환과 기본적인 자료구조
2.1 순환
2.2 단순 연결 리스트
2.3 스택과 큐
2.4 이진 트리와 이진 힙
2.5 그래프
■ 요약
■ 연습문제

PART 03 나누어 풀어보기
3.1 n-비트 이진수 곱하기
3.2 퀵 정렬
3.3 합병 정렬
3.4 K번째 작은 수
3.5 가장 가까운 두 점
■ 요약
■ 연습문제

PART 04 욕심내어 풀어보기
4.1 태스크 스케줄링
4.2 초 증가 순서
4.3 최소 신장 트리
4.4 최단 경로
4.5 허프만 코딩
■ 요약
■ 연습문제

PART 05 작은 것들부터 풀어보기
5.1 가장 긴 증가 순서
5.2 벨만-포드(Bellman-Ford) 최단 경로 알고리즘
5.3 서열 정렬
5.4 합이 최대 K 되는 숫자
5.5 배낭 문제
■ 요약
■ 연습문제

PART 06 되돌아가며 풀어보기
6.1 그래프 색칠하기
6.2 여왕 말 문제
6.3 합이 K 되는 숫자
6.4 배낭 문제
■ 요약
■ 연습문제

PART 07 근사하게 해결하기
7.1 외판원 문제
7.2 집합 커버
7.3 통 채우기
7.4 합이 최대 K 되는 숫자 문제
■ 요약
■ 연습문제

부록
I. 파이썬 메모리
II. 단순 연결 리스트 파이썬 프로그램
III. 마스터 정리(Master Theorem)
IV. NP-완전 문제
[교보문고에서 제공한 정보입니다.]