# Algorithms

The exhaustive list of topics in Algorithms in which we provide Help with Homework Assignment and Help with Project is as follows:

• Karp-Rabin,rolling hashes principles and code
• Hashing
• Document distance
• More rolling hashes
• Python cost model, review for asymptotic notation and mergesort
• Breadth-first search and depth-first search
• Airplane scheduling, binary search trees
• Hashing: chaining, hash functions
• Searching: breadth-first search and depth-first search
• Document distance in Python
• Hashing in Python, mutability
• Balanced binary search trees
• Heaps as data structures: principles, sorting, priority queues
• Binary search trees
• Sorting: heaps
• Hashing: table doubling, Karp-Rabin
• Searching: graph search, representations, and applications
• Sorting methods
• Sorting: lower bounds, linear-time sorting
• Searching: topological sort and NP-completeness
• Open addressing: theory review, Python code
• Sorting: stable sorting, radix sort
• Counting, radix and bucket sorting, gas simulation
• AVL Trees (balanced binary search trees)
• More document distance, mergesort
• Binary search trees
• Shortest paths
• Shortest paths: Bellman-Ford
• Generic shortest-path algorithm: concepts, properties
• Bellman-Ford: examples, negative-cost cycles
• Shortest paths: Dijkstra
• Hands-on Dijkstra: pseudocode, preconditions
• Priority queues: review, extended Python implementation
• Shortest paths: Dijkstra speedups
• Array implementation of Dijkstra
• Dynamic programming : memorization, Fibonacci, Crazy Eights, guessing
• Hands-on dynamic programming: big ideas, memorization in Fibonacci, crazy cards, Dijkstra and Bellman-Ford algorithm as dynamic programming
• Dynamic programming: longest common subsequence (LCS), parent pointers
• Beating Super Mario Brothers, getting points back on tests (LCS), Crazy Eights
• Dynamic programming: text justification, parenthesization, knapsack, pseudopolynomial time, Tetris training
• Dynamic programming: Maximum-sum sub-array, more Tetris
• Dynamic programming: piano fingering, structural DP (trees), vertex cover, dominating set, and beyond
• Knapsack and its variants, structural dynamic programming: covering a tree with templates, dominating set
• Numerics
• Dynamic programming: live Python coding, dominating sets, structural dynamic programming: covering a tree with templates
• Divide and conquer vs. dynamic programming on problems: matrix multiplication, tower, max-sum subarray, closest pair
• Numerics , Strassen's algorithm for matrix multiplication
• Geometric folding algorithms