书籍 Handbook of Data Structures and Applications的封面

Handbook of Data Structures and Applications

Dinesh P. Mehta

出版时间

2004-10-28

ISBN

9781584884354

评分

★★★★★

标签

算法

书籍介绍

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