A good algorithm usually comes together with a set of good data structures that allow the algorithm to manipulate the data efficiently. In this 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?
------------- TIME STAMP -------------
BASIC DATA STRUCTURES
0:00:00 Arrays
0:07:31 Singly-Linked Lists
0:16:33 Doubly-Linked Lists
0:21:12 Stacks
0:31:33 Queues
0:38:46 Trees
0:49:59 Tree Traversal
DYNAMIC ARRAYS AND AMORTIZED ANALYSIS
1:00:25 Dynamic Arrays
1:08:58 Amortized Analysis Aggregate Method
1:14:41 Amortized Analysis Banker's Method
1:20:53 Amortized Analysis Physicist's Method
1:28:26 Amortized Analysis Summary
PRIORITY QUEUES AND DISJOINT SETS
1:31:20 Introduction
1:37:27 Naive Implementations Priority Queues
1:43:25 Binary Trees
1:44:51 Basic Operations
1:57:33 Complete Binary Trees
2:07:00 Psuedocode
2:15:31 Heap Sort
2:26:29 Building a Heap
2:37:03 Final Remarks
2:41:05 Overview
2:48:47 Naive Implementations
2:58:49 Trees for Disjoint Sets
3:06:44 Union by Rank
3:16:26 Path Compression
3:22:33 Analysis (Optional)
HASH TABLES
3:40:50 Application of Hashing
3:43:27 Analysing Service Access Logs
3:51:20 Direct Addressing
3:58:42 List-Based Mapping
4:06:53 Hash Functions
4:10:11 Chaining Scheme
4:16:19 Chaining Implementation and Analysis
4:22:19 Hash Tables
4:28:46 Phone Book Problem
4:33:03 Phone Book Problem - Continued
4:39:52 Universal Family
4:49:35 Hashing Integers
4:58:52 Proof Upper Bound for Chain Lengh (Optional)
5:07:36 Proof Universal Family for Integers (Optional)
5:19:16 Hashing Strings
5:28:50 Hashing Strings - Cardinality Fix
5:35:51 Search Pattern in Text
5:43:01 Rabin-Karp's Algorithm
5:52:46 Optimization Precomputation
6:02:11 Optimization Implementation and Analysis
6:08:09 Instant Uploads and Storage Optimization in Dropbox
6:18:47 Distributed Hash Tables
BINARY SEARCH TREES
6:30:49 Introduction
6:38:30 Search Trees
6:43:33 Basic Operations
6:54:12 Balance
6:59:55 AVL Trees
7:05:49 AVL Tree Implementation
7:15:41 Split and Merge
BINARY SEARCH TREES 2
7:25:34 Applications
7:36:05 Splay Trees Introduction
7:42:51 Splay Trees Implementation
7:50:51 (Optional) Splay Trees Analysis
⭐ Important Notes ⭐
⌨️ This course is created in collaboration with University of California
#datastructuresandalgorithmsinpython
#datastructures
#datastructuresandalgorithmsinc++
#datastructuresandalgorithmsinjava
#datastructuresandalgorithmsinpython
data structures and algorithms,
data structures tutorial,
algorithms tutorial,
linked lists,
arrays,
hash maps,
hash tables,
java,
data structures course,
data structues,
java data structures,
programming,
programmer,
whiteboard interview,
cracking the coding interview,
java algorithms,