Complexity of algorithms: O notation, analysis of time and space consumption in memory. Problem complexity: polynomial reduction, classes of decision problems (P, NP, NP-difficult, etc.). Algorithmic techniques: greedy algorithms, division and conquest dynamic programming. Problem analysis: search and ordering, graph problems, computational geometry problems.