Handbook of Data Structures and Applications

Handbook of Data Structures and Applications pdf epub mobi txt 电子书 下载 2026

出版者:Chapman and Hall/CRC
作者:Dinesh P. Mehta
出品人:
页数:1392
译者:
出版时间:2004-10-28
价格:USD 135.95
装帧:Hardcover
isbn号码:9781584884354
丛书系列:
图书标签:
  • 数据结构
  • 计算机科学
  • 算法
  • 计算机
  • 编程
  • data-structure
  • T_05_数据结构与算法
  • CS.DataStructure
  • Data Structures
  • Applications
  • Handbook
  • Algorithms
  • Computer Science
  • Data Analysis
  • Structures
  • Design
想要找书就要到 图书目录大全
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

In the late sixties, Donald Knuth, winner of the 1974Turing Award, published his landmark

book The Art of Computer Programming: Fundamental Algorithms. This book brought to-

gether a body of knowledge that defined the data structures area. The term data structure,

itself, was defined in this book to be A table of data including structural relationships.

Niklaus Wirth, the inventor of the Pascal language and winner of the 1984 Turing award,

stated that “Algorithms + Data Structures = Programs”. The importance of algorithms

and data structures has been recognized by the community and consequently, every under-

graduate Computer Science curriculum has classes on data structures and algorithms. Both

of these related areas have seen tremendous advances in the decades since the appearance

of the books by Knuth and Wirth. Although there are several advanced and specialized

texts and handbooks on algorithms (and related data structures), there is, to the best of

our knowledge, no text or handbook that focuses exclusively on the wide variety of data

structures that have been reported in the literature. The goalof this handbook is to provide

a comprehensive survey of data structures of di?erent types that are in existence today.

To this end, we have subdivided this handbook into seven parts, each of which addresses

a di?erent facet of data structures. Part I is a review of introductory material. Although

this material is covered in all standard data structures texts, it was included to make the

handbook self-containedand in recognitionofthe factthatthere aremany practitionersand

programmers who may not have had a formal education in Computer Science. Parts II, III,

and IV discuss Priority Queues, Dictionary Structures, and Multidimensional structures,

respectively. These are all well-known classes of data structures. Part V is a catch-all used

for well-known data structures that eluded easy classification. Parts I through V are largely

theoretical in nature: they discuss the data structures, their operations and their complex-

ities. Part VI addresses mechanisms and tools that have been developed to facilitate the

use of data structures in real programs. Many of the data structures discussed in previous

parts are very intricate and take some e?ort to program. The developmentof data structure

libraries and visualization tools by skilled programmers are of critical importance in reduc-

ing the gap between theory and practice. Finally, Part VII examines applications of data

structures. The deployment of many data structures from Parts I through V in a variety

of applications is discussed. Some of the data structures discussed here have been invented

solely in the context of these applications and are not well-known to the broader commu-

nity. Some of the applications discussed include Internet Routing, Web Search Engines,

Databases, Data Mining, Scientific Computing, Geographical Information Systems, Com-

putational Geometry, Computational Biology, VLSI Floorplanning and Layout, Computer

Graphics and Image Processing.

Bookmarks

Handbook of DATA STRUCTURES and APPLICATIONS

Dedication

Preface

About the Editors

Contributors

Contents

Part I: Fundamentals

Chapter 1: Analysis of Algorithms

1.1 Introduction

1.2 Operation Counts

1.3 Step Counts

1.4 Counting Cache Misses

1.4.1 A Simple Computer Model

1.4.2 Effect of Cache Misses on Run Time

1.4.3 Matrix Multiplication

1.5 Asymptotic Complexity

1.5.1 Big Oh Notation (O)

1.5.2 Omega (omega) and Theta (theta) Notations

1.5.3 Little Oh Notation (o)

1.6 Recurrence Equations

1.6.1 Substitution Method

1.6.2 Table-Lookup Method

1.7 Amortized Complexity

1.7.1 What is Amortized Complexity?

1.7.2 Maintenance Contract

Problem Definition

Worst-Case Method

Aggregate Method

Accounting Method

Potential Method

1.7.3 The McWidget Company

Problem Definition

Worst-Case Method

Aggregate Method

Accounting Method

Potential Method

1.7.4 Subset Generation

Problem Definition

Worst-Case Method

Aggregate Method

Accounting Method

Potential Method

1.8 Practical Complexities

Acknowledgment

References

Chapter 2: Basic Structures

2.1 Introduction

2.2 Arrays

2.2.1 Operations on an Array

2.2.2 Sorted Arrays

2.2.3 Array Doubling

2.2.4 Multiple Lists in a Single Array

2.2.5 Heterogeneous Arrays

2.2.6 Multidimensional Arrays

Row- or Column Major Representation

Array of Arrays Representation

Irregular Arrays

2.2.7 Sparse Matrices

2.3 Linked Lists

2.3.1 Chains

2.3.2 Circular Lists

2.3.3 Doubly Linked Circular Lists

2.3.4 Generalized Lists

2.4 Stacks and Queues

2.4.1 Stack Implementation

2.4.2 Queue Implementation

Acknowledgments

References

Chapter 3: Trees

3.1 Introduction

3.2 Tree Representation

3.2.1 List Representation

3.2.2 Left Child-Right Sibling Representation

3.2.3 Binary Tree Representation

3.3 Binary Trees and Properties

3.3.1 Properties

3.3.2 Binary Tree Representation

3.4 Binary Tree Traversals

3.4.1 Inorder Traversal

3.4.2 Preorder Traversal

3.4.3 Postorder Traversal

3.4.4 Level Order Traversal

3.5 Threaded Binary Trees

3.5.1 Threads

3.5.2 Inorder Traversal of a Threaded Binary Tree

3.6 Binary Search Trees

3.6.1 Definition

3.6.2 Search

3.6.3 Insert

3.6.4 Delete

3.6.5 Miscellaneous

3.7 Heaps

3.7.1 Priority Queues

3.7.2 Definition of a Max-Heap

3.7.3 Insertion

3.7.4 Deletion

3.8 Tournament Trees

3.8.1 Winner Trees

3.8.2 Loser Trees

Acknowledgments

References

Chapter 4: Graphs

4.1 Introduction

4.2 Graph Representations

4.2.1 Weighted Graph Representation

4.3 Connectivity, Distance, and Spanning Trees

4.3.1 Spanning Trees

4.4 Searching a Graph

4.4.1 Depth-First Search

4.4.2 Breadth-First Search

4.5 Simple Applications of DFS and BFS

4.5.1 Depth-First Search on a Digraph

4.5.2 Topological Sorting

4.6 Minimum Spanning Tree

4.6.1 Kruskal’s MST Algorithm

4.6.2 Prim’s MST Algorithm

4.6.3 Boruvka’s MST Algorithm

4.6.4 Constrained MST

4.7 Shortest Paths

4.7.1 Single-Source Shortest Paths, Nonnegative Weights

4.7.2 Single-Source Shortest Paths, Arbitrary Weights

4.7.3 All-Pairs Shortest Paths

4.8 Eulerian and Hamiltonian Graphs

Acknowledgment

References

Part II: Priority Queues

Chapter 5: Leftist Trees

5.1 Introduction

5.2 Height-Biased Leftist Trees

5.2.1 Definition

5.2.2 Insertion into a Max HBLT

5.2.3 Deletion of Max Element from a Max HBLT

5.2.4 Melding Two Max HBLTs

5.2.5 Initialization

5.2.6 Deletion of Arbitrary Element from a Max HBLT

5.3 Weight-Biased Leftist Trees

5.3.1 Definition

5.3.2 Max WBLT Operations

Acknowledgment

References

Chapter 6: Skew Heaps

6.1 Introduction

6.2 Basics of Amortized Analysis

6.3 Meldable Priority Queues and Skew Heaps

6.3.1 Meldable Priority Queue Operations

6.3.2 Amortized Cost of Meld Operation

6.4 Bibliographic Remarks

References

Chapter 7: Binomial, Fibonacci, and Pairing Heaps

7.1 Introduction

7.2 Binomial Heaps

7.3 Fibonacci Heaps

7.4 Pairing Heaps

7.5 Pseudocode Summaries of the Algorithms

7.5.1 Link and Insertion Algorithms

7.5.2 Binomial Heap-Specific Algorithms

7.5.3 Fibonacci Heap-Specific Algorithms

7.5.4 Pairing Heap-Specific Algorithms

7.6 Related Developments

Skew-Pairing Heaps

Adaptive Properties of Pairing Heaps

Soft Heaps

References

Chapter 8: Double-Ended Priority Queues

8.1 Definition and an Application

8.2 Symmetric Min-Max Heaps

8.3 Interval Heaps

8.3.1 Inserting an Element

8.3.2 Removing the Min Element

8.3.3 Initializing an Interval Heap

8.3.4 Complexity of Interval Heap Operations

8.3.5 The Complementary Range Search Problem

8.4 Min-Max Heaps

8.4.1 Inserting an Element

8.4.2 Removing the Min Element

8.5 Deaps

8.5.1 Inserting an Element

8.5.2 Removing the Min Element

8.6 Generic Methods for DEPQs

8.6.1 Dual Priority Queues

8.6.2 Total Correspondence

8.6.3 Leaf Correspondence

8.7 Meldable DEPQs

Acknowledgment

References

Part III: Dictionary Structures

Chapter 9: Hash Tables

9.1 Introduction

9.2 Hash Tables for Integer Keys

9.2.1 Hashing by Division

9.2.2 Hashing by Multiplication

9.2.3 Universal Hashing

9.2.4 Static Perfect Hashing

9.2.5 Dynamic Perfect Hashing

9.3 Random Probing

9.3.1 Hashing with Chaining

9.3.2 Hashing with Open Addressing

9.3.3 Linear Probing

9.3.4 Quadratic Probing

9.3.5 Double Hashing

9.3.6 Brent’s Method

9.3.7 Multiple-Choice Hashing

9.3.8 Asymmetric Hashing

9.3.9 LCFS Hashing

9.3.10 Robin-Hood Hashing

9.3.11 Cuckoo Hashing

9.4 Historical Notes

9.5 Other Developments

Acknowledgment

References

Chapter 10: Balanced Binary Search Trees

10.1 Introduction

10.2 Basic Definitions

10.2.1 Trees

10.2.2 Binary Trees as Dictionaries

Simple Searching

Simple Updates

More Searching Procedures

Operations Involving More Trees

10.2.3 Implementation of Binary Search Trees

10.3 Generic Discussion of Balancing

10.3.1 Balance Definitions

10.3.2 Rebalancing Algorithms

10.3.3 Complexity Results

10.4 Classic Balancing Schemes

10.4.1 AVL-Trees

10.4.2 Weight-Balanced Trees

10.4.3 Balanced Binary Trees Based on Multi-Way Trees

10.5 Rebalancing a Tree to Perfect Balance

10.6 Schemes with no Balance Information

10.6.1 Implicit Representation of Balance Information

Using Empty Pointers

Swapping Pointers

10.6.2 General Balanced Trees

10.6.3 Application to Multi-Dimensional Search Trees

10.7 Low Height Schemes

10.8 Relaxed Balance

10.8.1 Red-Black Trees

10.8.2 AVL-Trees

10.8.3 Multi-Way Trees

10.8.4 Other Results

References

Chapter 11: Finger Search Trees

11.1 Finger Searching

11.2 Dynamic Finger Search Trees

11.3 Level Linked (2,4)-Trees

11.4 Randomized Finger Search Trees

11.4.1 Treaps

11.4.2 Skip Lists

11.5 Applications

11.5.1 Optimal Merging and Set Operations

11.5.2 Arbitrary Merging Order

11.5.3 List Splitting

11.5.4 Adaptive Merging and Sorting

Acknowledgment

References

Chapter 12: Splay Trees

12.1 Introduction

12.2 Splay Trees

12.3 Analysis

12.3.1 Access and Update Operations

12.4 Optimality of Splay Trees

12.4.1 Static Optimality

12.4.2 Static Finger Theorem

12.4.3 Working Set Theorem

12.4.4 Other Properties and Conjectures

12.5 Linking and Cutting Trees

12.5.1 Data Structure

12.5.2 Solid Trees

12.5.3 Rotation

12.5.4 Splicing

12.5.5 Splay in Virtual Tree

12.5.6 Analysis of Splay in Virtual Tree

12.5.7 Implementation of Primitives for Linking and Cutting Trees

12.6 Case Study: Application to Network Flows

Push(v,w)

Relabel(v)

Preflow-Push Algorithms

12.7 Implementation Without Linking and Cutting Trees

Push/Relabel(v)

Discharge(v)

FIFO/Queue

12.8 FIFO: Dynamic Tree Implementation

Tree-Push(v)

Analysis

12.9 Variants of Splay Trees and Top-Down Splaying

Acknowledgment

References

Chapter 13: Randomized Dictionary Structures

13.1 Introduction

13.2 Preliminaries

13.2.1 Randomized Algorithms

13.2.2 Basics of Probability Theory

13.2.3 Conditional Probability

13.2.4 Some Basic Distributions

Bernoulli Distribution

Binomial Distribution

Geometric Distribution

Negative Binomial distribution

13.2.5 Tail Estimates

13.3 Skip Lists

13.4 Structural Properties of Skip Lists

13.4.1 Number of Levels in Skip List

13.4.2 Space Complexity

13.5 Dictionary Operations

13.6 Analysis of Dictionary Operations

13.7 Randomized Binary Search Trees

13.7.1 Insertion in RBST

13.7.2 Deletion in RBST

13.8 Bibliographic Remarks

References

Chapter 14: Trees with Minimum Weighted Path Length

14.1 Introduction

14.2 Huffman Trees

14.2.1 O(n log n) Time Algorithm

14.2.2 Linear Time Algorithm for Presorted Sequence of Items

14.2.3 Relation between General Uniquely Decipherable Codes and Prefix-free Codes

14.2.4 Huffman Codes and Entropy

14.2.5 Huffman Algorithm for t-ary Trees

14.3 Height Limited Huffman Trees

14.3.1 Reduction to the Coin Collector Problem

14.3.2 The Algorithm for the Coin Collector Problem

14.4 Optimal Binary Search Trees

14.4.1 Approximately Optimal Binary Search Trees

14.5 Optimal Alphabetic Tree Problem

14.5.1 Computing the Cost of Optimal Alphabetic Tree

14.5.2 Construction of Optimal Alphabetic Tree

14.5.3 Optimal Alphabetic Trees for Presorted Items

14.6 Optimal Lopsided Trees

14.7 Parallel Algorithms

References

Chapter 15: B Trees

15.1 Introduction

15.2 The Disk-Based Environment

15.3 The B-tree

15.3.1 B-tree Definition

15.3.2 B-tree Query

15.3.3 B-tree Insertion

15.3.4 B-tree Deletion

15.4 The B+-tree

15.4.1 Copy-up and Push-up

15.4.2 B+-tree Query

15.4.3 B+-tree Insertion

15.4.4 B+-tree Deletion

15.5 Further Discussions

15.5.1 Eficiency Analysis

15.5.2 Why is the B+-tree Widely Accepted?

15.5.3 Bulk-Loading a B+-tree

15.5.4 Aggregation Query in a B+-tree

References

Part IV: Multidimensional and Spatial Structures

Chapter 16: Multidimensional Spatial Data Structures

16.1 Introduction

16.2 Point Data

16.3 Bucketing Methods

16.4 Region Data

16.5 Rectangle Data

16.6 Line Data and Boundaries of Regions

16.7 Research Issues and Summary

Acknowledgment

References

Chapter 17: Planar Straight Line Graphs

17.1 Introduction

17.2 Features of PSLGs

17.3 Operations on PSLGs

Edge insertion and deletion

Vertex split and edge contraction

17.4 Winged-Edge

17.5 Halfedge

Access functions

Edge insertion and deletion

Vertex split and edge contraction

17.6 Quadedge

17.7 Further Remarks

17.8 Glossary

Acknowledgment

References

Chapter 18: Interval, Segment, Range, and Priority Search Trees

18.1 Introduction

18.2 Interval Trees

18.2.1 Construction of Interval Trees

18.2.2 Example and Its Applications

18.3 Segment Trees

18.3.1 Construction of Segment Trees

18.3.2 Examples and Its Applications

18.4 Range Trees

18.4.1 Construction of Range Trees

18.4.2 Examples and Its Applications

18.5 Priority Search Trees

18.5.1 Construction of Priority Search Trees

18.5.2 Examples and Its Applications

Acknowledgment

References

Chapter 19: Quadtrees and Octrees

19.1 Introduction

19.2 Quadtrees for Point Data

19.2.1 Point Quadtrees

19.2.2 Region Quadtrees

19.2.3 Compressed Quadtrees and Octrees

19.2.4 Cell Orderings and Space-Filling Curves

19.2.5 Construction of Compressed Quadtrees

A Divide-and-Conquer Construction Algorithm

Bottom-up Construction

19.2.6 Basic Operations

Point and Cell Queries

Insertions and Deletions

Cell Insertion

Cell Deletion

19.2.7 Practical Considerations

19.3 Spatial Queries with Region Quadtrees

19.3.1 Range Query

19.3.2 Spherical Region Queries

19.3.3 k-Nearest Neighbors

19.4 Image Processing Applications

19.4.1 Construction of Image Quadtrees

19.4.2 Union and Intersection of Images

19.4.3 Rotation and Scaling

19.4.4 Connected Component Labeling

19.5 Scientific Computing Applications

19.5.1 The N-body Problem

Acknowledgment

References

Chapter 20: Binary Space Partitioning Trees

20.1 Introduction

20.2 BSP Trees as a Multi-Dimensional Search Structure

20.3 Visibility Orderings

20.3.1 Total Ordering of a Collection of Objects

20.3.2 Visibility Ordering as Tree Traversal

20.3.3 Intra-Object Visibility

20.4 BSP Tree as a Hierarchy of Regions

20.4.1 Tree Merging

20.4.2 Good BSP Trees

20.4.3 Converting B-reps to Trees

20.4.4 Boundary Representations vs. BSP Trees

Bibliography

Chapter 21: R-trees

21.1 Introduction

21.2 Basic Concepts

Intersection queries

Updating the tree

21.3 Improving Performance

21.3.1 R* Tree

21.3.2 Hilbert Tree

21.3.3 Bulk Loading

General Algorithm

Nearest-X (NX)

Hilbert Sort (HS)

Sort-Tile-Recursive (STR)

21.4 Advanced Operations

21.4.1 Nearest Neighbor Queries

21.4.2 Spatial Joins

21.5 Analytical Models

Acknowledgment

References

Chapter 22: Managing Spatio-Temporal Data

22.1 Introduction and Background

22.2 Overlapping Linear Quadtree

22.2.1 Insertion of an Object in MVLQ

22.2.2 Deletion of an Object in MVLQ

22.2.3 Updating an Object in MVLQ

22.3 3D R-tree

22.3.1 Answering Spatio-Temporal Queries Using the Unified Schema

22.3.2 Performance Analysis of 3D R-trees

22.3.3 Handling Queries with Open Transaction-Times

22.4 2+3 R-tree

22.5 HR-tree

22.6 MV3R-tree

22.7 Indexing Structures for Continuously Moving Objects

22.7.1 TPR-tree

22.7.2 REXP -tree

22.7.3 STAR-tree

22.7.4 TPR*-tree

References

Chapter 23: Kinetic Data Structures

23.1 Introduction

23.2 Motion in Computational Geometry

23.3 Motion Models

23.4 Kinetic Data Structures

23.4.1 Convex Hull Example

23.4.2 Performance Measures for KDS

23.4.3 The Convex Hull, Revisited

23.5 A KDS Application Survey

23.5.1 Extent Problems

23.5.2 Proximity Problems

23.5.3 Triangulations and Tilings

23.5.4 Collision Detection

23.5.5 Connectivity and Clustering

23.5.6 Visibility

23.5.7 Result Summary

23.5.8 Open Problems

Recovery after multiple certificate failures

Hierarchical motion descriptions

Motion sensitivity

Non-canonical structures

23.6 Querying Moving Objects

23.7 Sources and Related Materials

References

Chapter 24: Online Dictionary Structures

24.1 Introduction

24.2 Trie Implementations

24.3 Binary Search Tree Implementations

24.4 Balanced BST Implementation

24.5 Additional Operations

24.6 Discussion

References

Chapter 25: Cuttings

25.1 Introduction

25.2 The Cutting Construction

25.2.1 Geometric Sampling

25.2.2 Optimal Cuttings

25.3 Applications

25.3.1 Point Location

25.3.2 Hopcroft’s problem

25.3.3 Convex Hulls and Voronoi Diagrams

25.3.4 Range Searching

Acknowledgments

References

Chapter 26: Approximate Geometric Query Structures

26.1 Introduction

26.2 General Terminology

26.3 Approximate Queries

26.4 Quasi-BAR Bounds

26.5 BBD Trees

26.6 BAR Trees

26.7 Maximum-Spread k-d Trees

Acknowledgment

References

Chapter 27: Geometric and Spatial Data Structures in External Memory

27.1 Introduction

27.1.1 Disk Model

27.1.2 Design Criteria for External Memory Data Structures

27.1.3 Overview of Chapter

27.2 EM Algorithms for Batched Geometric Problems

27.3 External Memory Tree Data Structures

27.3.1 B-trees and Variants

27.3.2 Weight-Balanced B-trees

27.3.3 Parent Pointers and Level-Balanced B-trees

27.3.4 Buffer Trees

27.4 Spatial Data Structures and Range Search

27.4.1 Linear-Space Spatial Structures

27.4.2 R-trees

27.4.3 Bootstrapping for 2-D Diagonal Corner and Stabbing Queries

27.4.4 Bootstrapping for Three-Sided Orthogonal 2-D Range Search

27.4.5 General Orthogonal 2-D Range Search

27.4.6 Lower Bounds for Orthogonal Range Search

27.5 Related Problems

27.6 Dynamic and Kinetic Data Structures

27.6.1 Logarithmic Method for Decomposable Search Problems

27.6.2 Continuously Moving Items

27.7 Conclusions

Acknowledgment

References

Part V: Miscellaneous Data Structures

Chapter 28: Tries

28.1 What Is a Trie?

28.2 Searching a Trie

28.3 Keys with Different Length

28.4 Height of a Trie

28.5 Space Required and Alternative Node Structures

28.6 Inserting into a Trie

28.7 Removing an Element

28.8 Prefix Search and Applications

Criminology

Automatic Command Completion

28.9 Compressed Tries

28.9.1 Compressed Tries with Digit Numbers

Searching a Compressed Trie with Digit Numbers

Inserting into a Compressed Trie with Digit Numbers

Removing an Element from a Compressed Trie with Digit Numbers

28.9.2 Compressed Tries with Skip Fields

28.9.3 Compressed Tries with Edge Information

Searching a Compressed Trie with Edge Information

Inserting into a Compressed Trie with Edge Information

Removing an Element from a Compressed Trie with Edge Information

28.9.4 Space Required by a Compressed Trie

28.10 Patricia

28.10.1 Searching

28.10.2 Inserting an Element

28.10.3 Removing an Element

Acknowledgment

References

Chapter 29: Suffix Trees and Suffix Arrays

29.1 Basic Definitions and Properties

29.2 Linear Time Construction Algorithms

29.2.1 Suffix Trees vs. Suffix Arrays

29.2.2 Linear Time Construction of Suffix Trees

McCreight’s Algorithm

Generalized Suffix Trees

29.2.3 Linear Time Construction of Suffix Arrays

K?r?kkanen and Sanders’ Algorithm

29.2.4 Space Issues

29.3 Applications

29.3.1 Pattern Matching

Pattern Matching using Suffix Trees

Pattern Matching using Suffix Arrays

29.3.2 Longest Common Substrings

29.3.3 Text Compression

29.3.4 String Containment

29.3.5 Suffix-Prefix Overlaps

29.4 Lowest Common Ancestors

Bender and Farach’s lca algorithm

29.5 Advanced Applications

29.5.1 Suffix Links from Lowest Common Ancestors

29.5.2 Approximate Pattern Matching

29.5.3 Maximal Palindromes

Acknowledgment

References

Chapter 30: String Searching

30.1 Introduction

30.2 Preliminaries

30.3 The DAWG

30.3.1 A Simple Algorithm for Constructing the DAWG

30.3.2 Constructing the DAWG in Linear Time

30.4 The Compact DAWG

30.4.1 Using the Compact DAWG to Find the Locations of a String in the Text

30.4.2 Variations and Applications

30.5 The Position Heap

30.5.1 Building the Position Heap

30.5.2 Querying the Position Heap

30.5.3 Time Bounds

30.5.4 Improvements to the Time Bounds

References

Chapter 31: Persistent Data Structures

31.1 Introduction

31.2 Algorithmic Applications of Persistent Data Structures

31.3 General Techniques for Making Data Structures Persistent

31.3.1 The Fat Node Method

31.3.2 Node Copying and Node Splitting

31.3.3 Handling Arrays

31.3.4 Making Data Structures Confluently Persistent

31.4 Making Specific Data Structures More Efficient

31.4.1 Redundant Binary Counters

31.4.2 Persistent Deques

31.5 Concluding Remarks and Open Questions

Acknowledgment

References

Chapter 32: PQ Trees, PC Trees, and Planar Graphs

32.1 Introduction

32.2 The Consecutive-Ones Problem

32.2.1 A Data Structure for Representing the PC Tree

32.2.2 Finding the Terminal Path Efficiently

32.2.3 Performing the Update Step on the Terminal Path Efficiently

32.2.4 The Linear Time Bound

32.3 Planar Graphs

32.3.1 Preliminaries

32.3.2 The Strategy

32.3.3 Implementing the Recursive Step

The Terminal Path

Finding the Terminal Path

The Linear Time Bound

32.3.4 Difierences between the Original PQ-Tree and the New PC-Tree Approaches

32.3.5 Returning a Kuratowski Subgraph when G is Non-Planar

32.4 Acknowledgment

References

Chapter 33: Data Structures for Sets

33.1 Introduction

33.1.1 Models of Computation

33.2 Simple Randomized Set Representations

33.2.1 The Hash Trie

33.2.2 Some Remarks on Unique Representations

33.3 Equality Testing

33.4 Extremal Sets and Subset Testing

33.4.1 Static Extremal Sets

33.4.2 Dynamic Set Intersections and Subset Testing

33.5 The Disjoint Set Union-Find Problem

33.5.1 The Classical Union-Find Problem and Variants

33.6 Partition Maintenance Algorithms

33.7 Conclusions

References

Chapter 34: Cache-Oblivious Data Structures

34.1 The Cache-Oblivious Model

34.2 Fundamental Primitives

34.2.1 Van Emde Boas Layout

Layout

Search

Range query

34.2.2 k-Merger

Binary mergers and merge trees

k-merger

Funnelsort

34.3 Dynamic B-Trees

34.3.1 Density Based

Structure

Updates

Range queries

34.3.2 Exponential Tree Based

Structure

Search

Updates

Reducing space usage

34.4 Priority Queues

34.4.1 Merge Based Priority Queue: Funnel Heap

Structure

Layout

Operations

Analysis

34.4.2 Exponential Level Based Priority Queue

Structure

Layout

Operations

34.5 2d Orthogonal Range Searching

34.5.1 Cache-Oblivious kd-Tree

Structure

Query

Construction

Updates

34.5.2 Cache-Oblivious Range Tree

Three-Sided Queries

Structure

Layout

Query

Four-sided queries

Acknowledgments

References

Chapter 35: Dynamic Trees

35.1 Introduction

35.2 Linking and Cutting Trees

35.2.1 Using Operations on Vertex-Disjoint Paths

35.2.2 Implementing Operations on Vertex-Disjoint Paths

35.3 Topology Trees

35.3.1 Construction

35.3.2 Updates

35.3.3 Applications

35.4 Top Trees

35.4.1 Updates

35.4.2 Representation and Applications

35.5 ET Trees

35.5.1 Updates

35.5.2 Applications

35.6 Reachability Trees

35.7 Conclusions

Acknowledgments

References

Chapter 36: Dynamic Graphs

36.1 Introduction

36.2 Techniques for Undirected Graphs

36.2.1 Clustering

36.2.2 Sparsification

36.2.3 Randomization

Maintaining Spanning Forests

Random Sampling

Graph Decomposition

36.3 Techniques for Directed Graphs

36.3.1 Kleene Closures

Logarithmic Decomposition

Recursive Decomposition

36.3.2 Long Paths

36.3.3 Locality

36.3.4 Matrices

36.4 Connectivity

36.4.1 Updates in O(log2 n) Time

36.5 Minimum Spanning Tree

36.5.1 Deletions in O(log2 n) Time

36.5.2 Updates in O(log4 n) Time

36.6 Transitive Closure

36.6.1 Updates in O( n2 log n) Time

36.6.2 Updates in O(n2) Time

36.7 All-Pairs Shortest Paths

36.7.1 Updates in O(n2.5...) Time

36.7.2 Updates in O(n2 log3 n) Time

36.8 Conclusions

Acknowledgment

References

Chapter 37: Succinct Representation of Data Structures

37.1 Introduction

37.2 Bitvector

37.3 Succinct Dictionaries

37.3.1 Indexable Dictionary

37.3.2 Fully Indexable Dictionary

37.3.3 Dynamic Dictionary

37.4 Tree Representations

37.4.1 Binary Trees

37.4.2 Ordinal Trees

37.4.3 Cardinal Trees

37.4.4 Dynamic Binary Trees

37.5 Graph Representations

37.6 Succinct Structures for Indexing

37.7 Permutations and Functions

37.7.1 Permutations

37.7.2 Functions

37.8 Partial Sums

37.9 Arrays

37.9.1 Resizable Arrays

37.9.2 Dynamic Arrays

37.10 Conclusions

References

Chapter 38: Randomized Graph Data-Structures for Approximate Shortest Paths

38.1 Introduction

38.2 A Randomized Data-Structure for Static APASP : Approximate Distance Oracles

38.2.1 3-Approximate Distance Oracle

38.2.2 Preliminaries

38.2.3 (2k – 1)-Approximate Distance Oracle

Reporting distance with stretch at-most (2k – 1)

Size of the (2k – 1)-approximate distance oracle

38.2.4 Computing Approximate Distance Oracles

Computing Balli(u) efficiently

38.3 A Randomized Data-Structure for Decremental APASP

38.3.1 Main Idea

38.3.2 Notations

38.3.3 Hierarchical Distance Maintaining Data-Structure

38.3.4 Bounding the Size of … under Edge-Deletions

Maintaining the BFS tree … under edge deletions

Some technical details

38.3.5 Improved Decremental Algorithm for APASP up to Distance d

38.4 Further Reading and Bibliography

Acknowledgment

References

Chapter 39: Searching and Priority Queues in o(log n) Time

39.1 Introduction

39.2 Model of Computation

39.3 Overview

39.4 Achieving Sub-Logarithmic Time per Element by Simple Means

39.4.1 Range Reduction

39.4.2 Packing Keys

39.4.3 Combining

39.5 Deterministic Algorithms and Linear Space

39.5.1 Fusion Trees

39.5.2 Exponential Search Trees

39.6 From Amortized Update Cost to Worst-Case

39.7 Sorting and Priority Queues

39.7.1 Range Reduction

39.7.2 Packed Sorting

39.7.3 Combining the Techniques

39.7.4 Further Techniques and Faster Randomized Algorithms

References

Part VI: Data Structures in Languages and Libraries

Chapter 40: Functional Data Structures

40.1 Introduction

40.1.1 Data Structures in Functional Languages

Immutability

Recursion

Garbage Collection

Pattern Matching

40.1.2 Functional Data Structures in Mainstream Languages

Fewer Bugs

Increased Sharing

Decreased Synchronization

40.2 Stacks: A Simple Example

40.3 Binary Search Trees: Path Copying

40.4 Skew Heaps: Amortization and Lazy Evaluation

40.4.1 Analysis of Lazy Skew Heaps

40.5 Difficulties

40.6 Further Reading

Acknowledgments

References

Chapter 41: LEDA, a Platform for Combinatorial and Geometric Computing

41.1 Introduction

41.1.1 Ease of Use

41.1.2 Extensibility

41.1.3 Correctness

41.1.4 Availability and Usage

41.2 The Structure of LEDA

41.3 Data Structures and Data Types

41.3.1 Basic Data Types

41.3.2 Numbers and Matrices

41.3.3 Advanced Data Types

41.3.4 Graph Data Structures

41.3.5 Geometry Kernels

41.3.6 Advanced Geometric Data Structures

41.4 Algorithms

41.5 Visualization

41.5.1 GraphWin

41.5.2 GeoWin

41.6 Example Programs

41.6.1 Word Count

41.6.2 Shortest Paths

41.6.3 Curve Reconstruction

41.6.4 Upper Convex Hull

41.6.5 Delaunay Flipping

41.6.6 Discussion

41.7 Projects Enabled by LEDA

References

Chapter 42: Data Structures in C++

42.1 Introduction

42.2 Basic Containers

42.2.1 Sequence Containers

42.2.2 Sorted Associative Containers

Sets and Multisets

Maps and Multimaps

42.2.3 Container Adapters

42.3 Iterators

42.3.1 Basics

42.3.2 Reverse Iterators

42.4 Additional Components of the STL

42.4.1 Sorting, Searching, and Selection

Sorting

Selection

Searching

42.4.2 Non-Standard Extensions

42.5 Sample Code

Acknowledgment

References

Chapter 43: Data Structures in JDSL

43.1 Introduction

43.2 Design Concepts in JDSL

43.2.1 Containers and Accessors

43.2.2 Iterators

43.2.3 Decorations

43.2.4 Comparators

43.2.5 Algorithms

43.3 The Architecture of JDSL

43.3.1 Packages

43.3.2 Positional Containers

Sequences

Trees

Graphs

43.3.3 Key-Based Containers

Priority queues

Dictionaries

43.3.4 Algorithms

Sequence sorting

Iterator-based tree traversals

Euler tour tree traversal

Graph traversals

Topological numbering

Dijkstra’s algorithm

The Prim-Jarník algorithm

43.4 A Sample Application

43.4.1 Minimum-Time Flight Itineraries

43.4.2 Class IntegerDijkstraTemplate

43.4.3 Class IntegerDijkstraPathfinder

43.4.4 Class FlightDijkstra

Acknowledgments

References

Chapter 44: Data Structure Visualization

44.1 Introduction

44.2 Value of Data Structure Rendering

44.3 Issues in Data Structure Visualization Systems

44.3.1 Purpose and Environment

44.3.2 Data Structure Views

44.3.3 Interacting with a System

44.4 Existing Research and Systems

44.4.1 Incense

44.4.2 VIPS

44.4.3 GELO

44.4.4 DDD

44.4.5 Other Systems

44.5 Summary and Open Problems

References

Chapter 45: Drawing Trees

45.1 Introduction

45.2 Preliminaries

45.3 Level Layout for Binary Trees

45.4 Level Layout for n-ary Trees

45.4.1 PrePosition

45.4.2 Combining a Subtree and Its Left Subforest

45.4.3 Ancestor

45.4.4 Apportion

45.4.5 Shifting the Smaller Subtrees

45.5 Radial Layout

45.6 HV-Layout

Acknowledgment

References

Chapter 46: Drawing Graphs

46.1 Introduction

46.2 Preliminaries

46.3 Convex Drawing

46.3.1 Barycenter Algorithm

46.3.2 Divide and Conquer Algorithm

46.3.3 Algorithm Using Canonical Ordering

46.4 Symmetric Drawing

46.4.1 Displaying Rotational Symmetry

46.4.2 Displaying Axial Symmetry

46.4.3 Displaying Dihedral Symmetry

46.5 Visibility Drawing

46.5.1 Planar st-Graphs

46.5.2 The Bar Visibility Algorithm

46.5.3 Bar Visibility Representations and Layered Drawings

46.5.4 Bar Visibility Representations for Orthogonal Drawings

46.6 Conclusion

References

Chapter 47: Concurrent Data Structures

47.1 Designing Concurrent Data Structures

47.1.1 Performance

47.1.2 Blocking Techniques

47.1.3 Nonblocking Techniques

47.1.4 Complexity Measures

47.1.5 Correctness

47.1.6 Verification Techniques

47.1.7 Tools of the Trade

Locks

Barriers

Transactional Synchronization Mechanisms

47.2 Shared Counters and Fetch-and-phi Structures

Combining

Counting Networks

47.3 Stacks and Queues

Stacks

Queues

Deques

47.4 Pools

47.5 Linked Lists

47.6 Hash Tables

47.7 Search Trees

47.8 Priority Queues

Heap-Based Priority Queues

Tree-Based Priority Pools

47.9 Summary

References

Part VII: Applications

Chapter 48: IP Router Tables

48.1 Introduction

48.2 Longest Matching-Prefix

48.2.1 Linear List

48.2.2 End-Point Array

48.2.3 Sets of Equal-Length Prefixes

48.2.4 Tries

1-Bit Tries

Fixed-Stride Tries

Variable-Stride Tries

48.2.5 Binary Search Trees

48.2.6 Priority Search Trees

48.3 Highest-Priority Matching

48.3.1 The Data Structure BOB

48.3.2 Search for the Highest-Priority Matching Range

48.4 Most-Specific-Range Matching

48.4.1 Nonintersecting Ranges

48.4.2 Conflict-Free Ranges

Acknowledgment

References

Chapter 49: Multi-Dimensional Packet Classification

49.1 Introduction

49.1.1 Problem Statement

49.2 Performance Metrics for Classification Algorithms

49.3 Classification Algorithms

49.3.1 Background

Bounds from Computational Geometry

Range lookups

49.3.2 Taxonomy of Classification Algorithms

49.3.3 Basic Data Structures

Linear search

Hierarchical tries

Set-pruning tries

49.3.4 Geometric Algorithms

Grid-of-tries

Cross-producting

A 2-dimensional classification scheme

Area-based quadtree

Fat Inverted Segment tree (FIS-tree)

Dynamic multi-level tree algorithms

49.3.5 Heuristics

Recursive Flow Classification (RFC)

Hierarchical Intelligent Cuttings (HiCuts)

Tuple Space Search

49.3.6 Hardware-Based Algorithms

Ternary CAMs

Bitmap-intersection

49.4 Summary

References

Chapter 50: Data Structures in Web Information Retrieval

50.1 Introduction

50.2 Inverted Indices

50.2.1 Index Compression

50.2.2 Index Granularity

50.3 Fingerprints

50.4 Finding Near-Duplicate Documents

50.5 Conclusions

References

Chapter 51: The Web as a Dynamic Graph

51.1 Introduction

51.2 Experimental Observations

51.3 Theoretical Growth Models

51.4 Properties of Web Graphs and Web Algorithmics

51.4.1 Generating Function Framework

51.4.2 Average Path Length

51.4.3 Emergence of Giant Components

51.4.4 Search on Web Graphs

51.4.5 Crawling and Trawling

51.5 Conclusions

References

Chapter 52: Layout Data Structures

52.1 Introduction

52.2 VLSI Technology

52.3 Layout Data Structures: an Overview

52.4 Corner Stitching

52.4.1 Point Finding

52.4.2 Tile Insertion

52.4.3 Storage Requirements of the Corner Stitching Data Structure

52.5 Corner Stitching Extensions

52.5.1 Expanded Rectangles

52.5.2 Trapezoidal Tiles

52.5.3 Curved Tiles

52.5.4 L-shaped Tiles

Rectilinear Polygons

Parallel Corner Stitching

Comments about Corner Stitching

52.6 Quad Trees and Variants

52.6.1 Bisector List Quad Trees

52.6.2 k-d Trees

52.6.3 Multiple Storage Quad Trees

52.6.4 Quad List Quad Trees

52.6.5 Bounded Quad Trees

52.6.6 HV Trees

52.6.7 Hinted Quad Trees

52.7 Concluding Remarks

Acknowledgment

References

Chapter 53: Floorplan Representation in VLSI

53.1 Introduction

53.1.1 Statement of Floorplanning Problem

53.1.2 Motivation of the Representation

53.1.3 Combinations and Complexities of the Various Representations

53.1.4 Slicing, Mosaic, LB Compact, and General Floorplans

53.2 Graph Based Representations

53.2.1 Constraint Graphs

The generation of constraint graphs

Triangulation

Tutte’s duality

53.2.2 Corner Stitching

53.2.3 Twin Binary Tree

53.2.4 Single Tree Representations

53.3 Placement Based Representations

53.3.1 Sequence-Pair

53.3.2 Bounded-Sliceline Grid

53.3.3 Corner Block List

53.3.4 Slicing Tree

53.4 Relationships of the Representations

53.4.1 Summary of the Relationships

53.4.2 A Mosaic Floorplan Example

53.4.3 A General Floorplan Example

53.5 Rectilinear Shape Handling

53.6 Conclusions

53.7 Acknowledgment

References

Chapter 54: Computer Graphics

54.1 Introduction

54.1.1 Hardware and Pipeline

54.2 Basic Applications

54.2.1 Meshes

54.2.2 CAD/CAM Drawings

54.2.3 Fonts

54.2.4 Bitmaps

54.2.5 Texture Mapping

54.3 Data Structures

54.3.1 Vertices, Edges, and Faces

54.3.2 Vertex, Normal, and Face Lists

54.3.3 Winged Edge

54.3.4 Tiled, Multidimensional Array

54.3.5 Linear Interpolation and Bezier Curves

54.4 Applications of Previously Discussed Structures

54.4.1 Hidden Surface Removal: An Application of the BSP Tree

54.4.2 Proximity and Collision: Other Applications of the BSP Tree

54.4.3 More With Trees: CSG Modeling

References

Chapter 55: Geographic Information Systems

55.1 Geographic Information Systems: What They Are All About

55.1.1 Geometric Objects

55.1.2 Topological versus Metric Data

55.1.3 Geometric Operations

55.1.4 Geometric Data Structures

55.1.5 Applications of Geographic Information

Map Overlay

Map Labeling

Cartographic Generalization

Road Maps

Spatiotemporal Data

Data Mining

55.2 Space Filling Curves: Order in Many Dimensions

55.2.1 Recursively Defined Space Filling Curves

55.2.2 Range Queries for Space Filling Curve Data Structures

55.2.3 Are All Space Filling Curves Created Equal?

55.2.4 Many Curve Pieces for a Query Range

55.2.5 One Curve Piece for a Query Range

55.3 Spatial Join

55.3.1 External Algorithms

Index on both spatial relations

Index on one spatial relation

Index on none of the inputs

55.3.2 Advanced Issues

55.4 Models, Toolboxes and Systems for Geographic Information

55.4.1 Standardized Data Models

55.4.2 Commercial Systems

Oracle

SpatialWare

LEDA and CGAL

JTS Topology Suite

55.4.3 Research Prototypes

SAND

XXL

Dedale

Acknowledgment

References

Chapter 56: Collision Detection

56.1 Introduction

56.2 Convex Polytopes

56.2.1 Linear Programming

56.2.2 Voronoi-Based Marching Algorithm

Polytope Representation

Local Walk

Implementation and Application

56.2.3 Minkowski Sums and Convex Optimization

56.3 General Polygonal Models

56.3.1 Interference Detection using Trees of Oriented Bounding Boxes

OBBTree Construction

Interference Detection

OBB Representation and Overlap Test

Implementation and Application

56.3.2 Performance of Bounding Volume Hierarchies

56.4 Penetration Depth Computation

56.4.1 Convex Polytopes

56.4.2 Incremental Penetration Depth Computation

Local Walk

Initialization and Refinement

Implementation and Application

56.4.3 Non-Convex Models

56.5 Large Environments

56.5.1 Multiple-Object Collision Detection

One-Dimensional Sweep and Prune

Implementation and Application

56.5.2 Two-Dimensional Intersection Tests

References

Chapter 57: Image Data Structures

57.1 Introduction

57.2 What is Image Data?

57.3 Quadtrees

57.3.1 What is a Quadtree?

57.3.2 Variants of Quadtrees

Region quadtrees

Line quadtrees

Edge quadtrees

Template quadtrees

57.4 Virtual Quadtrees

57.4.1 Compact Quadtrees

57.4.2 Forest of Quadtrees (FQT)

57.5 Quadtrees and R-trees

57.6 Octrees

57.7 Translation Invariant Data Structure (TID)

57.8 Content-Based Image Retrieval System

57.8.1 What is CBIR?

General structure of CBIR systems

57.8.2 An Example of CBIR System

57.9 Summary

57.10 Acknowledgments

References

Chapter 58: Computational Biology

58.1 Introduction

58.2 Discovering Unusual Words

Statistical analysis of words

Detecting unusual words

58.3 Comparing Whole Genomes

Basic Definitions

Computation of multiMEMs

Space efficient computation of MEMs for two genomes

Acknowledgment

References

Chapter 59: Elimination Structures in Scientific Computing

59.1 The Elimination Tree

59.1.1 The Elimination Game

59.1.2 The Elimination Tree Data Structure

59.1.3 An Algorithm

59.1.4 A Skeleton Graph

59.1.5 Supernodes

59.2 Applications of Etrees

59.2.1 Efficient Symbolic Factorization

59.2.2 Predicting Row and Column Nonzero Counts

59.2.3 Three Classes of Factorization Algorithms

59.2.4 Scheduling Parallel Factorizations

59.2.5 Scheduling Out-of-Core Factorizations

59.3 The Clique Tree

59.3.1 Chordal Graphs and Clique Trees

59.3.2 Design of Efficient Algorithms with Clique Trees

59.3.3 Compact Clique Trees

59.4 Clique Covers and Quotient Graphs

59.4.1 Clique Covers

59.4.2 Quotient Graphs

59.4.3 The Problem of Degree Updates

59.4.4 Covering the Column-Intersection Graph and Biclique Covers

59.5 Column Elimination Trees and Elimination DAGS

59.5.1 The Column Elimination Tree

59.5.2 Elimination DAGS

59.5.3 Elimination Structures for the Asymmetric Multifrontal Algorithm

Acknowledgment

References

Chapter 60: Data Structures for Databases

60.1 Overview of the Functionality of a Database Management System

60.2 Data Structures for Query Processing

60.2.1 Index Structures

One-dimensional Indexes

Multi-dimensional Indexes

60.2.2 Sorting Large Data Sets

60.2.3 The Parse Tree

60.2.4 Expression Trees

60.2.5 Histograms

60.3 Data Structures for Buffer Management

60.4 Data Structures for Disk Space Management

60.4.1 Record Organizations

60.4.2 Page Organizations

60.4.3 File Organization

60.5 Conclusion

References

Chapter 61: Data Mining

61.1 Introduction

61.1.1 Data Mining Tasks and Techniques

61.1.2 Challenges of Data Mining

61.1.3 Data Mining and the Role of Data Structures and Algorithms

61.2 Classification

61.2.1 Nearest-Neighbor Classifiers

61.2.2 Proximity Graphs for Enhancing Nearest Neighbor Classifiers

61.3 Association Analysis

61.3.1 Hash Tree Structure

61.3.2 FP-Tree Structure

61.4 Clustering

61.4.1 Hierarchical and Partitional Clustering

61.4.2 Nearest Neighbor Search and Multi-Dimensional Access Methods

61.5 Conclusion

Acknowledgment

References

Chapter 62: Computational Geometry: Fundamental Structures

62.1 Introduction

62.2 Arrangements

62.2.1 Substructures and Complexity

62.2.2 Decomposition

62.2.3 Duality

62.3 Convex Hulls

62.3.1 Complexity

62.3.2 Construction

62.3.3 Dynamic Convex Hulls

62.4 Voronoi Diagrams

62.4.1 Complexity

62.4.2 Construction

62.4.3 Variations

62.5 Triangulations

62.5.1 Delaunay Triangulation

62.5.2 Polygons

62.5.3 Polyhedra

62.5.4 Pseudo-Triangulations

References

Chapter 63: Computational Geometry: Proximity and Location

63.1 Introduction

63.2 Point Location

63.2.1 Kirkpatrick’s Algorithm

63.2.2 Slab-Based Methods and Persistent Trees

63.2.3 Separating Chains and Fractional Cascading

63.2.4 Trapezoidal Maps and the History Graph

63.2.5 Worst- and Expected-Case Optimal Point Location

63.3 Proximity Structures

63.3.1 Voronoi Diagrams

63.3.2 Delaunay Triangulations

63.3.3 Other Geometric Proximity Structures

63.4 Nearest Neighbor Searching

63.4.1 Nearest Neighbor Searching through Point Location

63.4.2 K-d trees

63.4.3 Other Approaches to Nearest Neighbor Searching

63.4.4 Approximate Nearest Neighbor Searching

63.4.5 Approximate Voronoi Diagrams

63.5 Sources and Related Material

Acknowledgments

References

Chapter 64: Computational Geometry: Generalized Intersection Searching

64.1 Geometric Intersection Searching Problems

64.1.1 Generalized Intersection Searching

64.2 Summary of Known Results

64.2.1 Axes-Parallel Objects

64.2.2 Arbitrarily-Oriented Objects

64.2.3 Problems on the Grid

64.2.4 Single-Shot Problems

64.3 Techniques

64.3.1 A Transformation-Based Approach

The Dynamic Reporting Problem

The static counting problem

The dynamic counting problem

The static type-2 problem

64.3.2 A Sparsification-Based Approach

Generalized halfspace range searching in R2 and R3

64.3.3 A Persistence-Based Approach

Generalized semi-dynamic quadrant searching

Generalized semidynamic 2-dimensional range searching

Generalized 3-dimensional range searching

64.3.4 A General Approach for Reporting Problems

64.3.5 Adding Range Restrictions

64.4 Conclusion and Future Directions

64.5 Acknowledgment

References

《数据结构与算法的艺术:高效计算的基石》 本书深入探讨了数据结构和算法的核心概念,旨在为读者构建一个坚实且灵活的计算思维框架。我们相信,理解并掌握高效的数据组织方式与解决问题的策略,是任何软件开发人员、数据科学家乃至科学研究者不可或缺的技能。因此,本书并非简单罗列各种数据结构和算法的定义,而是着重于它们背后的设计哲学、适用场景以及性能权衡,引导读者学会如何根据实际问题选择最合适、最高效的工具。 核心概念的深度剖析: 本书从最基础的线性数据结构开始,细致地讲解了数组、链表(单向、双向、循环)、栈和队列。我们不仅会介绍它们的实现细节,更会深入分析它们在不同操作(插入、删除、查找)下的时间复杂度和空间复杂度,并提供丰富的应用场景示例,例如使用链表实现动态内存分配,利用栈进行表达式求值或函数调用管理,以及队列在任务调度和广度优先搜索中的关键作用。 随着篇幅的深入,我们将逐步引入非线性数据结构,重点关注树和图。对于树结构,本书将覆盖二叉树、二叉搜索树、平衡二叉搜索树(AVL树、红黑树)、堆(最大堆、最小堆)以及B树等。我们将详细讲解这些树的构造、遍历、插入、删除操作,并深入分析它们的平衡机制如何保证高效的查找性能。特别地,我们会探讨它们在数据库索引、文件系统和优先队列等实际应用中的重要性。 对于图结构,本书将全面介绍图的表示方法(邻接矩阵、邻接表),以及图的遍历算法(深度优先搜索DFS、广度优先搜索BFS)。在此基础上,我们将深入讲解一系列经典的图算法,包括最短路径算法(Dijkstra、Floyd-Warshall)、最小生成树算法(Prim、Kruskal)以及拓扑排序等。这些算法在网络路由、社交网络分析、任务依赖关系解析等领域拥有广泛的应用。 算法设计与分析的智慧: 除了静态的数据结构,本书还将聚焦于算法的设计与分析。我们将系统地介绍几种主要的算法设计范式,包括: 分治法 (Divide and Conquer): 通过将问题分解为规模更小的子问题来解决,如归并排序、快速排序、二分查找。我们会详细解析分治法的递归思想,并分析其时间复杂度的求解方法。 动态规划 (Dynamic Programming): 适用于具有重叠子问题和最优子结构性质的问题。本书将通过斐波那契数列、背包问题、最长公共子序列等经典示例,逐步引导读者掌握动态规划的状态定义、状态转移方程的构建以及迭代与递归两种实现方式。 贪心算法 (Greedy Algorithm): 在每一步选择局部最优解,期望达到全局最优。我们将通过活动选择问题、霍夫曼编码等案例,阐述贪心算法的设计思路、适用条件以及何时会失效。 回溯法 (Backtracking): 一种通过试探性地搜索解空间来找出所有解的算法。本书将利用N皇后问题、组合总和等问题,讲解回溯法的搜索树构建、剪枝策略以及如何系统地探索所有可能的解决方案。 性能分析与优化: 本书始终强调算法和数据结构的性能分析,即时间复杂度和空间复杂度。我们将介绍大O记法、Ω记法和Θ记法等渐进符号,帮助读者准确地评估算法的效率,并学会如何比较不同算法的优劣。此外,本书还将探讨一些常见的优化技巧,例如记忆化搜索、空间换时间等,引导读者在实际开发中做出明智的性能决策。 现代应用中的实践: 为了让读者更好地理解理论知识在实际中的应用,本书穿插了大量的实例和场景分析。我们将讨论: 字符串匹配算法: KMP算法、Boyer-Moore算法在文本搜索中的应用。 哈希表 (Hash Table): 及其在缓存、查找表、Set和Map实现中的高效性,并讨论冲突解决方法。 排序算法的综合比较: 深入分析各种排序算法(冒泡、选择、插入、归并、快速、堆排序、计数排序、基数排序)的适用场景和稳定性。 并发数据结构: 简要介绍在多线程环境中需要考虑的数据结构问题。 本书的目标读者: 本书适合计算机科学专业的学生、软件工程师、数据科学家、算法工程师以及任何对提升编程能力和计算效率感兴趣的读者。无论您是初学者希望打下坚实的基础,还是有经验的开发者希望系统地梳理和深化对数据结构与算法的理解,本书都能为您提供宝贵的指导和启发。 通过学习本书,您将能够: 清晰地理解各种基本和高级数据结构的内部工作原理。 熟练掌握常见的算法设计技术,并能灵活应用于解决实际问题。 准确地分析算法和数据结构的时间与空间复杂度。 具备根据问题需求选择最合适的数据结构和算法的能力。 提升代码的效率和健壮性,成为更优秀的计算实践者。 我们相信,《数据结构与算法的艺术》将成为您在计算领域探索和创新的得力助手。

作者简介

目录信息

读后感

评分

评分

评分

评分

评分

用户评价

评分

然而,当我翻阅到后半部分,即“应用”的部分时,我发现这本书的侧重点似乎稍微有些偏向学术研究,对于当前业界主流技术栈的融合度略显不足。例如,虽然它详细介绍了B树和B+树的结构,这对数据库内核开发者是极好的参考,但对于处理海量非结构化数据的读者来说,对NoSQL数据库底层结构(如LSM-Tree或某些特定的图数据库索引机制)的讨论就显得有些轻描淡写了。我期待看到更多关于如何将这些抽象数据结构映射到现代云计算环境下的实际场景,比如分布式缓存层如何利用跳跃表(Skip List)来实现快速查找,或者在内存计算框架中如何优化内存布局以适应CPU缓存行。书中确实提到了哈希表,但主要集中在理想情况下的性能,对于处理“冲突解决策略”的实际工程优化——比如Cuckoo Hashing或者分段式开放寻址法在特定负载下的表现差异——着墨不多。总体而言,这本书的“应用”更像是对理论如何能被“应用”的哲学探讨,而非一份紧跟时代脉搏的工程实践指南。这使得它在作为“应用手册”时,稍微失去了一点点锐度。

评分

语言风格方面,这本书保持了一种极其克制和严谨的学术口吻,这对于专业人士来说是优点,但对于自学者或希望快速入门的读者来说,可能会感到有些“冷峻”。作者几乎从不使用任何口语化的比喻或类比来解释复杂概念,一切都建立在形式逻辑之上。例如,在讨论堆(Heap)结构时,它直接从完全二叉树的性质推导到数组表示法的索引关系,逻辑链条是完美的,但缺少那种能瞬间击中要害的“顿悟时刻”。我个人偏好那种在讲解完严格定义后,会用一句通俗易懂的话来总结其核心思想的写作方式,比如“这就像一个永远不会忘记自己是谁的优先队列”。这本书似乎刻意避开了这种“捷径”,坚持用最纯粹的数学语言去构建知识体系。这无疑确保了内容的准确性和永恒性,但代价是牺牲了部分读者的阅读友好度和学习的即时反馈感。它更像是一本需要虔诚对待的参考典籍,而不是一本可以轻松翻阅的“伴侣”。

评分

这本书的排版和图示设计,是另一个让我印象深刻的方面,但其效果是双刃剑。从视觉美观度上来说,它的黑白印刷清晰,数学符号渲染得非常精准,这对于需要精确复制公式和算法步骤的读者是极大的便利。但是,在解释那些高度依赖空间感知的结构时,比如红黑树的颜色平衡维护,或是2-3-4树的节点分裂过程,单靠静态的、二维的插图显得力不从心。我常常需要合上书本,拿起草稿纸,自己手绘多帧动画来理解节点是如何在插入和删除后进行递归调整的。如果书中能加入一些二维码链接,引导读者访问配套的交互式可视化工具,那该书的价值将呈指数级增长。现在的插图更像是最终的稳定状态快照,而非动态演变的过程记录。对于初次接触这些自平衡结构的人来说,这种静态展示的局限性会大大增加理解的门槛。它要求读者拥有极强的空间想象力和对算法流程的耐心,否则很容易在复杂的旋转和提升操作中迷失方向。

评分

这本《数据结构与应用手册》的定位似乎非常明确,瞄准的是那些希望在理论深度和实际操作之间找到完美平衡的读者。我拿起来的时候,首先被它扎实的理论基础所吸引。它没有停留在教科书上那些浅尝辄止的定义,而是深入到了各种复杂数据结构背后的数学原理和时间复杂度分析。比如,在讨论平衡二叉搜索树时,作者花费了大量篇幅来推导旋转操作的必要性和效率保证,这对于准备高级算法面试或者进行底层系统优化的工程师来说,无疑是宝贵的财富。书中对于图论算法的讲解,也远超出了普通入门读物的水准,它细致地拆解了Dijkstra、Floyd-Warshall等经典算法的每一步迭代过程,并配以清晰的伪代码和性能瓶颈分析。我特别欣赏作者在阐述动态规划时所采用的“最优子结构”和“重叠子问题”的递进式讲解,它不是简单地罗列公式,而是引导读者亲手构建状态转移方程。可以说,光是啃透这本书的前半部分关于基础结构和经典算法的部分,就已经能让一个初级开发者对“效率”二字有了更深刻的敬畏感。这绝对不是一本可以囫囵吞枣的书,它需要读者带着批判性的思维去消化每一个严谨的论证。

评分

最后,关于本书的“参考资料”部分,我发现它在引文的广度和深度上,体现了作者深厚的学术积累。列举的论文和早期计算机科学著作,大多是奠定该领域基石的经典文献,这对于想要追踪特定算法源头和演进历史的读者来说,提供了绝佳的路径。然而,这种对“经典”的侧重,也造成了对近十年内新兴研究领域的覆盖不足。例如,在讨论高性能计算和并行数据结构时,虽然提到了锁机制和内存一致性模型的理论基础,但对于现代GPU编程模型下的数据布局优化,或者基于无锁(lock-free)或等待无关(wait-free)数据结构的最新进展,提及得非常有限。一本书要做到“全面”是苛刻的要求,但作为一本“应用手册”,它应该更倾向于在传统坚实的基础上,对前沿的工程挑战有所呼应。总的来说,它是一部极其优秀的理论奠基之作,但其“应用”的广度,可能需要读者自己结合最新的开源项目和会议论文来加以补充,才能真正成为一座连接理论与前沿实践的桥梁。

评分

评分

评分

评分

评分

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 book.wenda123.org All Rights Reserved. 图书目录大全 版权所有