# 50.004 Algorithms

Home / Education / Undergraduate / Courses / 50.004 Algorithms

#### Course Description

This course is an introduction to algorithms and algorithmic thinking. The course covers common algorithms, algorithmic paradigms, and data structures that can be used to solve computational problems. Emphasis is placed on understanding why algorithms work, and how to analyze the complexity of algorithms. Students will learn the underlying thought process on how to design their own algorithms, including how to use suitable data structures and techniques such as dynamic programming to design algorithms that are efficient.

#### Learning Objectives

At the end of the term, students will be able to:

• Analyze the running times of algorithms.
• Demonstrate familiarity with major algorithms and data structures.
• Use suitable data structures in algorithms to solve computational problems.
• Identify major issues in the implementation of algorithms.
• Solve algorithmic issues in the design of information systems.
• Understand graphs as data structures, and implement graph traversals.
• Apply Bellman-Ford algorithm and Dijkstra’s algorithm to compute shortest paths in graphs.
• Design efficient algorithms using dynamic programming to solve computational problems.
• Analyze NP-complete problems and apply polynomial-time reductions to problems.

#### Measurable Outcomes

• Compute the asymptotic complexity of algorithms.
• Analyze and apply properties of data structures.
• Design algorithms that build upon basic operations on data structures.
• Apply and/or modify existing algorithms to solve computational problems.
• Compute hash tables and perform re-hashing.
• Implement graph-based algorithms on provided graphs.
• Design efficient algorithms using dynamic programming.
• Analyze NP-complete problems and apply polynomial-time reductions to problems.

#### Prerequisite

Nil

2023-10-09T18:03:50+08:00