The objectives of the course are: Knowing and applying the basic algorithmic techniques of Computer Science to solve combinatorial problems, analyzing the suitability and complexity of the proposed algorithms. Knowing, designing and efficiently utilizing the types and data structures more suitable to solve a problem. The programming language used is python with the aim of showing the basic fundamentals for the design and implementation of an efficient algorithm. Grau en Enginyeria Informàtica. Doble Titulació: Grau en Enginyeria Informàtica i Grau en ADE. Professors: Jordi Planes, Aitor Corchero, Dídac Sementé.
The course contents are divided into four teaching units:
1. The first aims to study the formal characterization of algorithms. We study how to formally specify with postconditions and preconditions and analyze the efficiency of algorithms using asymptotic notation for the study of temporal cost or runtime algorithms.
2. The second teaching unit aims to study formal verification techniques applied to recursive algorithms and iterative algorithms, and the study of transformation techniques for recursive algorithms.
3. The third teaching unit aims the study of algorithmic schemes, i.e., by analyzing, designing and implementing algorithms to solve a set of problems. The algorithmic schemes to study are four: divide and conquer, greedy, dynamic programming and backtracking.
4. A different approach is considering all algorithms that can solve a particular problem. This approach is the one considered in the field of Computational Complexity, which will be briefly introduced in the last teaching unit.