Introduction to Algorithms and Data Structures II Course¶
What should be known before taking this course¶
The following are covered in the prerequisite courses at UWF. If any of these are not familiar, please review them before taking this course or when needed. I will revisit some of them in this course as needed.
Development environment setup
Local
Linux native
Mac OS native
Windows system for Linux (WSL)
Remote
SSH server (Linux)
Basic programming skills in C++
Variables and types
Control flow
Functions
Pointers and references
Classes and objects
Templates
Standard library
Basic knowledge of of computational complexity
Big-O notation
Big-Omega notation
Big-Theta notation
Basic knowledge of data structures and abstract data types
Array
Linked list
Stack ADT
Queue ADT
Heap
Priority queue ADT
Tree
Binary tree
Binary search tree
Hash table
Map ADT
Set ADT
Graph
Knowledge of algorithms
Sorting
Insertion sort
Selection sort
Merge sort
Quick sort
Heap sort
Radix sort
Searching
Linear search
Binary search
Search in a search tree
Search in a hash table
Graph
Depth-first search
Breadth-first search
Single source shortest path: Dijkstra’s algorithm
Brute force
Backtracking
Basic knowledge of mathematics
Computational complexity
Version control system (git) and GitHub classroom
What will be covered in this course¶
Mathematical foundations
Basics
Exponent
Logarithm
Modular arithmetic
Proof methods
Recurrence relations and their solutions
Combinatorics and counting
Arrangement
Selection
Distribution
Addition principle
Multiplication principle
Inclusion-exclusion principle
Division principle
Pigeonhole principle
Probabilistic analysis
Random variables
Expectation
Events
Classic probability
Type of problems
Enumeration problem (find all solutions)
Search problem (find a solution)
Optimization problem (find the best solution)
Algorithmic classification
Brute force paradigm
Backtracking paradigm
Greedy paradigm
Divide-and-conquer paradigm
Dynamic programming paradigm
Evolutionary paradigm
Genetic algorithm
Exact and approximate algorithms
Randomized algorithms
Monte Carlo algorithm
Heuristic/metaheuristic algorithms
Core data structures and related algorithms
Self-balancing trees
AVL tree
B-tree
Graph
Minimal spanning tree
Shortest path
Classic problems and solutions
Traveling salesman problem
Bin packing problem
Huffman coding
Max sum subarray problem
Chain matrix multiplication
Longest common subsequence
Minimal spanning tree
Shortest path