COMS311 · Design and Analysis of Algorithms

Algorithmic
thinking.

Studied fundamental algorithm design paradigms — divide and conquer, dynamic programming, greedy methods, and approximation — alongside rigorous complexity analysis and NP-completeness theory.

What I
learned.

COMS311 focuses on the fundamental principles and techniques for designing and analyzing algorithms. The course covers sorting, searching, graph algorithms, string matching, and NP-completeness. Multiple design strategies are explored including dynamic programming, divide and conquer, greedy methods, and approximation algorithms.

Performance analysis is examined through asymptotic, worst-case, average-case, and amortized approaches. Topics also include advanced data structures such as balanced trees and hashing.

Key
topics.

Algorithm Design Paradigms
Explored divide and conquer, greedy, dynamic programming, and approximation strategies for tackling a wide range of computational problems.
Graph Algorithms
Implemented DFS, BFS, shortest paths, and network flow algorithms, analysing their correctness and time/space complexity.
Complexity & NP-Completeness
Studied asymptotic, worst-case, average-case, and amortized analyses, plus an introduction to NP-completeness and problem reducibility.
Advanced Data Structures
Worked with balanced trees, hashing, and other structures optimised for efficient sorting, searching, and string matching.

Hands-on
work.

A major coding assignment involved writing a Depth-First Search (DFS) algorithm from scratch to analyse graph connectivity and traversal efficiency. Another project required designing a graph-based network analyser to identify and evaluate critical links using algorithmic efficiency principles.

These exercises emphasised translating theoretical algorithmic design concepts into optimised and maintainable code, strengthening my understanding of performance trade-offs, data structure selection, and algorithmic scalability.

Divide & Conquer Dynamic Programming Greedy Algorithms Graph Algorithms NP-Completeness Hashing