부록: Ⅰ. 파이썬 메모리 ; Ⅱ. 이중 피벗 퀵 정렬 ; Ⅲ. Tim Sort 외 참고문헌(p. 406-407)과 색인 수록
연계정보
외부기관 원문
목차보기
PART 01 자료구조를 배우기 위한 준비 1.1 자료구조와 추상 데이터 타입 1.2 수행 시간의 분석 1.3 수행 시간의 점근 표기법 1.4 파이썬 언어에 대한 기본 지식 1.5 순환 요약 연습문제
PART 02 연결 리스트 2.1 단순 연결 리스트 2.2 이중 연결 리스트 2.3 원형 연결 리스트 요약 연습문제
PART 03 스택과 큐 3.1 스택 3.2 스택의 응용 3.3 큐 3.4 데크(Deque) 요약 연습문제
PART 04 트리 4.1 트리 4.2 이진 트리 4.3 이진 트리의 연산 4.4 이진 힙 요약 연습문제
PART 05 탐색 트리 5.1 이진 탐색 5.2 이진 탐색 트리 5.2.1 탐색 연산 5.2.2 삽입 연산 5.2.3 최솟값 찾기 5.2.4 최솟값 삭제 연산 5.2.5 삭제 연산 5.3 AVL 트리 5.3.1 AVL 트리의 회전 연산 5.3.2 삽입 연산 5.3.3 삭제 연산 5.4 2-3 트리, 레드 블랙 트리 5.4.1 2-3 트리 5.4.2 레드 블랙 트리 5.5 B-트리 5.5.1 탐색 연산 5.5.2 삽입 연산 5.5.3 삭제 연산 5.5.4 B-트리의 확장 요약 연습문제
PART 06 해시 테이블 6.1 해시 테이블 6.2 해시 함수 6.3 개방 주소 방식 6.3.1 선형 조사 6.3.2 이차 조사 6.3.3 랜덤 조사 6.3.4 이중 해싱 6.4 폐쇄 주소 방식 6.5 기타 해싱 6.6 해시 방법의 성능 비교 요약 연습문제
PART 07 정렬 7.1 선택 정렬 7.2 삽입 정렬 7.3 쉘 정렬 7.4 힙 정렬 7.5 합병 정렬 7.6 퀵 정렬 7.7 기수 정렬 7.8 외부 정렬 요약 연습문제
PART 08 그래프 8.1 그래프 8.1.1 그래프 용어 8.1.2 그래프 자료구조 8.2 그래프 탐색 8.2.1 깊이 우선 탐색 8.2.2 너비 우선 탐색 8.3 기본적인 그래프 알고리즘 8.3.1 연결 성분 찾기 8.3.2 위상 정렬 8.4 최소 신장 트리 8.4.1 Kruskal 알고리즘 8.4.2 Prim 알고리즘 8.4.3 Sollin 알고리즘 8.5 최단 경로 알고리즘 8.5.1 Dijkstra 알고리즘 8.5.2 Floyd-Warshall 알고리즘 요약 연습문제
부록 Ⅰ. 파이썬 메모리 Ⅱ. 이중 피벗 퀵 정렬 Ⅲ. Tim Sort Ⅳ. 정렬의 하한 Ⅴ. Cut Property
이용현황보기
(파이썬과 함께하는) 자료구조의 이해 = Data structures with Python 이용현황 표 - 등록번호, 청구기호, 권별정보, 자료실, 이용여부로 구성 되어있습니다.
등록번호
청구기호
권별정보
자료실
이용여부
0002948845
005.73 -22-7
서울관 서고(열람신청 후 1층 대출대)
이용가능
0002948846
005.73 -22-7
서울관 서고(열람신청 후 1층 대출대)
이용가능
출판사 책소개
파이썬은 누구나 쉽게 접근할 수 있는 프로그래밍 언어이다. 파이썬은 다른 언어에 비해 간단하여 읽기 쉽고, 수많은 응용 패키지들이 이미 개발되어 있으므로 파이썬 기본 라이브러리 혹은 외부 라이브러리에 포함된 패키지나 모듈을 불러서 사용할 수 있는 언어이다. 일반적으로 컴퓨터 교과과정의 자료구조를 교육할 때는 C-언어, C++ 언어, 혹은 자바 언어로 기본적인 자료구조들을 구현하도록 하여 그 자료구조들의 이해를 돕고 있다. 이러한 언어들은 컴퓨터 분야 전공자들에게 있어 반드시 익혀야 할 언어이지만 오히려 언어 자체가 장벽이 되어 자료구조의 이해를 어렵게 만드는 경우가 종종 발생한다. 하지만 파이썬은 다른 언어들과는 달리 컴퓨터의 기본 지식 없이도 쉽게 프로그래밍을 할 수 있고 이러한 파이썬의 쉬운 접근성은 자료구조에 대한 이해를 더 쉽게 도와준다. 컴퓨터 전공 교과과정에서 자료구조는 아무리 강조해도 지나치지 않을 만큼 중요한 필수과목이다. 여러 프로그래밍 언어를 잘 이해하고 구사할 수 있더라도 자료구조에 대한 기본지식 없이 실제 응용을 위한 효율적인 소프트웨어를 작성하는 데는 한계가 있기 때문이다. 이 책은 필자가 다년간의 강의 경험을 바탕으로 자료구조의 이해에 있어 가장 기본적이고 공통된 부분을 발췌, 정리된 주제와 동시에 비교적 최신 주제인 좌편향(Left-Leaning) 레드 블랙 트리, Tim Sort와 이중 피벗 퀵 정렬(Dual Pivot Quick Sort)을 포함하고 있으며, 대부분의 자료구조에 대해 파이썬으로 구현된 프로그램을 제공한다. 이 책은 연결 리스트, 스택, 큐, 트리 앞부분은 기본적인 개념 위주로 설명하고, 자료구조의 핵심이라 할 수 있는 탐색 트리, 해시 테이블, 정렬, 그래프에 대해 보다 상세히 다루며, 새로운 자료구조를 추가로 소개한다.
이 책의 특징
독자들의 쉬운 이해를 위해 대부분의 자료구조를 다음의 다섯 단계에 따라 설명한다. 1. 주어진 자료구조에 대한 이해 2. 핵심 아이디어 소개 3. 예제 4. 파이썬 프로그램 5. 수행 시간 분석
기본적으로 각 자료구조의 필요성을 소개하고, 자료구조를 이해하는데 도움이 되는 핵심 아이디어를 살펴본다. 또한 자료구조에 대한 예제를 통해 이해를 도우며, 파이썬(Python 3) 프로그램으로 구현한 자료구조를 제시하고, 수행 시간을 분석한다. 아울러 자료구조의 응용 및 활용 분야를 살펴보고, 대부분의 파이썬 프로그램을 PyCharm 통합 개발 환경에서 실제로 실행시킨 결과 화면 또한 보여준다. 단, 몇몇 자료구조들에 대한 프로그램은 너무 길어 생략하였고 개념 위주로 서술하였다 개정판에는 230여 개의 객관식과 주관식 연습문제가 추가되었고, 대부분 각 Part의 내용에 대한 정확한 이해를 확인할 수 있도록 출제되었다. 적지 않은 수의 문제는 IT 기업의 입사 인터뷰 문제로도 손색없고, 또 기출 문제들도 포함되어 있다.
이 책의 내용
Part 1 자료구조를 배우기 위한 준비에서는 자료구조와 추상 데이터 타입, 수행 시간의 분석, 수행 시간의 점근 표기법, 파이썬 언어의 기본 지식, 그리고 순환에 대해 살펴본다. 단, 본서에서 다루는 파이썬 언어의 기본 지식은 본서에 제공된 파이썬 프로그램을 이해하기 위해 필요한 파이썬의 일부 구문, 함수 등만을 포함하고 있다. Part 2 리스트에서는 단순 연결 리스트, 이중 연결 리스트, 원형 연결 리스트를 설명한다. 또한 메모리 효율적인 이중 연결 리스트를 소개한다. Part 3 스택과 큐에서는 스택, 큐, 데크 자료구조를 다룬다. Part 4 트리에서는 일반적인 트리, 이진 트리, 이진 트리에서의 순회 및 기타 기본적인 연산, 이진 힙을 각각 소개한다. Part 5 탐색 트리에서는 이진 탐색 트리, AVL 트리, 2-3 트리, 레드 블랙 트리, B-트리를 소개하며, 특히 이진 탐색 트리, AVL 트리는 파이썬 프로그램을 통하여 상세히 설명한다. Part 6 해시 테이블에서는 해시 함수, 충 돌 해결 방법으로 선형 조사, 이차 조사, 랜덤 조사, 이중 해싱, 체이닝을 배우고, 새로운 충돌 해결 방식인 2-방향 체이닝(Two-Way Chaining), 뻐꾸기 해싱(Cuckoo Hashing)을 소개하며, 재해싱과 동적 해싱을 각각 살펴본다. Part 7 정렬에서는 기본적인 정렬 알고리즘인 선택 정렬, 삽입 정렬을 다루고, 이보다 효율적인 쉘 정렬, 합병 정렬, 퀵 정렬, 힙 정렬을 살펴보며, 특정 환경에서 사용되는 기수 정렬과 외부 정렬을 소개한다. 또한 비교적 최근에 소개되었고 자바의 시스템 정렬로 활용되는 이중 피벗 퀵 정렬(Dual Pivot Quick Sort)과 파이썬, 자바 SE 7 이후 버전, 안드로이드의 시스템 정렬로 채택된 Tim Sort는 부록에서 소개한다. Part 8 그래프에서는 깊이 우선 탐색, 너비 우선 탐색을 공부하고, 기본적인 그래프 알고리즘인 연결 성분 찾기와 위상 정렬에 대해 살펴본다. 또한 Kruskal, Prim, Sollin의 최소 신장 트리 알고리즘을 소개하고, Dijkstra와 Floyd-Warshall 최단 경로 알고리즘을 소개한다. 부록에서는 파이썬 메모리를 살펴보며, 이중 피벗 퀵 정렬(Dual Pivot Quick Sort)과 Tim Sort를 살펴보며, 정렬 문제의 하한을 알아보고, 최소 신장 트리 알고리즘들이 항상 정확한 해를 찾는 지를 Cut Property의 증명을 통하여 알아본다.