Algorithm Design and Analysis

Analyzing algorithm complexity and designing algorithms for sorting, searching, graphs, and optimization, including greedy and dynamic programming approaches.

Course: CSE 301/302 (lecture and lab)

Institution: Dhaka International University

Taught: Fall 2017

Enrollment: 54 students in lecture and lab

Course Overview

This course gives students a working knowledge of how to design and analyze algorithms: searching and sorting in linear and non-linear data structures, graph algorithms, and dynamic programming, with practical applications to everyday problems. Lectures used whiteboard derivations and slides, and lab sessions gave students practice implementing the algorithms.

Learning Objectives

After completing this course, students will be able to:

  • Define and develop searching algorithms for linear and non-linear data structures
  • Develop and apply different sorting algorithms
  • Solve practical problems using these algorithms
  • Analyze, design, and propose new algorithms for sorting and searching
  • Distinguish among sorting algorithms and recommend one for a given situation

Textbooks

  • Cormen, Leiserson, Rivest, and Stein, Introduction to Algorithms
  • Kleinberg and Tardos, Algorithm Design
  • Skiena, The Algorithm Design Manual
  • Sedgewick and Wayne, Algorithms
  • Dasgupta, Papadimitriou, and Vazirani, Algorithms

Schedule

Week Topic
1 Growth Functions and Recurrences

Review of growth functions, summations, and recurrence relations.

2 Sorting

Heap sort, quicksort, merge sort, and radix sort.

3 Sorting Bounds and Search Trees

Bucket sort, the lower bound for comparison sorting, binary search trees, and red-black trees.

4 Advanced Data Structures

Binomial heaps, Fibonacci heaps, and disjoint sets.

5 Dynamic Programming

Longest common subsequence and optimal polygon triangulation.

6 Greedy Algorithms and Amortized Analysis

Huffman coding, task scheduling, Strassen’s algorithm, and the potential method.

7 Graph Traversal I

Graph basics and breadth-first search with applications.

8 Graph Traversal II

Depth-first search and strongly connected components.

9 Directed Acyclic Graphs

Edge classification, DAGs, and topological sort.

10 Minimum Spanning Trees

Spanning trees and Prim’s algorithm.

11 Spanning Trees and Shortest Paths

Kruskal’s algorithm, and Dijkstra’s and Floyd–Warshall shortest-path algorithms.

12 Negative Edges and Knapsack

The Bellman–Ford algorithm and the 0-1 knapsack problem.

13 Applied Problem Solving

Chessboard and rock-climbing problems, network flow, and min-cut and max-cut problems.