C S 312

Download as PDF

Algorithm Design and Analysis

Computer ScienceCollege of Computational, Mathematical, & Physical Sciences

Course Description

A study of the design and analysis of algorithms as solutions to problems, including dynamic programming, linear programming, greedy algorithms, divide-and-conquer algorithms, graph algorithms, and intelligent search algorithms.

When Taught

Fall and Winter

Min

3

Fixed/Max

3

Fixed

3

Fixed

0
Prerequisite
Complete ALL of the following Courses:
  • 10649-000
    OR
    14099-000

Title

Design novel algorithms

Learning Outcome

Formulate unfamiliar problems in mathematical terms and select appropriate algorithmic paradigms-such as dynamic programming, greedy algorithms, or divide-and-conquer-to design effective solutions. This process of creating order from complexity is spiritually strengthening, as it mirrors the application of divine laws to solve intricate problems.

Title

Analyze asymptotic behavior

Learning Outcome

Analyze the worst-case time and space complexity of algorithms and compare these findings with empirical results. This rigorous evaluation of efficiency is intellectually enlarging, providing students with the analytical depth to distinguish between surface-level performance and fundamental constraints.

Title

Evaluate computational efficiency

Learning Outcome

Distinguish between problems and their solutions while categorizing them into complexity classes like P, NP, and NP-Complete. Understanding these boundaries is intellectually enlarging and helps students exercise stewardship by focusing their talents on problems that are practically solvable.

Title

Prove algorithmic correctness

Learning Outcome

Construct formal proofs to verify that a subset of the algorithms considered in the course function correctly under all conditions. This commitment to provable truth is character building, fostering the integrity and precision required to stand behind one's work with total honesty.

Title

Implement complex solutions

Learning Outcome

Independently implement selected algorithms using Python to solve motivating, real-world applications. The persistence required to move from abstract theory to a working implementation is character building, while the ability to adapt these solutions to new contexts prepares students for a life of lifelong learning.