프로그래머가 알아야 할 알고리즘 40
현실 세계의 문제를 해결하는 40가지 알고리즘을 배우면서
프로그래머라면 꼭 갖춰야 할 알고리즘 응용력과 문제 해결력을 높이자!
현대 사회에서 개발자와 프로그래머가 갖추어야 하는 필수 소양은 알고리즘을 이용한 문제 해결 능력이다. 이 책은 문제의 성격에 따라 적합한 알고리즘을 소개하고 그 작동 원리를 설명한다. 특히 현실 세계의 문제를 해결하는 40여 개 알고리즘을 보여주면서 그 작동 원리를 이해시키고 파이썬으로 직접 구현해 본다.
«프로그래머가 알아야 할 알고리즘 40»은 4~7장을 공개합니다.
전자책 구입
목차
- - 제 1 부 - 기초와 핵심 알고리즘
- 1장 알고리즘 기초
- 1.1 알고리즘 정의하기
- 1.1.1 알고리즘의 단계
- 1.2 알고리즘의 로직 표현하기
- 1.2.1 의사코드 이해하기
- 1.2.2 스니펫 사용하기
- 1.2.3 실행 계획 생성하기
- 1.3 파이썬 패키지 살펴보기
- 1.3.1 파이썬 패키지
- 1.3.2 주피터 노트북으로 파이썬 사용하기
- 1.4 알고리즘 설계 기법 이해하기
- 1.4.1 데이터 차원
- 1.4.2 연산 차원
- 1.5 성능 분석하기
- 1.5.1 공간 복잡도 분석
- 1.5.2 시간 복잡도 분석
- 1.5.3 성능 추정
- 1.5.4 알고리즘 선택
- 1.5.5 빅오 표기법
- 1.6 알고리즘 검증하기
- 1.6.1 결정론적, 비결정론적 알고리즘과 최적, 근사 알고리즘
- 1.6.2 해석 가능성
- 1.7 요약
- 2장 알고리즘에 사용되는 자료 구조
- 2.1 파이썬 자료 구조 파악하기
- 2.1.1 리스트
- 2.1.2 튜플
- 2.1.3 딕셔너리
- 2.1.4 세트
- 2.1.5 데이터프레임
- 2.1.6 행렬
- 2.2 추상화 자료 유형 파악하기
- 2.2.1 벡터
- 2.2.2 스택
- 2.2.3 큐
- 2.2.4 스택과 큐에 대한 기본 아이디어
- 2.2.5 트리
- 2.3 요약
- 3장 정렬과 검색 알고리즘
- 3.1 정렬 알고리즘 이해하기
- 3.1.1 파이썬에서 변수 바꾸기
- 3.1.2 버블 정렬
- 3.1.3 삽입 정렬
- 3.1.4 병합 정렬
- 3.1.5 셸 정렬
- 3.1.6 선택 정렬
- 3.2 검색 알고리즘 이해하기
- 3.2.1 선형 검색
- 3.2.2 이진 검색
- 3.2.3 보간 검색
- 3.3 활용 사례 - 이민관리청에 접수된 서류 조회하기
- 3.4 요약
- 4장 알고리즘 설계
- 4.1 알고리즘 설계의 기본 개념 살펴보기
- 4.1.1 관점 1 - 설계한 알고리즘이 우리가 기대하는 결과를 출력하는가?
- 4.1.2 관점 2 - 설계한 알고리즘이 결과를 얻을 수 있는 최적의 방법인가?
- 4.1.3 관점 3 - 설계한 알고리즘이 규모가 더 큰 데이터셋을 다룰 수 있는가?
- 4.2 알고리즘 설계 전략 이해하기
- 4.2.1 분할 및 정복 전략 이해하기
- 4.2.2 동적 계획법 이해하기
- 4.2.3 탐욕 알고리즘 이해하기
- 4.3 활용 사례 - 외판원 문제 해결하기
- 4.3.1 무차별 대입 전략 사용하기
- 4.3.2 탐욕 알고리즘 사용하기
- 4.4 페이지랭크 알고리즘 이해하기
- 4.4.1 문제 정의하기
- 4.4.2 페이지랭크 알고리즘 구현하기
- 4.5 선형 계획법 이해하기
- 4.5.1 선형 계획법 문제 정의하기
- 4.6 활용 사례 - 선형 계획법을 활용해 용량 계획하기
- 4.7 요약
- 5장 그래프 알고리즘
- 5.1 그래프 표현 이해하기
- 5.1.1 그래프 유형
- 5.1.2 특수한 유형의 엣지
- 5.1.3 에고 중심 네트워크
- 5.1.4 소셜 네트워크 분석
- 5.2 네트워크 분석 이론 살펴보기
- 5.2.1 최단 경로
- 5.2.2 삼각형
- 5.2.3 밀도
- 5.2.4 중심성 지표 이해하기
- 5.2.5 파이썬으로 중심성 지표 계산하기
- 5.3 그래프 순회 이해하기
- 5.3.1 너비 우선 검색
- 5.3.2 깊이 우선 검색
- 5.4 활용 사례 - 사기 범죄 분석하기
- 5.4.1 간단한 사기 분석 방법
- 5.4.2 감시탑 사기 분석 방법
- 5.5 요약
- - 제 2 부 - 머신러닝 알고리즘
- 6장 비지도 학습 알고리즘
- 6.1 비지도 학습 이해하기
- 6.1.1 데이터 마이닝 사이클에서의 비지도 학습
- 6.1.2 비지도 학습의 최신 연구 트렌드
- 6.1.3 비지도 학습의 활용 사례
- 6.2 클러스터링 알고리즘 이해하기
- 6.2.1 유사도 측정하기
- 6.2.2 계층적 클러스터링 알고리즘
- 6.2.3 클러스터 평가하기
- 6.2.4 클러스터링의 활용 사례
- 6.3 차원 축소 알고리즘 이해하기
- 6.3.1 주성분 분석
- 6.3.2 주성분 분석의 한계
- 6.4 연관 규칙 마이닝 이해하기
- 6.4.1 연관 규칙 마이닝의 활용 사례
- 6.4.2 장바구니 분석
- 6.4.3 연관 규칙
- 6.4.4 평가 척도
- 6.4.5 연관 규칙 마이닝 알고리즘
- 6.5 활용 사례 - 비슷한 트윗끼리 클러스터링하기
- 6.5.1 토픽 모델링
- 6.5.2 클러스터링
- 6.6 이상 탐지 알고리즘 이해하기
- 6.6.1 클러스터링 알고리즘
- 6.6.2 밀도 기반 이상 탐지 알고리즘
- 6.6.3 서포트 벡터 머신 알고리즘
- 6.7 요약
- 7장 전통적인 지도 학습 알고리즘
- 7.1 지도 학습 이해하기
- 7.1.1 지도 학습 구조 소개
- 7.1.2 지도 학습의 필요 조건
- 7.1.3 분류 모델과 회귀 모델 비교하기
- 7.2 분류 알고리즘 이해하기
- 7.2.1 분류 문제 소개
- 7.2.2 분류 모델 평가하기
- 7.2.3 분류 모델 구축 단계
- 7.2.4 결정 트리 분류 알고리즘
- 7.2.5 앙상블 알고리즘
- 7.2.6 로지스틱 회귀 알고리즘
- 7.2.7 서포트 벡터 머신 알고리즘
- 7.2.8 나이브 베이즈 알고리즘
- 7.2.9 분류 알고리즘 비교하기
- 7.3 회귀 알고리즘 이해하기
- 7.3.1 회귀 문제 소개
- 7.3.2 선형 회귀 알고리즘
- 7.3.3 회귀 트리 알고리즘
- 7.3.4 그레이디언트 부스팅 회귀 알고리즘
- 7.3.5 회귀 알고리즘 비교하기
- 7.4 활용 사례 - 날씨 예측하기
- 7.5 요약
- 8장 뉴럴 네트워크 알고리즘
- 8.1 뉴럴 네트워크 이해하기
- 8.2 뉴럴 네트워크의 발전 살펴보기
- 8.3 뉴럴 네트워크 훈련하기
- 8.3.1 뉴럴 네트워크 구조
- 8.3.2 경사하강법
- 8.3.3 활성화 함수
- 8.4 도구와 프레임워크 살펴보기
- 8.4.1 케라스
- 8.4.2 텐서플로 사용하기
- 8.4.3 뉴럴 네트워크의 종류
- 8.5 전이 학습 이해하기
- 8.6 활용 사례 - 딥러닝으로 부정 탐지하기
- 8.6.1 방법론
- 8.7 요약
- 9장 자연어 처리 알고리즘
- 9.1 자연어 처리 살펴보기
- 9.1.1 자연어 처리 용어 이해하기
- 9.1.2 자연어 처리 툴킷
- 9.2 백오브워즈 기반 자연어 처리 이해하기
- 9.3 단어 임베딩 살펴보기
- 9.3.1 단어의 이웃
- 9.3.2 단어 임베딩의 특징
- 9.4 자연어 처리에 리커런트 뉴럴 네트워크 사용하기
- 9.5 자연어 처리를 이용해 감성 분석하기
- 9.6 활용 사례 - 영화 리뷰 감성 분석하기
- 9.7 요약
- 10장 추천 엔진
- 10.1 추천 엔진 살펴보기
- 10.2 추천 엔진 종류 살펴보기
- 10.2.1 콘텐츠 기반 추천 엔진
- 10.2.2 협업 필터링 추천 엔진
- 10.2.3 하이브리드 추천 엔진
- 10.3 추천 엔진의 한계점 이해하기
- 10.3.1 콜드 스타트 문제
- 10.3.2 메타 데이터
- 10.3.3 데이터 희소성 문제
- 10.3.4 사회적 영향력으로 인한 편향
- 10.3.5 제한된 데이터
- 10.4 활용 분야 살펴보기
- 10.5 활용 사례 - 추천 엔진으로 영화 추천하기
- 10.6 요약
- - 제 3 부 - 고급 기법
- 11장 데이터 알고리즘
- 11.1 데이터 알고리즘 살펴보기
- 11.1.1 데이터 분류
- 11.2 데이터 저장 알고리즘 이해하기
- 11.2.1 데이터 저장 전략 이해하기
- 11.3 데이터 스트리밍 알고리즘 이해하기
- 11.3.1 스트리밍 활용 분야
- 11.4 데이터 압축 알고리즘 이해하기
- 11.4.1 무손실 압축 알고리즘
- 11.5 활용 사례 - 트위터 실시간 감성 분석하기
- 11.6 요약
- 12장 암호화
- 12.1 암호화 살펴보기
- 12.1.1 가장 약한 연결고리의 중요성 이해하기
- 12.1.2 기본 용어
- 12.1.3 보안 요구사항 이해하기
- 12.1.4 기본적인 암호 설계 이해하기
- 12.2 암호화 기법의 종류 이해하기
- 12.2.1 암호화 해시 함수 사용하기
- 12.2.2 대칭 암호화
- 12.2.3 비대칭 암호화
- 12.4 요약
- 12.3 활용 사례 - 머신러닝 모델 배포와 관련한 보안 이슈 살펴보기
- 12.3.1 중간자 공격
- 12.3.2 위장 공격
- 12.3.3 데이터와 모델 암호화
- 13장 대규모 알고리즘
- 13.1 대규모 알고리즘 살펴보기
- 13.1.1 대규모 알고리즘 정의
- 13.1.2 기본 용어
- 13.2 병렬 알고리즘 설계 이해하기
- 13.2.1 암달의 법칙
- 13.2.2 작업 세분성
- 13.2.3 부하 분산
- 13.2.4 국지성 이슈
- 13.2.5 파이썬에서 병렬 프로세싱 실행하기
- 13.3 멀티 자원 프로세싱 전략 이해하기
- 13.3.1 컴퓨팅 통합 장치 아키텍처
- 13.3.2 클러스터 컴퓨팅
- 13.3.3 혼합 방법
- 13.4 요약
- 14장 실질적 고려사항
- 14.1 실질적 고려사항 살펴보기
- 14.1.1 AI 트위터 봇의 슬픈 사연
- 14.2 알고리즘의 해석 가능성 이해하기
- 14.2.1 머신러닝 알고리즘과 해석 가능성
- 14.3 알고리즘의 윤리 이해하기
- 14.3.1 학습 알고리즘이 가진 문제
- 14.3.2 윤리적 고려사항 이해하기
- 14.4 모델의 편향 줄이기
- 14.5 NP-난해 문제 다루기
- 14.5.1 문제를 단순화하기
- 14.5.2 널리 알려진 다른 해결책을 수정해 사용하기
- 14.5.3 확률적 모델 사용하기
- 14.6 알고리즘을 사용해야 할 때
- 14.6.1 활용 사례 - 검은 백조 이벤트
- 14.7 요약