파이썬으로 배우는 자료 구조 핵심 원리
핵심 개념과 동작 원리로 이해하는 자료 구조
이 책은 자료 구조를 좀 더 쉽게 공부하기 위해 단순히 자료 구조의 구현에 집중하기보다는 “인덱스는 어떻게 작동하기에 데이터베이스의 성능을 좋게 만들 수 있을까?”라는 한 가지 질문을 던져 놓고 이 질문의 답을 찾아가는 과정을 담았다. 모든 자료 구조를 다루진 않지만 이 과정에서 다룰 수 있는 여러 가지 자료 구조를 배우며, 개념을 확장해 나가는 방식으로 설명한다. 빅오, 재귀 함수에서부터 다양한 그래프 알고리즘까지 그림 184개로 필수 자료 구조의 핵심 개념을 익힌 후 파이썬으로 구현한 코드도 직접 확인하고 실행해 볼 수 있다. 또한, 실제 자료 구조를 어디에 어떻게 활용할 수 있는지도 엿볼 수 있다.
목차
- 1장 재귀 함수
- 1.1 재귀 함수: 자신을 호출하는 신기한 함수
- 1.1.1 재귀 함수로 팩토리얼 구현하기
- 1.1.2 스택 프레임으로 재귀 함수 이해하기
- 1.1.3 순열을 재귀 함수로 구현하기: 재귀 트리 사용하기
- 2장 성능 분석
- 2.1 자료 구조 성능 이야기: 빅오
- 2.1.1 알고리즘 성능 분석
- 2.1.2 성능을 비교하는 방법: 빅오
- 2.1.3 방심은 금물!: 빅오의 함정
- 2.2 추상 데이터 타입이란
- 3장 배열: 변수가 한곳에 모여 있으면 빠르다!
- 3.1 동적 배열이란
- 3.2 지역성의 원리와 캐시
- 3.3 인덱싱: 데이터에 빠르게 접근한다!
- 3.4 동적 배열에서 데이터의 삽입과 삭제 1
- 3.5 동적 배열에서 데이터의 삽입과 삭제 2
- 4장 연결 리스트: 삽입과 삭제를 빠르게 할 수 없을까?
- 4.1 연결 리스트 이해하기
- 4.2 동적 배열과 연결 리스트
- 4.3 더미 이중 연결 리스트
- 5장 스택과 큐, 그리고 덱
- 5.1 스택: 데이터를 차곡차곡 쌓는다
- 5.1.1 스택 구현: 동적 배열을 이용하여 구현하기
- 5.2 큐: 데이터로 줄 세우기
- 5.2.1 큐 구현 1: 동적 배열을 단순하게 사용해서 구현하기
- 5.2.2 큐 구현 2: 원형 큐로 구현하기
- 5.3 덱: 스택으로도 큐로도 사용할 수 있는 덱
- 6장 그래프: 관련 있는 데이터 연결하기
- 6.1 그래프 용어 정리
- 6.2 그래프를 표현하는 두 가지 방법: 도시와 도시를 이어 보자
- 6.3 그래프의 모든 노드 방문: 모든 도시를 여행해 보자
- 6.3.1 너비 우선 탐색: 인근 도시부터 여행하기
- 6.3.2 깊이 우선 탐색: 한 방향으로 쭉 따라 여행하기
- 7장 트리: 정말 쓸 데가 많은 자료 구조
- 7.1 트리 용어 정리
- 7.2 이진 트리의 순회: 모든 노드 방문하기
- 7.2.1 전위 순회
- 7.2.2 중위 순회
- 7.2.3 후위 순회
- 7.2.4 레벨 순서 순회
- 8장 다양한 트리 1: 이진 탐색 트리
- 8.1 이진 탐색 알고리즘
- 8.2 딕셔너리의 내부 구현
- 8.3 이진 탐색 트리
- 8.4 이진 탐색 트리의 구현
- 8.5 이진 탐색 트리의 단점
- 9장 다양한 트리 2: 레드 블랙 트리
- 9.1 어떻게 균형을 맞출 것인가?
- 9.2 레드 블랙 트리
- 9.3 레드 블랙 트리의 구현
- 10장 다양한 트리 3: B 트리
- 10.1 메모리 계층 구조
- 10.2 데이터베이스에 데이터 삽입, 탐색, 삭제해 보기
- 10.3 B 트리
- 10.4 B 트리에 키 삽입·삭제하기
- 10.5 B+ 트리
- 10.6 B 트리로 인덱스 만들기
- 11장 다양한 트리 4: 힙과 우선순위 큐
- 11.1 힙
- 11.2 우선순위 큐
- 12장 다양한 그래프 알고리즘 1: 위상 정렬
- 12.1 위상 정렬
- 13장 다양한 그래프 알고리즘 2: 최소 비용 신장 트리
- 13.1 탐욕 알고리즘
- 13.2 크루스칼 알고리즘
- 13.2.1 그래프의 표현
- 13.2.2 분리 집합: 사이클이 형성되는지 어떻게 확인하지?
- 13.2.3 크루스칼 알고리즘 구현
- 13.3 프림 알고리즘
- 13.3.1 가중치가 가장 작은 에지를 찾는 방법
- 13.3.2 프림 알고리즘 구현
- 14장 다양한 그래프 알고리즘 3: 최단 경로
- 14.1 데이크스트라 알고리즘
- 14.2 BFS와 프림 알고리즘, 그리고 데이크스트라 알고리즘
- 15장 자료 구조가 적용된 실제 사례
- 15.1 생산자 -소비자 패턴: 큐
- 15.2 자바스크립트 엔진: 스택과 큐