Log In
Or create an account -> 
Imperial Library
  • Home
  • About
  • News
  • Upload
  • Forum
  • Help
  • Login/SignUp

Index
Preface
About the Book
About the Authors Learning Objectives Audience Approach Hardware Requirements Software Requirements Installation and Setup Installing the Code Bundle Additional Resources
1. Lists, Stacks, and Queues
Introduction Contiguous Versus Linked Data Structures
Contiguous Data Structures Linked Data Structures Comparison Limitations of C-style Arrays
std::array
Exercise 1: Implementing a Dynamic Sized Array Exercise 2: A General-Purpose and Fast Data Storage Container Builder
std::vector
std::vector – Variable Length Array Allocators for std::vector
std::forward_list
Inserting and Deleting Elements in forward_list Other Operations on forward_list Exercise 3: Conditional Removal of Elements from a Linked List Using remove_if
Iterators
Exercise 4: Exploring Different Types of Iterators Exercise 5: Building a Basic Custom Container Activity 1: Implementing a Song Playlist
std::list
Common Functions for std::list Exercise 6: Insertion and Deletion Functions for std::list Bidirectional Iterators Iterator Invalidation for Different Containers Activity 2: Simulating a Card Game
std::deque – Special Version of std::vector
The Structure of Deque
Container Adaptors
std::stack std::queue std::priority_queue Iterators for Adaptors
Benchmarking
Activity 3: Simulating a Queue for a Shared Printer in an Office
Summary
2. Trees, Heaps, and Graphs
Introduction Non-Linear Problems
Hierarchical Problems Cyclic Dependencies
Tree – It's Upside Down!
Exercise 7: Creating an Organizational Structure Traversing Trees Exercise 8: Demonstrating Level Order Traversal
Variants of Trees
Binary Search Tree Time Complexities of Operations on a Tree Exercise 9: Implementing a Binary Search Tree Balanced Tree N-ary Tree Activity 4: Create a Data Structure for a Filesystem
Heaps
Heap Operations Exercise 10: Streaming Median Activity 5: K-Way Merge Using Heaps
Graphs
Representing a Graph as an Adjacency Matrix Exercise 11: Implementing a Graph and Representing it as an Adjacency Matrix Representing a Graph as an Adjacency List Exercise 12: Implementing a Graph and Representing it as an Adjacency List
Summary
3. Hash Tables and Bloom Filters
Introduction Hash Tables
Hashing Exercise 13: Basic Dictionary for Integers
Collisions in Hash Tables
Close Addressing – Chaining Exercise 14: Hash Table with Chaining Open Addressing Perfect Hashing – Cuckoo Hashing Exercise 15: Cuckoo Hashing
C++ Hash Tables
Exercise 16: Hash Tables Provided by STL Activity 6: Mapping Long URLs to Short URLs
Bloom Filters
Exercise 17: Creating Bloom Filters Activity 7: Email Address Validator
Summary
4. Divide and Conquer
Introduction Binary Search
Exercise 18: Binary Search Benchmarks Activity 8: Vaccinations
Understanding the Divide-and-Conquer Approach Sorting Using Divide and Conquer
Merge Sort Exercise 19: Merge Sort Quicksort Exercise 20: Quicksort Activity 9: Partial Sorting Linear Time Selection Exercise 21: Linear Time Selection
C++ Standard Library Tools for Divide and Conquer Dividing and Conquering at a Higher Abstraction Level – MapReduce
The Map and Reduce Abstractions Exercise 22: Map and Reduce in the C++ Standard Library Integrating the Parts – Using a MapReduce Framework Exercise 23: Checking Primes Using MapReduce Activity 10: Implementing WordCount in MapReduce
Summary
5. Greedy Algorithms
Introduction Basic Greedy Algorithms
Shortest-Job-First Scheduling Exercise 24: Shortest-Job-First Scheduling
The Knapsack Problem(s)
The Knapsack Problem The Fractional Knapsack Problem Exercise 25: Fractional Knapsack Problem Activity 11: The Interval Scheduling Problem Requirements for Greedy Algorithms The Minimum Spanning Tree (MST) Problem Disjoint-Set (or Union-Find) Data Structures Exercise 26: Kruskal's MST Algorithm
The Vertex Coloring Problem
Exercise 27: Greedy Graph Coloring Activity 12: The Welsh-Powell Algorithm
Summary
6. Graph Algorithms I
Introduction The Graph Traversal Problem
Breadth-First Search Exercise 28: Implementing BFS Depth-First Search Exercise 29: Implementing DFS Activity 13: Finding out Whether a Graph is Bipartite Using DFS
Prim's MST Algorithm
Exercise 30: Prim's Algorithm
Dijkstra's Shortest Path Algorithm
Exercise 31: Implementing Dijkstra's Algorithm Activity 14: Shortest Path in New York
Summary
7. Graph Algorithms II
Introduction Revisiting the Shortest Path Problem The Bellman-Ford Algorithm
Exercise 32: Implementing the Bellman-Ford Algorithm (Part I)
The Bellman-Ford Algorithm (Part II) – Negative Weight Cycles
Exercise 33: Implementing the Bellman-Ford Algorithm (Part II) Activity 15: Greedy Robot
Johnson's Algorithm
Exercise 34: Implementing Johnson's Algorithm Activity 16: Randomized Graph Statistics
Strongly Connected Components
Connectivity in Directed and Undirected Graphs
Kosaraju's Algorithm
Exercise 35: Implementing Kosaraju's Algorithm Activity 17: Maze-Teleportation Game
Choosing the Right Approach Summary
8. Dynamic Programming I
Introduction What Is Dynamic Programming? Memoization – The Top-Down Approach Tabulation – the Bottom-Up Approach Subset Sum Problem
Solving the Subset Sum Problem – Step 1: Evaluating the Need for DP Step 2 – Defining the States and the Base Cases Step 2.a: Brute Force Exercise 36: Solving the Subset Sum Problem by Using the Brute-Force Approach Step 2.b: Optimizing Our Approach – Backtracking Exercise 37: Solving the Subset Sum Problem by Using Backtracking Step 3: Memoization Devising a Caching Scheme Exercise 38: Solving the Subset Sum Problem by Using Memoization Step 4: Tabulation Exercise 39: Solving the Subset Sum Problem by Using Tabulation Activity 18: Travel Itinerary
Dynamic Programming on Strings and Sequences
The Longest Common Subsequence Problem Exercise 40: Finding the Longest Common Subsequence by Using the Brute-Force Approach First Steps Toward Optimization – Finding the Optimal Substructure Activity 19: Finding the Longest Common Subsequence by Using Memoization From Top-Down to Bottom-Up – Converting the Memoized Approach into a Tabulated Approach Activity 20: Finding the Longest Common Subsequence Using Tabulation
Activity 21: Melodic Permutations Summary
9. Dynamic Programming II
Introduction An Overview of P versus NP Reconsidering the Subset Sum Problem The Knapsack Problem
0-1 Knapsack – Extending the Subset Sum Algorithm Exercise 41: 0-1 Knapsack Problem Unbounded Knapsack State Space Reduction Exercise 42: Unbounded Knapsack Activity 22: Maximizing Profit
Graphs and Dynamic Programming
Reconsidering the Bellman-Ford Algorithm Approaching the Shortest Path Problem as a DP Problem Exercise 43: Single-Source Shortest Paths (Memoization) All-Pairs Shortest Path The Floyd-Warshall Algorithm Exercise 44: Implementing the Floyd-Warshall Algorithm Activity 23: Residential Roads
Summary
Appendix
Chapter 1: Lists, Stacks, and Queues
Activity 1: Implementing a Song Playlist Activity 2: Simulating a Card Game Activity 3: Simulating a Queue for a Shared Printer in an Office
Chapter 2: Trees, Heaps, and Graphs
Activity 4: Create a Data Structure for a Filesystem Activity 5: K-Way Merge Using Heaps
Chapter 3: Hash Tables and Bloom Filters
Activity 6: Mapping Long URLs to Short URLs Activity 7: Email Address Validator
Chapter 4: Divide and Conquer
Activity 8: Vaccinations Activity 9: Partial Sorting Activity 10: Implementing WordCount in MapReduce
Chapter 5: Greedy Algorithms
Activity 11: The Interval Scheduling Problem Activity 12: The Welsh-Powell Algorithm
Chapter 6: Graph Algorithms I
Activity 13: Finding out Whether a Graph is Bipartite Using DFS Activity 14: Shortest Path in New York
Chapter 7: Graph Algorithms II
Activity 15: Greedy Robot Activity 16: Randomized Graph Statistics Activity 17: Maze-Teleportation Game
Chapter 8: Dynamic Programming I
Activity 18: Travel Itinerary Activity 19: Finding the Longest Common Subsequence by Using Memoization Activity 20: Finding the Longest Common Subsequence Using Tabulation Activity 21: Melodic Permutations
Chapter 9: Dynamic Programming II
Activity 22: Maximizing Profit Activity 23: Residential Roads
  • ← Prev
  • Back
  • Next →
  • ← Prev
  • Back
  • Next →

Chief Librarian: Las Zenow <zenow@riseup.net>
Fork the source code from gitlab
.

This is a mirror of the Tor onion service:
http://kx5thpx2olielkihfyo4jgjqfb7zx7wxr3sd4xzt26ochei4m6f7tayd.onion