The course covers basic algorithmic techniques and ideas for computational problems arising frequently in practical applications: sorting and searching, divide and conquer, greedy algorithms, dynamic programming. We will learn a lot of theory: how to sort data and how it helps for searching; how to break a large problem into pieces and solve them recursively; when it makes sense to proceed greedily; how dynamic programming is used in genomic studies. You will practice solving computational problems, designing new algorithms, and implementing solutions efficiently (so that they run in less than a second).

------------ TIME STAMP -----------------------

PROGRAMMING CHALLENGES
0:00:00 Welcome
0:03:21 Solving the Sum of Two Digits Programming Challenge (screencast)
0:09:52 Solving the Maximum pairwise product Programming challenge Improving the naive solution, testing, debugging
0:23:30 Stress Test -Implementation
0:31:53 Strees Test -Find the Test and Debug
0:39:42 Strees Test -More Testing,Submit and Pass!

ALGORITHMIC WARM-UP
0:48:28 Why Study Algorithms
0:55:51 Coming Up
0:58:51 Problem Overview
1:02:12 Naive Algorithm
1:07:48 Efficient Algorithm
1:11:45 Problem Overview and Naive Algorithm
1:15:48 Efficient Algorithm
1:21:38 Computing Runtimes
1:31:43 Asymptotic NOtation
1:38:37 Big-O Notation
1:45:36 Using Big-O
1:55:45 Course Overview

GREEDY ALGORITHMS
2:05:51 Largest Number
2:08:34 Car Fueling
2:16:02 Car Fueling - Implementation and Analysis
2:25:17 Main Ingredients of Greedy Algorithms
2:27:57 Celebration Party Problem
2:34:55 Efficient Algorithms for Grouping Children
2:40:21 Analysis and Implementation of the Efficient Algorithm
2:45:46 Long HIke
2:52:24 Fractional Knapsack -Implementation, Analysis and Optimization
2:59:08 Review of Greedy Algorithm

DIVIDE-AND-CONQUER
3:01:55 Intro
3:05:19 Linear Search
3:12:39 Binary Search
3:19:49 Binary Search Runtime
3:28:09 Problem Overview and Naive Solution
3:34:31 Naive Divide and Conquer Algorithm
3:41:40 Faster Divide and Conquer Algorithm
3:48:21 What is the master Theorem
3:53:17 Proof of the Master Theorem
4:03:02 Problem Overview
4:05:47 Selection Sort
4:13:56 Merge Sort
4:24:49 Lower Bound for Comparison Based Sorting
4:36:59 Non-Comparison Based Sorting Algorithms
4:44:42 Overview
4:46:52 Algorithm
4:55:59 Random Pivot
5:09:03 Running Time Analysis (optional)
5:24:36 Equal Elements
5:31:07 Final Remarks

DYNAMIC PROGRAMMING 1
5:39:20 Change Problem
5:49:32 The Alignment Game
5:58:12 Computing Edit Distance
6:04:49 Reconstructing an Optimal Alignment

DYNAMIC PROGRAMMING 2
6:09:44 Problem Overview
6:15:37 Knapsack with Repetitions
6:25:56 Knapsack without Repetitions
6:44:45 Final Remarks
6:52:25 Problem Overview
6:59:27 Subproblems
7:06:24 Algorithm
7:18:27 Reconstructing a Solution

⭐ Important Notes ⭐
⌨️ This course is created in collaboration with University of California

#algorithms
#datastructures
#tools