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