목차
머리말 ... xix
옮긴이 머리말 ... xxix
제1장 기본 개념 ... 1
   1.1 개요 : 시스템 생명 주기 ... 1
   1.2 객체 지향 설계 ... 5
      1.2.1 알고리즘적 분해와 객체지향적 분해 ... 5
      1.2.2 객체지향 프로그래밍의 기본적 정의와 개념 ... 5
      1.2.3 프로그래밍 언어의 발전과 C++의 역사 ... 6
   1.3 데이타 추상화와 캡슐화 ... 7
   1.4 C++의 기초 ... 13
      1.4.1 C++에서의 프로그램의 구성 ... 13
      1.4.2 C++에서의 영역(scope) ... 14
      1.4.3 C++명령문과 연산자 ... 16
      1.4.4 C++의 데이타 선언 ... 16
      1.4.5 C++의 주석문 ... 17
      1.4.6 C++에서의 입출력 ... 18
      1.4.7 C++의 함수 ... 20
      1.4.8 C++의 매개변수 전달 ... 21
      1.4.9 C++의 함수 이름 다중화 ... 22
      1.4.10 인라인 함수 ... 22
      1.4.11 C++의 동적 메모리 할당 ... 23
   1.5 알고리즘 명세 ... 24
      1.5.1 소개 ... 24
      1.5.2 순환 알고리즘 ... 30
   1.6 성능 분석과 측정 ... 36
      1.6.1 성능 분석 ... 36
      1.6.2 성능 측정 ... 62
      1.6.3 테스트 데이타의 생성 ... 70
   1.7 참고문헌 ... 75
제2장 배열 ... 77
   2.1 추상 데이타 타입과 C++ 클래스 ... 77
      2.1.1 C++ 클래스 개요 ... 77
      2.1.2 C++에서의 데이타 추상화와 캡슐화 ... 78
      2.1.3 클래스 객체의 선언과 멤버 함수의 기동 ... 79
      2.1.4 특수 클래스 연산 ... 80
      2.1.5 기타 내용 ... 84
      2.1.6 ADT와 C++클래스 ... 85
   2.2 추상 데이타 타입으로서의 배열 ... 87
   2.3 다항식 추상 데이타 타입 ... 90
      2.3.1 다항식 표현 ... 93
      2.3.2 다항식 덧셈 ... 96
      2.3.3 다항식을 배열로 표현하는 경우의 문제점 ... 98
   2.4 희소 행렬 ... 101
      2.4.1 개요 ... 101
      2.4.2 희소 행렬 표현 ... 103
      2.4.3 행렬의 전치 ... 105
      2.4.4 행렬 곱셈 ... 109
      2.4.5 희소 행렬을 배열로 표현하는 경우의 단점 ... 115
   2.5 배열의 표현 ... 117
   2.6 문자열 추상 데이타 타입 ... 121
      2.6.1 문자열 패턴 부합 : 간단한 알고리즘 ... 123
      2.6.2 문자열 패턴 부합 : 크누스-모리스-프라트 알고리즘 ... 124
   2.7 참고문헌 ... 130
   2.8 추가 연습문제 ... 130
제3장 스택과 큐 ... 139
   3.1 C++의 템플리트 ... 139
      3.1.1 템플리트 함수 ... 139
      3.1.2 템플리트를 이용한 컨테이너 클래스의 표현 ... 141
   3.2 스택 추상 데이타 타입 ... 153
   3.3 큐 추상 데이타 타입 ... 153
   3.4 C++의 서브타입과 계승 ... 160
   3.5 미로 문제 ... 165
   3.6 수식의 계산 ... 172
      3.6.1 수식 ... 172
      3.6.2 후위 표기식 ... 174
      3.6.3 중위 표기에서 후위 표기로의 변환 ... 176
   3.7 다중 스택과 큐 ... 180
   3.8 참고문헌 ... 185
   3.9 추가 연습문제 ... 185
제4장 연결 리스트 ... 189
   4.1 단순 연결 리스트 ... 189
   4.2 C++에서의 리스트 표현법 ... 194
      4.2.1 C++에서의 리스트 노드 정의 ... 194
      4.2.2 C++에서 리스트 설계 ... 195
      4.2.3 C++에서 포인터 조작 ... 200
      4.2.4 리스트 조작 연산 ... 201
   4.3 재사용 가능한 연결 리스트 클래스 ... 206
      4.3.1 템플리트를 이용한 연결 리스트 구현 ... 207
      4.3.2 연결 리스트 반복자 ... 208
      4.3.3 연결 리스트 연산 ... 213
      4.3.4 클래스의 재사용 ... 215
   4.4 원형 리스트 ... 216
   4.5 연결 스택과 큐 ... 219
   4.6 다항식 ... 223
      4.6.1 다항식의 단순 연결 리스트 표현 ... 223
      4.6.2 다항식의 덧셈 ... 225
      4.6.3 다항식의 제거 ... 229
      4.6.4 다항식의 원형 리스트 표현 ... 231
      4.6.5 요약 ... 235
   4.7 동치 관계 ... 237
   4.8 희소 행렬 ... 244
      4.8.1 희소 행렬 표현 ... 244
      4.8.2 희소 행렬 입력 ... 248
      4.8.3 희소 행렬 삭제 ... 250
   4.9 이중 연결 리스트 ... 255
   4.10 범용 리스트 ... 259
      4.10.1 범용 리스트의 표현 ... 259
      4.10.2 리스트를 위한 순환 알고리즘 ... 264
      14.10.3 참조 계수, 공유 순환 리스트 ... 269
   4.11 C++에서의 가상 함수와 동적 바인딩 ... 277
   4.12 이질 리스트 ... 282
   4.13 참고문헌 ... 287
제5장 트리 ... 289
   5.1 서론 ... 289
      5.1.1 기본 용어 ... 289
      5.1.2 트리의 표현 ... 292
   5.2 이진 트리 ... 296
      5.2.1 추상 데이타 타입 ... 296
      5.2.2 이진 트리의 특성 ... 298
      5.2.3 이진 트리의 표현 ... 301
   5.3 이진 트리 순회와 트리 반복자 ... 306
      5.3.1 개요 ... 306
      5.3.2 중위 순회 ... 306
      5.3.3 전위 순회 ... 308
      5.3.4 후위 순회 ... 309
      5.3.5 반복적 중위 순회 ... 310
      5.3.6 레벨 순서 순회 ... 313
      5.3.7 스택 없는 순회 ... 314
   5.4 이진 트리의 추가 연산 ... 317
      5.4.1 이진 트리의 복사 ... 317
      5.4.2 동일성 검사 ... 318
      5.4.3 만족성 문제 ... 319
   5.5 스레드 이진 트리 ... 324
      5.5.1 스레드 ... 324
      5.5.2 스레드 이진 트리의 중위 순회 ... 327
      5.5.3 스레드 이진 트리에서의 노드 삽입 ... 328
   5.6 히프 ... 331
      5.6.1 우선 순위 큐 ... 331
      5.6.2 취대 히프의 정의 ... 333
      5.6.3 최대 히프에서의 삽입 ... 335
      5.6.4 최대 히프에서의 삭제 ... 337
   5.7 이진 탐색 트리 ... 340
      5.7.1 정의 ... 340
      5.7.2 이진 탐색 트리의 탐색 ... 341
      5.7.3 이진 탐색 트리에 대한 삽입 ... 343
      5.7.4 이진 탐색 트리에서의 삭제 ... 345
      5.7.5 탐색 트리의 결합과 분할 ... 346
      5.7.6 이진 탐색 트리의 높이 ... 348
   5.8 선택 트리 ... 350
      5.8.1 소개 ... 350
      5.8.2 승자 트리 ... 350
      5.8.3 패자 트리 ... 352
   5.9 포리스트 ... 354
      5.9.1 포리스트의 이진 트리 변환 ... 355
      5.9.2 포리스트 순회 ... 356
   5.10 집합 표현 ... 357
      5.10.1 개요 ... 357
      5.10.2 합집합과 Find 연산 ... 358
      5.10.3 동치 부류의 응용 ... 368
   5.11 자료 구조의 객체 지향 시스템 ... 371
   5.12 이진 트리의 개수 계산 ... 376
      5.12.1 상이한 이진 트리 ... 376
      5.12.2 스택 순열 ... 377
      5.12.3 행렬 곱셈 ... 379
      5.12.4 상이한 이진 트리의 수 ... 381
   5.13 참고문헌 ... 382
제6장 그래프 ... 383
   6.1 그래프 추상 데이타 타입 ... 383
      6.1.1 개요 ... 383
      6.1.2 정의 ... 384
   6.2 기본적인 그래프 연산 ... 398
      6.2.1 깊이 우선 탐색 ... 399
      6.2.2 너비 우선 탐색 ... 401
      6.2.3 연결 요소 ... 402
      6.2.4 신장 트리 ... 403
      6.2.5 이중 결합 요소 ... 405
   6.3 최소 비용 신장 트리 ... 412
      6.3.1 Kruskal 알고리즘 ... 412
      6.3.2 Prim 알고리즘 ... 416
      6.3.3 Sollin 알고리즘 ... 417
   6.4 최단 경로와 이행적 폐쇄 ... 420
      6.4.1 단일 시발점 / 모든 종점 : 양수 간선 비용 ... 420
      6.4.2 단일 시발점 / 모든 종점 : 일반적인 가중치 ... 424
      6.4.3 모든 쌍의 최단 경로 ... 429
      6.4.4 이행적 폐쇄 ... 431
   6.5 작업 네트워크 ... 436
      6.5.1 AOV 네트워크 ... 436
      6.5.2 AOE 네트워크 ... 443
   6.6 참고문헌 ... 452
   6.7 추가 연습문제 ... 453
제7장 정렬 ... 457
   7.1 동기 ... 457
   7.2 삽입 정렬 ... 463
   7.3 퀵 정렬 ... 466
   7.4 얼마나 빠르게 정렬할 수 있는가 ... 471
   7.5 합병 정렬 ... 473
      7.5.1 합병 ... 473
      7.5.2 반복 합병 정렬 ... 479
      7.5.3 순환 합병 정렬 ... 482
   7.6 히프 정렬 ... 87
   7.7 여러 키에 의한 정렬 ... 491
   7.8 리스트와 테이블 정렬 ... 497
   7.9 내부 정렬의 요약 ... 507
   7.10 외부 정렬 ... 512
      7.10.1 서론 ... 512
      7.10.2 k-원 합병 ... 516
      7.10.3 병렬 연산을 위한 버퍼 관리 ... 518
      7.10.4 런의 생성 ... 525
      7.10.5 런의 최적 합병 ... 528
   7.11 참고문헌 ... 533
제8장 해싱 ... 535
   8.1 심벌 테이블 추상 데이터 타입 ... 535
   8.2 정적 해싱 ... 537
      8.2.1 해싱 테이블 ... 537
      8.2.2 해싱 함수 ... 539
      8.2.3 오버플로 처리 ... 543
      8.2.4 오버플로 처리 기법에 대한 이론적인 평가 ... 551
   8.3 동적 해싱 ... 555
      8.3.1 동적 해싱의 배경 ... 555
      8.3.2 디렉토리를 사용하는 동적 해싱 ... 556
      8.3.3 디렉토리를 사용하는 동적 해싱의 분석 ... 563
      8.3.4 디렉토리 없는 동적 해싱 ... 567
   8.4 참고문헌 ... 571
제9장 히프 구조 ... 575
   9.1 최소-최대 히프 ... 575
      9.1.1 정의 ... 575
      9.1.2 최소-최대 히프에 삽입 ... 578
      9.1.3 최소 원소의 삭제 ... 582
   9.2 디프 ... 586
      9.2.1 정의 ... 586
      9.2.2 디프에 삽입 ... 588
      9.2.3 최소 원소의 삭제 ... 591
   9.3 좌향 트리 ... 594
   9.4 이항 히프 ... 603
      9.4.1 비용 상환 ... 603
      9.4.2 이항 히프의 정의 ... 604
      9.4.3 이항 히프에 삽입 ... 607
      9.4.4 두 이항 히프의 결합 ... 607
      9.4.5 최소 원소의 삭제 ... 607
      9.4.6 분석 ... 610
   9.5 피보나치 히프 ... 613
      9.5.1 정의 ... 613
      9.5.2 F-히프에서의 삭제 ... 614
      9.5.3 키 감소 ... 615
      9.5.4 연쇄 분리 ... 615
      9.5.5 분석 ... 617
      9.5.6 최단 경로 문제에 대한 응용 ... 619
   9.6 참고문헌 ... 621
   9.7 추가 연습문제 ... 622
제10장 탐색 구조 ... 625
   10.1 최적 이진 탐색 트리 ... 625
   10.2 AVL 트리 ... 637
   10.3 2-3 트리 ... 654
      10.3.1 정의 및 특성 ... 654
      10.3.2 2-3 트리 탐색 ... 656
      10.3.3 2-3 트리에 삽입 ... 657
      10.3.4 2-3 트리에서의 삭제 ... 661
   10.4 2-3-4 트리 ... 669
      10.4.1 정의 및 특성 ... 669
      10.4.2 하향식 삽입 ... 672
      10.4.3 하향식 삭제 ... 676
   10.5 레드-블랙 트리 ... 679
      10.5.1 정의와 특성 ... 679
      10.5.2 레드-블랙 트리의 탐색 ... 682
      10.5.3 하향식 삽입 ... 682
      10.5.4 상향식 삽입 ... 686
      10.5.5 레드-블랙 트리에서 삭제 ... 687
      10.5.6 레드-블랙 트리의 결합과 분열 ... 689
   10.6 B-트리 ... 694
      10.6.1 m-원 탐색 트리의 정의 ... 694
      10.6.2 m-원 탐색 트리의 탐색 ... 696
      10.6.3 B-트리의 정의와 특성 ... 696
      10.6.4 B-트리의 삽입 ... 700
      10.6.5 B-트리의 삭제 ... 704
      10.6.6 가변 크기의 키 값 ... 708
   10.7 스플레이 트리 ... 712
   10.8 디지탈 탐색 트리 ... 719
      10.8.1 정의 ... 719
      10.8.2 이진 트라이 ... 721
      10.8.3 패트리샤 ... 722
   10.9 트라이 ... 729
      10.9.1 정의 ... 729
      10.9.2 트라이 탐색 ... 730
      10.9.3 샘플링 전략 ... 731
      10.9.4 트라이의 삽입 ... 734
      10.9.5 트라이의 삭제 ... 734
      10.9.6 노드 구조 ... 735
   10.10 차등 화일 ... 737
      10.10.1 개념 ... 737
      10.10.2 블룸 필터 ... 739
   10.11 참고문헌 ... 742
찾아보기 ... 745
닫기