- Level Professional
- Duration 25 hours
- Course by University of California San Diego
-
Offered by
About
A good algorithm usually comes together with a set of good data structures that allow the algorithm to manipulate the data efficiently. In this online course, we consider the common data structures that are used in various computational problems. You will learn how these data structures are implemented in different programming languages and will practice implementing them in our programming assignments. This will help you to understand what is going on inside a particular built-in implementation of a data structure and what to expect from it. You will also learn typical use cases for these data structures. A few examples of questions that we are going to cover in this class are the following: 1. What is a good strategy of resizing a dynamic array? 2. How priority queues are implemented in C++, Java, and Python? 3. How to implement a hash table so that the amortized running time of all operations is O(1) on average? 4. What are good strategies to keep a binary tree balanced? You will also learn how services like Dropbox manage to upload some large files instantly and to save a lot of storage space!Modules
Welcome
1
Readings
- Welcome
Arrays and Linked Lists
3
Videos
- Arrays
- Singly-Linked Lists
- Doubly-Linked Lists
1
Readings
- Slides and External References
Stacks and Queues
2
Videos
- Stacks
- Queues
1
Readings
- Slides and External References
Trees
1
Assignment
- Basic Data Structures
2
Videos
- Trees
- Tree Traversal
1
Readings
- Slides and External References
Programming Assignment 1
- Programming Assignment 1: Basic Data Structures
2
Readings
- Available Programming Languages
- FAQ on Programming Assignments
Acknowledgements (Optional)
1
Readings
- Acknowledgements
Dynamic Arrays and Amortized Analysis
1
Assignment
- Dynamic Arrays and Amortized Analysis
5
Videos
- Dynamic Arrays
- Amortized Analysis: Aggregate Method
- Amortized Analysis: Banker's Method
- Amortized Analysis: Physicist's Method
- Amortized Analysis: Summary
1
Readings
- Slides and External References
Priority Queues: Introduction
2
Videos
- Introduction
- Naive Implementations of Priority Queues
1
Readings
- Slides
Priority Queues: Heaps
4
Videos
- Binary Trees
- Basic Operations
- Complete Binary Trees
- Pseudocode
2
Readings
- Tree Height Remark
- Slides and External References
Priority Queues: Heap Sort
1
Assignment
- Priority Queues: Quiz
3
Videos
- Heap Sort
- Building a Heap
- Final Remarks
1
Readings
- Slides and External References
Disjoint Sets: Naive Implementations
2
Videos
- Overview
- Naive Implementations
1
Readings
- Slides and External References
Disjoint Sets: Efficient Implementation
1
Assignment
- Quiz: Disjoint Sets
4
Videos
- Trees for Disjoint Sets
- Union by Rank
- Path Compression
- Analysis (Optional)
1
Readings
- Slides and External References
Programming Assignment 2
- Programming Assignment 2: Priority Queues and Disjoint Sets
1
Assignment
- Priority Queues and Disjoint Sets
Survey
Introduction, Direct Addressing and Chaining
7
Videos
- Applications of Hashing
- Analysing Service Access Logs
- Direct Addressing
- Hash Functions
- Chaining
- Chaining Implementation and Analysis
- Hash Tables
1
Readings
- Slides and External References
Hash Functions
1
Assignment
- Hash Tables and Hash Functions
5
Videos
- Phone Book Data Structure
- Universal Family
- Hashing Phone Numbers
- Hashing Names
- Analysis of Polynomial Hashing
1
Readings
- Slides and External References
Search Substring
4
Videos
- Find Substring in Text
- Rabin-Karp's Algorithm
- Recurrence for Substring Hashes
- Improving Running Time
1
Readings
- Slides and External References
Blockchain
4
Videos
- Julia's Diary
- Julia's Bank
- Blockchain
- Merkle Tree
1
Readings
- Slides and External References
Programming Assignment 3
- Programming Assignment 3: Hash Tables
1
Assignment
- Hashing
Binary Search Trees
4
Videos
- Introduction
- Search Trees
- Basic Operations
- Balance
1
Readings
- Slides and External References
AVL Trees
1
Assignment
- Binary Search Trees
3
Videos
- AVL Trees
- AVL Tree Implementation
- Split and Merge
1
Readings
- Slides and External References
Applications
1
Videos
- Applications
1
Readings
- Slides and External References
Splay Trees
3
Videos
- Splay Trees: Introduction
- Splay Trees: Implementation
- (Optional) Splay Trees: Analysis
1
Readings
- Slides and External References
Programming Assignment 4
- Programming Assignment 4: Binary Search Trees
1
Assignment
- Splay Trees
Auto Summary
Discover the intricacies of data structures with this comprehensive online course, perfect for IT and Computer Science professionals. Learn about dynamic arrays, priority queues, hash tables, and balanced binary trees through hands-on programming assignments. Gain insights into the implementation across languages like C++, Java, and Python. Dive into real-world applications, such as efficient file storage solutions. Offered by Coursera, this 1500-minute course is available with a Starter subscription. Ideal for those looking to deepen their understanding of data structures and algorithms.

Neil Rhodes

Daniel M Kane
Michael Levin

Michael Levin

Alexander S. Kulikov