- Foundational Mathematics
- Introduction to Algebra
- Logarithmic functions and derivatives
- TecMaths
- MIT 18.06 Linear Algebra, Spring 2005 (35 videos)
- Mathematics 10B - Methods of Mathematics: Calculus, Statistics and Combinatorics, Spring 2014 - UC Berkeley
- Calculus
- 18.01 Single Variable Calculus (Fall 2006) - MIT OCW
- Calculus Revisited: Single Variable Calculus - MIT OCW
- Mathematics 16A - Analytic Geometry and Calculus, Thomas Scanlon, Fall 2013 - UC Berkeley
- 18.02 Multivariable Calculus (Fall 2007) - MIT OCW
- Calculus Revisited: Multivariable Calculus - MIT OCW
- Mathematics 16B - Analytic Geometry and Calculus Professor Thomas Scanlon, Fall 2011 - UC Berkeley
- Mathematics 53 Multivariable Calculus - UC Berkeley
- 18.03 Differential Equations (Spring 2010) - MIT OCW
- Highlights of Calculus, Gilbert Strang - MIT OCW
- Mathematics 16A Analytic Geometry and Calculus, Fall 2011 - UCBerkeley
- Mathematics 16B Analytic Geometry and Calculus, Fall 2011 - UCBerkeley
- Calculus I - New York University
- Calculus One - Ohio State University
- Calculus III: Multivariable Calculus (Princeton University)
- Calculus - University of Houston
- Calculus Revisited: Complex Variables, Differential Equations, and Linear Algebra - MIT OCW
- Math 31A Differential & Integral Calculus, UCLA
- Math 1210, Calculus 1 - University of Utah
- Math 1220, Calculus 2 - University of Utah
- Math 2210, Calculus 3 - University of Utah
- MA 107 Precalculus I - NCSU
- MA 121 Elements of Calculus - NCSU
- MA 141 Calculus I - NCSU
- MA 241 Calculus II - NCSU
- MA 242 Calculus III - NCSU
- MA 341 Applied Differential Equations I - NCSU
- Linear Algebra
- 18.06SC Linear Algebra (Fall 2011) - MIT OCW
- Linear Algebra (Princeton University)
- Part 1 Linear Algebra: An In-Depth Introduction with a Focus on Applications (Part 2 Part 3)
- A first course in Linear Algebra - N J Wildberger - UNSWelearning
- MATH 3328/2318 Linear Algebra - Lamar
- Math 220 - Introductory Linear Algebra, Fall 2013 - WSU
- Basic Linear Algebra - LadislauFernandes
- Probability & Statistics
- 6.041 Probabilistic Systems Analysis and Applied Probability - MIT OCW
- Statistics 110: Probability - Harvard University
- Stat 2 - Fall 2006: Introduction to Statistics - UC Berkeley
- Statistics 20, Fall 2010 - UCBerkeley
- Statistics 21 - Introductory Probability and Statistics for Business, Fall 2009 - UCBerkeley
- Introduction to Statistics and Data Analysis - University of Michigan
- Math 3C Probability for Math Science - UCLA
- 6.262 Discrete Stochastic Processes - MIT OCW
- DTU: Introduction to Statistics
- Probability & Statistics with Prof David Spiegelhalter
- 10-600 Math Background for ML - CMU
- MIT 18.065 Matrix Methods in Data Analysis, Signal Processing, and Machine Learning
- 36-705 - Intermediate Statistics - Larry Wasserman, CMU (YouTube)
- Combinatorics - IISC Bangalore
- MIT Probability (mathy, and go slowly, which is good for mathy things) (videos):
- Excellent - MIT Calculus Revisited: Single Variable Calculus
- Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory
- Discrete Mathematics by Shai Simonson (19 videos)
- Discrete Mathematics Part 1 by Sarada Herke (5 videos)
- MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)
- General (uncategorized)
- Math Foundations A (1-79) - Prof Wildberger (B (80-149), C (150-- ) )
- 18.085 Computational Science and Engineering I - MIT OCW
- 18.086 Mathematical Methods for Engineers II - MIT OCW
- Advanced Scientific Computing: Numerical Methods, Fall 2013 - Harvard University
- Introduction to Numerical Analysis I - NCSU
- Tensor Calculus and the Calculus of Moving Surfaces
- Abstract Algebra - Harvard University (Another link)
- Sets, Counting, and Probability - Harvard University
- Lie Groups - Harvard University
- Algebraic Topology: a beginner's course - N J Wildberger - UNSWelearning
- Group Theory - LadislauFernandes
- Group Theory - Ben Garside
- Ted Chinburg's Lectures on Algebraic Number Theory - Math 620 (Math 621 Math 720 Math 721)
- Algebraic Knot Theory - University of Toronto
- Geometric Representation Theory Seminar - Fall 2007 - UC Riverside
- Morse Theory: UGA 2012
- Lie Groups 2012, University of Utrecht
- MATH 648W: Wavelet Theory and Waveform Design - University of Maryland
- Arithmetic geometry - Clay Mathematics Institute Summer School 2006
- 12-267 Advanced Ordinary Differential Equations, Fall 2012 - University of Toronto
- 15-859S / 21-801A: Analysis of Boolean Functions 2012 - CMU
- Topics in Logic: Computability Theory, Sp 2011 - University of Colorado Boulder
- Calculus I with Professor Richard Delaware - University of Missouri - Kansas City
- MATH-501 Real Analysis - I (Another link)
- Real Analysis - Harvey Mudd College
- Math312 (Linear algebra) - UPenn
- Math340 (Homological algebra) - UPenn
- Math350 (Number theory) - UPenn (YouTube)
- Math371 (Algebra II), 2011 - UPenn
- Math371 (Algebra II), 2014 - UPenn
- Math602 (Graduate algebra 1), 2011 - UPenn
- Math602 (Graduate algebra 1), 2013 - UPenn
- Math603 (Graduate algebra 2), 2014 - UPenn
- Math702 (Algebraic number theory) - UPenn
- Math703 (Algebraic number theory II) - UPenn
- Number Theory of 2015, James Cook - Liberty University
- UCCS Video Course Archive - requires free registration
- History of Mathematics - N J Wildberger - UNSWelearning
- Hyperbolic Geometry - N J Wildberger - UNSWelearning
- Rational Trigonometry--- N J Wildberger - UNSWelearning
- Trigonometry - Harrisburg Area Community College
- Vector Calculus @ UNSW Sydney. Dr Chris Tisdell - UNSWelearning
- Videos of Probability and Statistics Courses - compiled by Dr. M. Hlynka, University of Windsor
- EE261 - The Fourier Transform and its Applications
- EE263 - Introduction to Linear Dynamical Systems
- EE364A - Convex Optimization I
- EE364B - Convex Optimization II
- EE230 - Probability and Random Variables, METUOpenCourseWare
- Advanced Complex Analysis - Part 1:Zeros of Analytic Functions,Analytic continuation, Monodromy, Hyperbolic Geometry and the Reimann Mapping Theorem - IIT Madras
- Advanced Complex Analysis - Part 2: Compactness of Meromorphic Functions in the Spherical Metric, Spherical Derivative, Normality, Theorems of Marty-Zalcman-Montel-Picard-Royden-Schottky - IIT Madras
- A Basic Course in Real Analysis - IIT Kharagpur
- Advanced Engineering Mathematics - IIT Kharagpur
- Advanced Matrix Theory and Linear Algebra for Engineers - IISC Bangalore
- An Introduction to Riemann Surfaces and Algebraic Curves: Complex 1-Tori and Elliptic Curves - IIT Madras
- Applied Multivariate Analysis - IIT Kanpur
- Basic Algebraic Geometry : Varieties, Morphisms, Local Rings, Function Fields and Nonsingularity - IIT Madras
- Calculus of Variations and Integral Equations - IIT Kanpur
- Complex Analysis - IIT GUWAHATI
- Convex Optimization - IIT Kanpur
- Discrete Mathematics - IIT Roorkee
- Dynamic Data Assimilation: an introduction - IIT Madras
- Elementary Numerical Analysis - IIT Bombay
- Foundations of Optimization - IIT Kanpur
- Functional Analysis - IIT Kharagpur
- Linear Algebra - IIT Madras
- Linear programming and Extensions - IIT Kanpur
- Mathematical Logic - IIT Madras
- Measure and Integration - IIT Bombay
- Applied Multivariate Statistical Modeling - IIT Kharagpur
- An invitation to mathematics - IIT Madras
- Basic Calculus for Engineers, Scientists and Economists - IIT Kanpur
- Curves and Surfaces - IIT Kanpur
- Differential Calculus in Several Variables - IIT Kanpur
- Discrete Mathematics - IIT Madras
- Partial Differential Equations (PDE) for Engineers: Solution by Separation of Variables - IIT Kharagpur
- Probability and Statistics - IIT Kharagpur
- Probability and Stochastics for finance - IIT Kanpur
- Stochastic Processes - 1 - IIT Bombay
- Numerical methods of Ordinary and Partial Differential Equations - IIT Kharagpur
- Optimization - IIT Kharagpur
- Ordinary Differential Equations and Applications - IISC Bangalore
- Probability and Statistics - IIT Kharagpur
- Probability Theory and Applications - IIT Kanpur
- Real Analysis - IIT Madras
- Regression Analysis - IIT Kharagpur
- Statistical Inference - IIT Kharagpur
- Stochastic Processes - IIT Bombay
- Statistical Methods for Scientists and Engineers - IIT Kharagpur
- Mathematics 128A - Numerical Analysis, Spring 2014 - UC Berkeley
- Algebraic Lie Theory - Cambridge University
- Analysis on Graphs and its Applications - Cambridge University
- Combinatorics and Statistical Mechanics - Cambridge University
- GRASP Lecture Series: Geometry, Representations, and some Physics - The University of Texas at Austin
- Lectures on Topology and Field Theories - University of Notre Dame
- Mathematical Analysis - University of Nottingham (YouTube)
- Math 1010 (Intermediate Algebra) - University of Utah
- Math 1050, College Algebra - University of Utah
- Math 1090, Business Algebra - University of Utah
- Math 1030, Introduction to Quantitative Reasoning - University of Utah
- Math 1060, Trigonometry - University of Utah
- Math 646 - Mathematical Problems II - TAMU
- Applied Complex Variables (Math 3160) - UoU
- Differential Equations and Linear Algebra (Math 2250) - UoU
- Partial Differential Equations (Math 3150) - UoU
- Vector Calculus and Partial Differential Equations (Math 3140) - UoU
- 01325 Mathematics 4 Real Analysis F13
- MATH 676: Finite element methods in scientific computing - TAMU
- Mathematics - Foundations of Pure Mathematics - University of Nottingham
- Mathematics - Functional Analysis - University of Nottingham
- Topology & Geometry by Dr Tadashi Tokieda
- Lecture Series on Bing topology and Casson handles - Max Planck Institute for Mathematics
- Classification of Topological 4-manifolds (Semester on 4-manifolds) - Max Planck Institute for Mathematics
- Holistic Numerical Methods
- Tim Gowers - Computational Complexity and Quantum Compuation
- Topology - ThoughtSpaceZero
- Lectures on Basic Algebraic Geometry by Miles Reid (WCU project)
- Lectures on Algebraic Surfaces by Miles Reid (WCU project)
- Math 240 - Linear algebra and differential equations (Fall 2018) - Ted Chinburg - UPenn
- Math 720 - Advanced Number Theory (Fall 2018)
- Math 210 - Mathematics in the information age (Spring 2018)
- Math 702 - Topics in Algebra (Spring 2018)
- Math 603 - Graduate Algebra (Spring 2017)
- Math 350 - Number theory (Fall 2014)
- Math 371 - Second semester undergraduate abstract algebra (Fall 2014)
- Math 602 - Abstract Algebra (Fall 2013)
- Math 603 - Abstract Algebra (Spring 2014)
-
General (uncategorized)
- 8.01 Physics I: Classical Mechanics, Fall 1999, Walter Lewin (YouTube)
- 8.02 Physics II: Electricity and Magnetism, Spring 2002, Walter Lewin (YouTube)
- 8.03 Physics III: Vibrations and Waves, Fall 2004, Walter Lewin (YouTube)
- Collection of Physics video lectures
- The Mechanical Universe - Caltech
- 8.421 Atomic and Optical Physics I, MIT OCW
- 8.422 Atomic and Optical Physics II, MIT OCW
- 8.821 String Theory and Holographic Duality, MIT OCW
- 8.851 Effective Field Theory, MIT OCW
- The Theoretical Minimum, Leonard Susskind, Stanford University (YouTube - All lectures in order), courses:
- Classical Mechanics
- Quantum Mechanics
- Special Relativity and Electrodynamics
- General Relativity
- Cosmology
- Statistical Mechanics
- Advanced Quantum Mechanics
- Higgs Boson
- Quantum Entanglement
- Relativity
- Particle Physics 1: Basic Concepts
- Particle Physics 2: Standard Model
- Particle Physics 3: Supersymmetry and Grand Unification
- String Theory
- Cosmology and Black Holes
- Richard Feynman's Lectures on Physics
- PHYS 200: FUNDAMENTALS OF PHYSICS I, Yale University
- PHYS 201: FUNDAMENTALS OF PHYSICS II, Yale University
- Physics 3A: Basic Physics (English), UC Irvine
- Physics 3B: Basic Physics II (English)
- Physics 3C: Basic Physics III (English), UC Irvine
- Physics 255: General Relativity, UC Irvine
- Physics 20B: Cosmology (English), UC Irvine
- Physics 8B - Introductory Physics - Melvin Pomerantz, Spring 2015 - UC Berkeley
- Physics 10, 001 - Spring 2006 - UC Berkeley
- Physics C10 - Descriptive Introduction to Physics, Spring 2014 - UC Berkeley
- Physics 111 - Advanced Experimentation Lab - UC Berkeley
- Physics 151 - Physics for Future Physicists, Fall 2013 - UC Berkeley
- Physics 253: Quantum Field Theory Lectures by Sidney R. Coleman, Harvard University
- Quantum Field Theory II, Tata Institute of Fundamental Research
- Quantum Field Theory (University of Cambridge)
- Neutrino Physics (Amol Dighe), Tata Institute of Fundamental Research
- Quantum Space Time Series
- Lectures on Geometrical Anatomy of Theoretical Physics, Fredric Schuller
- Lectures on Quantum Theory, Fredric Schuller
- Quantum Field Theory, String Theory and Beyond, Israel Institute for Advanced Studies
- Physics 121 Spring 2015, Santa Barbara City College
- Physics 122 Fall 2013, Santa Barbara City College
- SBCC Physics 123 Spring 2014, Santa Barbara City College
- Supersymmetry (University of Cambridge)
- Introduction to Nuclear Physics MIT
- Tensor Calculus, Multilinear Algebra and Differential Geometry (General Relativity Prerequisites)
- Phys 237: Gravitational Waves with Kip Thorne - Caltech
- The WE-Heraeus International Winter School on Gravity and Light
-
Quantum Physics
-
Relativity
-
Astronomy/Astrophysics/Cosmology
- ASTR 160: FRONTIERS AND CONTROVERSIES IN ASTROPHYSICS, Yale University
- Astronomy 7B - Introduction to Astrophysics - Professor Joshua Simon Bloom, Spring 2011 - UC Berkeley
- Astronomy 10 - Introduction to General Astronomy, Fall 2011 - UC Berkeley
- Astronomy C12 - The Planets - Geoffrey W. Marcy, Fall 2014 - UC Berkeley
- Astronomy C13 - Origins: from the Big Bang to the Emergence of Humans, Fall 2014 - UC Berkeley
- Astronomy 250 - Scientific Research Computing with Python, Spring 2012 - UC Berkeley
- 8.286 The Early Universe
-
String Theory
-
Statistical Mechanics
- Nothing to implement
- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review.
- If some of the lectures are too mathy, you can jump down to the bottom and watch the discrete mathematics videos to get the background knowledge.
- Harvard CS50 - Asymptotic Notation (video)
- Big O Notations (general quick tutorial) (video)
- Big O Notation (and Omega and Theta) - best mathematical explanation (video)
- Skiena:
- A Gentle Introduction to Algorithm Complexity Analysis
- Orders of Growth (video)
- Asymptotics (video)
- UC Berkeley Big O (video)
- UC Berkeley Big Omega (video)
- Amortized Analysis (video)
- Illustrating "Big O" (video)
- TopCoder (includes recurrence relations and master theorem):
- Cheat sheet
-
- Implement an automatically resizing vector.
- Description:
- Implement a vector (mutable array with automatic resizing):
- Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing.
- new raw data array with allocated memory
- can allocate int array under the hood, just not use its features
- start with 16, or if starting number is greater, use power of 2 - 16, 32, 64, 128
- size() - number of items
- capacity() - number of items it can hold
- is_empty()
- at(index) - returns item at given index, blows up if index out of bounds
- push(item)
- insert(index, item) - inserts item at index, shifts that index's value and trailing elements to the right
- prepend(item) - can use insert above at index 0
- pop() - remove from end, return value
- delete(index) - delete item at index, shifting all trailing elements left
- remove(item) - looks for value and removes index holding it (even if in multiple places)
- find(item) - looks for value and returns first index with that value, -1 if not found
- resize(new_capacity) // private function
- when you reach capacity, resize to double the size
- when popping an item, if size is 1/4 of capacity, resize to half
- Time
- O(1) to add/remove at end (amortized for allocations for more space), index, or update
- O(n) to insert/remove elsewhere
- Space
- contiguous in memory, so proximity helps performance
- space needed = (array capacity, which is >= n) * size of item, but even if 2n, still O(n)
-
- Description:
- C Code (video) - not the whole video, just portions about Node struct and memory allocation.
- Linked List vs Arrays:
- why you should avoid linked lists (video)
- Gotcha: you need pointer to pointer knowledge: (for when you pass a pointer to a function that may change the address where that pointer points) This page is just to get a grasp on ptr to ptr. I don't recommend this list traversal style. Readability and maintainability suffer due to cleverness.
- implement (I did with tail pointer & without):
- size() - returns number of data elements in list
- empty() - bool returns true if empty
- value_at(index) - returns the value of the nth item (starting at 0 for first)
- push_front(value) - adds an item to the front of the list
- pop_front() - remove front item and return its value
- push_back(value) - adds an item at the end
- pop_back() - removes end item and returns its value
- front() - get value of front item
- back() - get value of end item
- insert(index, value) - insert value at index, so current item at that index is pointed to by new item at index
- erase(index) - removes node at given index
- value_n_from_end(n) - returns the value of the node at nth position from the end of the list
- reverse() - reverses the list
- remove_value(value) - removes the first item in the list with this value
- Doubly-linked List
- Description (video)
- No need to implement
-
- Stacks (video)
- Using Stacks Last-In First-Out (video)
- Will not implement. Implementing with array is trivial.
-
- Using Queues First-In First-Out(video)
- Queue (video)
- Circular buffer/FIFO
- Priority Queues (video)
- Implement using linked-list, with tail pointer:
- enqueue(value) - adds value at position at tail
- dequeue() - returns value and removes least recently added element (front)
- empty()
- Implement using fixed-sized array:
- enqueue(value) - adds item at end of available storage
- dequeue() - returns value and removes least recently added element
- empty()
- full()
- Cost:
- a bad implementation using linked list where you enqueue at head and dequeue at tail would be O(n) because you'd need the next to last element, causing a full traversal each dequeue
- enqueue: O(1) (amortized, linked list and array [probing])
- dequeue: O(1) (linked list and array)
- empty: O(1) (linked list and array)
-
-
Videos:
-
Online Courses:
-
implement with array using linear probing
- hash(k, m) - m is size of hash table
- add(key, value) - if key already exists, update value
- exists(key)
- get(key)
- remove(key)
-
-
- Binary Search (video)
- Binary Search (video)
- detail
- Implement:
- binary search (on sorted array of integers)
- binary search using recursion
-
- Bits cheat sheet - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
- 2s and 1s complement
- count set bits
- round to next power of 2:
- swap values:
- absolute value:
-
- Series: Core Trees (video)
- Series: Trees (video)
- basic tree construction
- traversal
- manipulation algorithms
- BFS(breadth-first search) and DFS(depth-first search) (video)
- BFS notes:
- level order (BFS, using queue)
- time complexity: O(n)
- space complexity: best: O(1), worst: O(n/2)=O(n)
- DFS notes:
- time complexity: O(n)
- space complexity: best: O(log n) - avg. height of tree worst: O(n)
- inorder (DFS: left, self, right)
- postorder (DFS: left, right, self)
- preorder (DFS: self, left, right)
- BFS notes:
-
- Binary Search Tree Review (video)
- Series (video)
- starts with symbol table and goes through BST applications
- Introduction (video)
- MIT (video)
- C/C++:
- Binary search tree - Implementation in C/C++ (video)
- BST implementation - memory allocation in stack and heap (video)
- Find min and max element in a binary search tree (video)
- Find height of a binary tree (video)
- Binary tree traversal - breadth-first and depth-first strategies (video)
- Binary tree: Level Order Traversal (video)
- Binary tree traversal: Preorder, Inorder, Postorder (video)
- Check if a binary tree is binary search tree or not (video)
- Delete a node from Binary Search Tree (video)
- Inorder Successor in a binary search tree (video)
- Implement:
- insert // insert value into tree
- get_node_count // get count of values stored
- print_values // prints the values in the tree, from min to max
- delete_tree
- is_in_tree // returns true if given value exists in the tree
- get_height // returns the height in nodes (single node's height is 1)
- get_min // returns the minimum value stored in the tree
- get_max // returns the maximum value stored in the tree
- is_binary_search_tree
- delete_value
- get_successor // returns next-highest value in tree after given value, -1 if none
-
- visualized as a tree, but is usually linear in storage (array, linked list)
- Heap
- Introduction (video)
- Naive Implementations (video)
- Binary Trees (video)
- Tree Height Remark (video)
- Basic Operations (video)
- Complete Binary Trees (video)
- Pseudocode (video)
- Heap Sort - jumps to start (video)
- Heap Sort (video)
- Building a heap (video)
- MIT: Heaps and Heap Sort (video)
- CS 61B Lecture 24: Priority Queues (video)
- Linear Time BuildHeap (max-heap)
- Implement a max-heap:
- insert
- sift_up - needed for insert
- get_max - returns the max item, without removing it
- get_size() - return number of elements stored
- is_empty() - returns true if heap contains no elements
- extract_max - returns the max item, removing it
- sift_down - needed for extract_max
- remove(i) - removes item at index x
- heapify - create a heap from an array of elements, needed for heap_sort
- heap_sort() - take an unsorted array and turn it into a sorted array in-place using a max heap
- note: using a min heap instead would save operations, but double the space needed (cannot do in-place).
-
Notes:
- Implement sorts & know best case/worst case, average complexity of each:
- no bubble sort - it's terrible - O(n^2), except when n <= 16
- stability in sorting algorithms ("Is Quicksort stable?")
- Which algorithms can be used on linked lists? Which on arrays? Which on both?
- I wouldn't recommend sorting a linked list, but merge sort is doable.
- Merge Sort For Linked List
- Implement sorts & know best case/worst case, average complexity of each:
-
For heapsort, see Heap data structure above. Heap sort is great, but not stable.
-
UC Berkeley:
-
Merge sort code:
-
Quick sort code:
-
Implement:
- Mergesort: O(n log n) average and worst case
- Quicksort O(n log n) average case
- Selection sort and insertion sort are both O(n^2) average and worst case
- For heapsort, see Heap data structure above.
-
Not required, but I recommended them:
As a summary, here is a visual representation of 15 sorting algorithms. If you need more detail on this subject, see "Sorting" section in Additional Detail on Some Subjects
Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were.
-
Notes:
- There are 4 basic ways to represent a graph in memory:
- objects and pointers
- adjacency matrix
- adjacency list
- adjacency map
- Familiarize yourself with each representation and its pros & cons
- BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code
- When asked a question, look for a graph-based solution first, then move on if none.
- There are 4 basic ways to represent a graph in memory:
-
MIT(videos):
-
Skiena Lectures - great intro:
- CSE373 2012 - Lecture 11 - Graph Data Structures (video)
- CSE373 2012 - Lecture 12 - Breadth-First Search (video)
- CSE373 2012 - Lecture 13 - Graph Algorithms (video)
- CSE373 2012 - Lecture 14 - Graph Algorithms (con't) (video)
- CSE373 2012 - Lecture 15 - Graph Algorithms (con't 2) (video)
- CSE373 2012 - Lecture 16 - Graph Algorithms (con't 3) (video)
-
Graphs (review and more):
- 6.006 Single-Source Shortest Paths Problem (video)
- 6.006 Dijkstra (video)
- 6.006 Bellman-Ford (video)
- 6.006 Speeding Up Dijkstra (video)
- Aduni: Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prim's Algorithm - Lecture 6 (video)
- Aduni: Graph Algorithms II - DFS, BFS, Kruskal's Algorithm, Union Find Data Structure - Lecture 7 (video)
- Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (video)
- Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (video)
CS 61B 2014 (starting at 58:09) (video)- CS 61B 2014: Weighted graphs (video)
- Greedy Algorithms: Minimum Spanning Tree (video)
- Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (video)
-
Full Coursera Course:
-
I'll implement:
- DFS with adjacency list (recursive)
- DFS with adjacency list (iterative with stack)
- DFS with adjacency matrix (recursive)
- DFS with adjacency matrix (iterative with stack)
- BFS with adjacency list
- BFS with adjacency matrix
- single-source shortest path (Dijkstra)
- minimum spanning tree
- DFS-based algorithms (see Aduni videos above):
- check for cycle (needed for topological sort, since we'll check for cycle before starting)
- topological sort
- count connected components in a graph
- list strongly connected components
- check for bipartite graph
-
- Stanford lectures on recursion & backtracking:
- when it is appropriate to use it
- how is tail recursion better than not?
-
- You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for dynamic programming.
- This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky.
- I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved.
- Videos:
- the Skiena videos can be hard to follow since he sometimes uses the whiteboard, which is too small to see
- Skiena: CSE373 2012 - Lecture 19 - Introduction to Dynamic Programming (video)
- Skiena: CSE373 2012 - Lecture 20 - Edit Distance (video)
- Skiena: CSE373 2012 - Lecture 21 - Dynamic Programming Examples (video)
- Skiena: CSE373 2012 - Lecture 22 - Applications of Dynamic Programming (video)
- Simonson: Dynamic Programming 0 (starts at 59:18) (video)
- Simonson: Dynamic Programming I - Lecture 11 (video)
- Simonson: Dynamic programming II - Lecture 12 (video)
- List of individual DP problems (each is short): Dynamic Programming (video)
- Yale Lecture notes:
- Coursera:
-
- Optional: UML 2.0 Series (video)
- Object-Oriented Software Engineering: Software Dev Using UML and Java (21 videos):
- Can skip this if you have a great grasp of OO and OO design practices.
- OOSE: Software Dev Using UML and Java (video)
- SOLID OOP Principles:
- Bob Martin SOLID Principles of Object Oriented and Agile Design (video)
- SOLID Principles (video)
- S - Single Responsibility Principle | Single responsibility to each Object
- O - Open/Closed Principal | On production level Objects are ready for extension but not for modification
- L - Liskov Substitution Principal | Base Class and Derived class follow ‘IS A’ principal
- I - Interface segregation principle | clients should not be forced to implement interfaces they don't use
- D -Dependency Inversion principle | Reduce the dependency In composition of objects.
-
- Quick UML review (video)
- Learn these patterns:
- strategy
- singleton
- adapter
- prototype
- decorator
- visitor
- factory, abstract factory
- facade
- observer
- proxy
- delegate
- command
- state
- memento
- iterator
- composite
- flyweight
- Chapter 6 (Part 1) - Patterns (video)
- Chapter 6 (Part 2) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (video)
- Chapter 6 (Part 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)
- Series of videos (27 videos)
- Head First Design Patterns
- I know the canonical book is "Design Patterns: Elements of Reusable Object-Oriented Software", but Head First is great for beginners to OO.
- Handy reference: 101 Design Patterns & Tips for Developers
- Design patterns for humans
-
- Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)
- Make School: Probability (video)
- Make School: More Probability and Markov Chains (video)
- Khan Academy:
- Course layout:
- Just the videos - 41 (each are simple and each are short):
-
- Know about the most famous classes of NP-complete problems, such as traveling salesman and the knapsack problem, and be able to recognize them when an interviewer asks you them in disguise.
- Know what NP-complete means.
- Computational Complexity (video)
- Simonson:
- Skiena:
- Complexity: P, NP, NP-completeness, Reductions (video)
- Complexity: Approximation Algorithms (video)
- Complexity: Fixed-Parameter Algorithms (video)
- Peter Norvig discusses near-optimal solutions to traveling salesman problem:
- Pages 1048 - 1140 in CLRS if you have it.
-
- Computer Science 162 - Operating Systems (25 videos):
- for processes and threads see videos 1-11
- Operating Systems and System Programming (video)
- What Is The Difference Between A Process And A Thread?
- Covers:
- Processes, Threads, Concurrency issues
- difference between processes and threads
- processes
- threads
- locks
- mutexes
- semaphores
- monitors
- how they work
- deadlock
- livelock
- CPU activity, interrupts, context switching
- Modern concurrency constructs with multicore processors
- Paging, segmentation and virtual memory (video)
- Interrupts (video)
- Scheduling (video)
- Process resource needs (memory: code, static storage, stack, heap, and also file descriptors, i/o)
- Thread resource needs (shares above (minus stack) with other threads in the same process but each has its own pc, stack counter, registers, and stack)
- Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy.
- Context switching
- How context switching is initiated by the operating system and underlying hardware
- Processes, Threads, Concurrency issues
- threads in C++ (series - 10 videos)
- concurrency in Python (videos):
- Computer Science 162 - Operating Systems (25 videos):
-
- To cover:
- how unit testing works
- what are mock objects
- what is integration testing
- what is dependency injection
- Agile Software Testing with James Bach (video)
- Open Lecture by James Bach on Software Testing (video)
- Steve Freeman - Test-Driven Development (that’s not what we meant) (video)
- TDD is dead. Long live testing.
- Is TDD dead? (video)
- Video series (152 videos) - not all are needed (video)
- Test-Driven Web Development with Python
- Dependency injection:
- How to write tests
- To cover:
-
- in an OS, how it works
- can be gleaned from Operating System videos
-
- Sedgewick - Suffix Arrays (video)
- Sedgewick - Substring Search (videos)
- Search pattern in text (video)
If you need more detail on this subject, see "String Matching" section in Additional Detail on Some Subjects
-
- Note there are different kinds of tries. Some have prefixes, some don't, and some use string instead of bits to track the path.
- I read through code, but will not implement.
- Sedgewick - Tries (3 videos)
- Notes on Data Structures and Programming Techniques
- Short course videos:
- The Trie: A Neglected Data Structure
- TopCoder - Using Tries
- Stanford Lecture (real world use case) (video)
- MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through) (video)
-
- Big And Little Endian
- Big Endian Vs Little Endian (video)
- Big And Little Endian Inside/Out (video)
- Very technical talk for kernel devs. Don't worry if most is over your head.
- The first half is enough.
-
- if you have networking experience or want to be a reliability engineer or operations engineer, expect questions
- otherwise, this is just good to know
- Khan Academy
- UDP and TCP: Comparison of Transport Protocols (video)
- TCP/IP and the OSI Model Explained! (video)
- Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)
- HTTP (video)
- SSL and HTTPS (video)
- SSL/TLS (video)
- HTTP 2.0 (video)
- Video Series (21 videos) (video)
- Subnetting Demystified - Part 5 CIDR Notation (video)
- Sockets:
Coding Interview Question Videos:
Challenge sites:
- LeetCode
- TopCoder
- Project Euler (math-focused)
- Codewars
- HackerEarth
- HackerRank
- Codility
- InterviewCake
- Geeks for Geeks
- InterviewBit
- Sphere Online Judge (spoj)
- Codechef
Challenge repos:
Mock Interviews: