책 소개
요약
알고리듬에 관한 파이썬 기반의 광범위한 입문서다. 야구공을 잡는 방법을 결정하는 데 도움이 되는 인간의 알고리듬, 머신 러닝과 인공 지능에 사용되는 것과 같은 고급 알고리듬, 숫자를 곱하고, 최대 공약수를 찾고, 마방진을 생성하는 데 사용하는 고대의 알고리듬 등 검색, 정렬 및 최적화를 위한 세상에서 가장 흥미로운 많은 알고리듬을 탐색하게 될 것이다. 또한 순수 수학에 유용한 알고리듬을 탐색하고 수학적 아이디어가 어떻게 알고리듬을 개선할 수 있는지 배운다.
이 책을 통해 작업하면서 파이썬 3에서 알고리듬을 코딩하고 구현하는 방법과 성능을 측정하고 최적화하는 방법을 포함해서 오늘날 가장 강력한 많은 알고리듬의 핵심 세부 사항을 배울 수 있을 것이다.
이 책에서 다루는 내용
◆기하학적 애플리케이션에 사용할 보로노이 다이어그램 생성하기
◆알고리듬을 사용해 간단한 챗봇을 구축하고, 보드 게임에서 승리하고, 스도쿠 퍼즐을 풀기
◆함수의 최대값과 최소값을 찾기 위한 경사 상승과 하강 알고리듬 코드 작성하기
◆모의 담금질(simulated annealing)을 사용해서 전역 최적화 수행하기
◆개인의 특성에 따라 행복을 예측하는 의사 결정 트리 구축하기
◆알고리듬을 사용해서 코드 디버깅, 수익 극대화, 난수 생성하기
◆알고리듬의 효율성과 속도 측정하기
이 책의 대상 독자
이 책은 고등학교나 학부 수준의 알고리듬, 컴퓨터 과학 또는 프로그래밍 입문 수업에 적합하다. 파이썬에 익숙해지길 원하는 개발자나 엔지니어, 컴퓨터 과학의 기초를 더 많이 배우고 알고리듬적으로 사고해서 코드를 개선하는 방법을 배우려는 개발자를 비롯한 여러 유형의 전문가들은 이 책에서 가치 있는 기술을 얻을 수 있을 것이다.
또한 관심을 가진 아마추어들이 읽기에도 적합하다. 알고리듬은 삶의 거의 모든 부분에 영향을 미치고 있다. 이 책을 읽는 사람이라면 주변 세계에 대한 감탄할 만한 최소한의 무언가를 찾을 수 있을 것이다.
이 책의 구성
이 책은 현존하는 모든 알고리듬의 모든 측면을 다루지는 않는다. 단지 소개할 뿐이다. 읽고 나면 알고리듬이 무엇인지 확실히 이해하고, 중요한 알고리듬을 구현하는 코드를 작성하는 방법을 알고, 알고리듬 성능을 판단하고 최적화하는 방법을 이해하게 될 것이다. 또한 현재 전문가들이 사용하는 가장 인기 있는 많은 알고리듬에 익숙해질 것이다. 각 장은 다음과 같이 구성된다.
1장, ‘알고리듬을 사용한 문제 해결’에서는 공을 잡는 방법에 대한 문제를 해결하고, 인간 행동을 지배하는 잠재의식 알고리듬의 증거를 찾고, 알고리듬의 유용성과 설계 방법을 논의한다.
2장, ‘역사 속의 알고리듬’에서는 고대 이집트인과 러시아 농부가 어떻게 숫자를 곱했는지, 고대 그리스인이 최대공약수를 어떻게 찾았는지, 중세 일본 학자들이 마방진을 어떻게 만들었는지 알아보기 위해 세계의 역사를 탐험해본다.
3장, ‘최대화와 최소화’에서는 경사 상승과 경사 하강을 소개한다. 함수의 최댓값과 최솟값을 찾는 이 간단한 방법은 많은 알고리듬의 중요한 목표인 최적화에 사용된다.
4장, ‘정렬과 검색’에서는 리스트를 정렬하고 리스트의 요소를 검색하기 위한 기본 알고리듬을 설명한다. 또한 알고리듬의 효율성과 속도를 측정하는 방법도 소개한다.
5장, ‘순수 수학’에서는 연분수의 생성, 제곱근 계산, 의사 난수 생성 등 순수한 수학적 알고리듬을 다룬다.
6장, ‘고급 최적화’에서는 최적의 솔루션을 찾기 위한 고급 방법인 모의 담금질을 다룬다. 또한 고급 컴퓨터 과학의 표준 문제인 여행하는 외판원 문제도 소개한다.
7장, ‘기하학’에서는 다양한 기하학 애플리케이션에 유용하게 사용할 수 있는 보로노이 다이어그램을 생성하는 방법을 살펴본다.
8장, ‘언어’에서는 공백이 누락된 텍스트에 지능적으로 공백을 추가하는 방법과 구문에서 다음 단어를 지능적으로 제안하는 방법을 논의한다.
9장, ‘머신러닝’에서는 기본적인 머신러닝 방법인 의사결정 트리에 대해 논의한다.
10장, ‘인공지능’에서는 우리와 게임해서 이길 수도 있는 알고리듬을 구현하는 야심 찬 프로젝트로 뛰어든다. <점과> 게임으로 시작해서 성능을 향상할 수 있는 방법을 논의한다.
11장, ‘이 책 이후...’에서는 알고리듬과 관련된 더 고급 작업으로 진행하는 방법을 설명한다. 챗봇을 구축하는 방법과 스도쿠 알고리듬을 생성해 백만 달러를 얻는 방법에 대해 논의한다.
목차
목차
- 1장. 알고리듬을 사용한 문제 해결
- 분석적 접근법
- 갈릴레오 모델
- x 값 구하기 전략
- 내면 물리학자
- 알고리듬적 접근법
- 목으로 생각하기
- 채프먼 알고리듬 적용하기
- 알고리듬으로 문제 해결하기
- 요약
- 분석적 접근법
- 2장. 역사 속의 알고리듬
- 러시아 농부의 곱셈법
- 손으로 RPM 해보기
- 파이썬으로 RPM 구현하기
- 유클리드 알고리듬
- 손으로 유클리드 알고리듬 수행하기
- 파이썬으로 유클리드 알고리듬 구현하기
- 일본 마방진
- 파이썬으로 낙서 마방진 생성하기
- 파이썬으로 쿠루시마 알고리듬 구현하기
- 요약
- 러시아 농부의 곱셈법
- 3장. 최대화와 최소화
- 세율 설정
- 올바른 방향으로 가는 단계
- 단계를 알고리듬으로 전환하기
- 경사 상승에 대한 반대 의견
- 로컬 극값 문제
- 교육과 평생 소득
- 교육 언덕 등반 - 올바른 길
- 최대화에서 최소화로
- 일반적인 언덕 등반
- 알고리듬을 사용하지 말아야 할 경우
- 요약
- 세율 설정
- 4장. 정렬과 검색
- 삽입 정렬
- 삽입 정렬에 삽입 기능 넣기
- 삽입을 통한 정렬
- 알고리듬 효율성 측정
- 효율성을 목표로 하는 이유
- 정확한 시간 측정
- 단계 계산
- 잘 알려진 함수와의 비교
- 좀 더 이론적인 정밀도 추가
- 빅 오 표기법 사용
- 병합 정렬
- 병합
- 병합에서 정렬까지
- 수면 정렬
- 정렬에서 검색까지
- 이진 검색
- 이진 검색의 응용
- 요약
- 삽입 정렬
- 5장. 순수 수학
- 연분수
- 파이의 압축과 통신
- 연분수에 대한 부연 설명
- 연분수 생성 알고리듬
- 소수에서 연분수로
- 분수에서 거듭제곱근으로
- 제곱근
- 바빌론 알고리듬
- 파이썬의 제곱근
- 난수 생성기
- 무작위성의 가능성
- 선형 합동 생성기
- PRNG 판정
- 무작위성에 대한 다이하드 테스트
- 선형 피드백 시프트 레지스터
- 요약
- 연분수
- 6장. 고급 최적화
- 외판원의 삶
- 문제 설정
- 머리 vs 체력
- 최근접 이웃 알고리듬
- 최근접 이웃 검색 구현
- 추가 개선사항 확인
- 욕심 많은 사람을 위한 알고리듬
- 온도 함수 소개
- 모의 담금질
- 알고리듬 튜닝
- 주요 문제점 회피
- 리셋 허용
- 성능 테스트
- 요약
- 외판원의 삶
- 7장. 기하학
- 우체국장 문제
- 삼각형 101
- 대학원 수준의 고급 삼각형 연구
- 외심 찾기
- 그리기 기능 향상
- 델로네 삼각분할
- 델로네 삼각분할의 점진적 생성
- 델로네 삼각분할 구현
- 델로네에서 보로노이까지
- 요약
- 8장. 언어
- 언어 알고리듬이 어려운 이유
- 공백 삽입
- 단어 리스트 정의 및 단어 찾기
- 합성어 처리
- 잠재적인 단어의 기존 공백 확인
- 가져온 말뭉치를 사용해 유효한 단어 확인
- 잠재적인 단어의 전반부와 후반부 찾기
- 구문 완성
- 토큰화 및 n 그램 가져오기
- 전략
- n + 1그램 후보 찾기
- 빈도에 따른 구절 선택
- 요약
- 9장. 머신러닝
- 의사결정 트리
- 의사결정 트리 구축
- 데이터 세트 다운로드
- 데이터 살펴보기
- 데이터 분할
- 더 똑똑한 분할
- 분할 변수 선택
- 깊이 추가
- 의사결정 트리 평가
- 과적합 문제
- 개선
- 랜덤 포레스트
- 요약
- 10장. 인공지능
- 라 피포피펫
- 보드 그리기
- 대표 게임
- 득점
- 게임 트리와 게임에서 승리하는 방법
- 트리 만들기
- 게임 승리 전략
- 개선사항 추가
- 요약
- 11장. 이 책 이후…
- 알고리듬으로 더 많은 작업 수행하기
- 챗봇 구축
- 텍스트 벡터화
- 벡터 유사도
- 더 잘하고 빨라지기
- 야심 찬 사람을 위한 알고리듬