Course objective: to introduce students to fundamental algorithmic concepts and techniques. Material: Fundamentals of algorithm design and analysis, efficiency of algorithms, asymptotic notation, correctness of algorithms, basic data structures, priority queues and their application to heapsort. Graphs and graph algorithms, graph connectivity and traversal, depth-first search, breadth-first search, acyclic graphs, topological layout. “Divide & Conquer” method and its applications in mergesort, recursion and resolution of recursive relations.Greedy and dynamic programming methods and their application to optimization problems: minimal spanning trees, shortest paths, network flows. Introduction to selected topics (approximation algorithms, elements of linear programming, randomized algorithms).