Algorithms and Complexity

Professors Orestis Telelis
Course category Core
Course ID DS-101
Credits 5
Lecture hours 3 hours
Lab hours 2 hours
Digital resources View on Aristarchus (Open e-Class)

Learning Outcomes

Upon successful completion of this course, students should be able:

  • to explain and deal with fundamental concepts regarding algorithms and complexity, such as “problem” and “problem class”, algorithm, instance, computational resources and resource requirements as a function of instance’s size, asymptotic behavior, symbols for asymptotic behavior, recursive functions and methods for their resolution.
  • to analyse, select and evaluate algorithms based on the concepts and methods mentioned above.
  • to design computationally effective algorithms based on the above concepts and algorithms’ design techniques (divide and conquer, greedy, dynamic programming).
  • to communicate algorithmic ideas in a concise and formal way.

Towards constructing and evaluating computational programs and advancing their computational effectiveness.

Course Contents

  • Introduction, representative problems
  • Analysis of Algorithms
  • Graphs and Algorithms
  • Greedy Algorithms
  • Divide and Conquer Algorithms
  • Dynamic Programming
  • Network Flow
  • Computational Hardness

Recommended Readings

  • Kleinberg J. &Tardos E. (2006): Algorithm Design, (Pearson International Edition), Addison Wesley,
  • Τ. Cormen, C.Leiserson, R.Rivest, C.Stein (2009): Introduction to Algorithms, The MIT Press