In this blog, 25.000 books will be uploaded, so far more than 1400 books are available. Books, will be added daily, please check this blog daily.
Tuesday, April 20, 2010
Algorithms and Data Structures, The Basic Toolbox
Contents
1 Appetizer: Integer Arithmetics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Addition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Multiplication: The School Method . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Result Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 A Recursive Version of the School Method . . . . . . . . . . . . . . . . . . . . 7
1.5 Karatsuba Multiplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Algorithm Engineering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7 The Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.8 Proofs of Lemma 1.5 and Theorem 1.7 . . . . . . . . . . . . . . . . . . . . . . . 16
1.9 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.10 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 18
2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1 Asymptotic Notation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2 The Machine Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3 Pseudocode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4 Designing Correct Algorithms and Programs . . . . . . . . . . . . . . . . . . 31
2.5 An Example – Binary Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.6 Basic AlgorithmAnalysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.7 Average-Case Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.8 Randomized Algorithms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.9 Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.10 P and NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.11 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.12 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 57
3 Representing Sequences by Arrays and Linked Lists . . . . . . . . . . . . . . . 59
3.1 Linked Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.2 Unbounded Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.3 *Amortized Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.4 Stacks and Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.5 Lists Versus Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.6 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.7 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 79
4 Hash Tables and Associative Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.1 Hashing with Chaining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.2 Universal Hashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.3 Hashing with Linear Probing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.4 Chaining Versus Linear Probing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.5 *Perfect Hashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.6 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.7 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 97
5 Sorting and Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.1 Simple Sorters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
5.2 Mergesort – an O(nlogn) Sorting Algorithm . . . . . . . . . . . . . . . . . . 103
5.3 A Lower Bound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
5.4 Quicksort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
5.5 Selection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.6 Breaking the Lower Bound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.7 *External Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
5.8 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
5.9 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 124
6 Priority Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
6.1 Binary Heaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
6.2 Addressable Priority Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
6.3 *ExternalMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
6.4 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.5 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 142
7 Sorted Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
7.1 Binary Search Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
7.2 (a,b)-Trees and Red–Black Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
7.3 More Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
7.4 Amortized Analysis of Update Operations . . . . . . . . . . . . . . . . . . . . . 158
7.5 Augmented Search Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
7.6 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
7.7 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 164
8 Graph Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
8.1 Unordered Edge Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
8.2 Adjacency Arrays – Static Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
8.3 Adjacency Lists – Dynamic Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . 170
8.4 The Adjacency Matrix Representation . . . . . . . . . . . . . . . . . . . . . . . . 171
8.5 Implicit Representations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
8.6 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
8.7 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 174
9 Graph Traversal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
9.1 Breadth-First Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
9.2 Depth-First Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
9.3 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
9.4 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 189
10 Shortest Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
10.1 From Basic Concepts to a Generic Algorithm . . . . . . . . . . . . . . . . . . 192
10.2 Directed Acyclic Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
10.3 Nonnegative Edge Costs (Dijkstra’s Algorithm) . . . . . . . . . . . . . . . . 196
10.4 *Average-Case Analysis of Dijkstra’s Algorithm . . . . . . . . . . . . . . . 199
10.5 Monotone Integer Priority Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
10.6 Arbitrary Edge Costs (Bellman–Ford Algorithm) . . . . . . . . . . . . . . . 206
10.7 All-Pairs Shortest Paths and Node Potentials . . . . . . . . . . . . . . . . . . . 207
10.8 Shortest-Path Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
10.9 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
10.10 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 214
11 Minimum Spanning Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
11.1 Cut and Cycle Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
11.2 The JarnÃk–Prim Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
11.3 Kruskal’s Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
11.4 The Union–Find Data Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
11.5 *ExternalMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
11.6 Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
11.7 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
11.8 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 231
12 Generic Approaches to Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
12.1 Linear Programming – a Black-Box Solver . . . . . . . . . . . . . . . . . . . . 234
12.2 Greedy Algorithms – Never Look Back . . . . . . . . . . . . . . . . . . . . . . . 239
12.3 Dynamic Programming – Building It Piece by Piece . . . . . . . . . . . . 243
12.4 Systematic Search – When in Doubt, Use Brute Force . . . . . . . . . . . 246
12.5 Local Search – Think Globally, Act Locally . . . . . . . . . . . . . . . . . . . 249
12.6 Evolutionary Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
12.7 Implementation Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
12.8 Historical Notes and Further Findings . . . . . . . . . . . . . . . . . . . . . . . . 262
A Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
A.1 Mathematical Symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
A.2 Mathematical Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
A.3 Basic Probability Theory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
A.4 Useful Formulae . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Download this book click here
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment