CS502 : Fundamentals of Algorithms

Course Overview

Course Synopsis

This course is designed to provide students with an understanding of the principles and techniques used in the design and analysis of algorithms. The course is primarily theoretical and does not require programming, but it does require understanding of the notion of a mathematical proof and some knowledge of elementary discrete mathematics. We will discuss and analyze a variety of data structures and algorithms chosen for their importance and their illustration of fundamental concepts. We will emphasize analyzing the worst-case running time of an algorithm as a function of input size. We will also spend some time exploring the boundary between feasible computations, taken to be those doable in polynomial time, and infeasible computations

Course Learning Outcomes

At the end of this course you should be able to :

  • Analyze the worst-case running time of an algorithm as a function of input size
  • Solve Recurrence relations
  • Understand and implement Divide and Conquer strategy
  • Understand the concepts of Dynamic programming
  • Understand the concepts of Greedy Algorithm
  • Understand the concepts of Graph traversing
  • Understand and explain basics of Complexity theory


Course Calendar

1 Introduction
2 Model of computation, 2-d maxima
3 Analysis of 2-d Maxima
4 Runtime analysis
5 2-d maxima: sweep line algorithm
6 Asymptotic Notation
7 Asymptotic notation, merge sort
8 Analysis of Merge Sort
9 Solving recurrence relations, median selection
Assignment No. 1
10 Median selection - partitioning algorithm
11 Analysis of median selection, binary heaps, sorting
12 Heap sort, analysis of heap sort
Quiz No. 1
13 Quick sort
14 Analysis of quick sort
15 Lower bounds for sorting, Linear time sorting, counting sort
Assignment No. 2
16 Bucket sort, radix sort, dynamic programming, Fibonacci sequence
17 Dynamic programming - edit distance
18 Dynamic programming - edit distance algorithm
Quiz No. 2
Midterm Examination
19 Dynamic programming - chain matrix multiply
20 Dynamic programming - chain matrix multiply
21 Dynamic programming - 0/1 knapsack
22 Dynamic programming - 0/1 knapsack
23 Greedy algorithms - coin change problem
24 Greedy algorithms - Huffman encoding
25 Greedy algorithms - Huffman encoding
26 Greedy algorithms - Activity scheduling
27 Greedy algorithms - fractional knapsack, Graphs - definitions
28 Graphs - representations, traversal
29 Graphs - breadth-first search, generic traversal algorithms
30 Graphs - generic traversal algorithms
Quiz No. 3
31 Graphs - depth-first search, timestamp structure
32 Graphs - cycles, topological sorting
33 Graphs - strong components
Graded Discussion Board
34 Graphs - strong components, minimum spanning tree (MST)
35 Graphs - MST: generic approach
36 Graphs - MST: Kruskal's algorithm
Quiz No. 4
37 Graphs - MST: Prim's algorithm
38 Graphs - shortest paths
39 Graphs - Dijkstra's algorithm
40 Graphs - Dijkstra's algorithm, Bellman-Ford algorithm
41 Graphs - all-pairs shortest path, Floyd-Warshall's algorithm
42 Graphs - Floyd-Warshall algorithm
43 Complexity theory -classes P, NP
44 Complexity theory - Reductions, graph coloring
45 Complexity theory - boolean satisfiability, independent sets
Final Term Examination
46 UVAS Spring 2010 (Lecture 1-27)
47 Pre-Assessment