ALGORITMI

Academic Year 2023/2024 - Teacher: GIUSEPPE MANGIONI

Expected Learning Outcomes

The aim of the course is to provide the student with the knowledge necessary to design, evaluate and implement efficient algorithms, using the most advanced programming techniques and appropriate data structures.


These notions include recursive and divide-and-conquer programming techniques, major advanced data structures, and complexity analysis. Furthermore, the concepts necessary to evaluate which techniques and which data structures to choose to best address the different types of computational problems will be provided.


Knowledge and understanding

  • understand how to describe the execution times of an algorithm;
  • learn divide-and-conquer, recursive, dynamic and greedy programming techniques;
  • know the main sorting techniques;
  • know basic and advanced data structures;
  • learn the main graph algorithms.
Ability to apply knowledge and understanding
  • know how to evaluate the complexity of algorithms;
  • ability to identify the best algorithms and data structures to solve a given computational problem.
Ability of making judgments
  • know how to evaluate the suitability of a given algorithm and/or a data structure for solving a problem.
​Communication skills
  • acquire knowledge of algorithms and data structures and the technical vocabulary associated with them
​​Learning skills
  • ability to learn the main algorithmic techniques, necessary to undertake subsequent studies and/or professional activities with a high degree of autonomy.

Course Structure

The teaching method is frontal teaching associated with the discussion of the knowledge acquired.

If the course is taught in mixed or remote mode, the necessary variations may be introduced with respect to what was previously declared, in order to respect the planned program and reported in the syllabus.

Required Prerequisites

  • concept of algorithm, definition and characteristics of a programming language, elements of computational complexity, basic data structures.
  • knowledge of at least one imperative programming language (example: C, C++, C#, Java, Python, Go, ...)
  • elements of discrete mathematics and mathematical analysis

Attendance of Lessons

Attendance is not mandatory although strongly recommended.

Detailed Course Content

  • Fundamentals. Introduction to algorithms and their description. Execution times. Algorithmic techniques.
  • Sorting and order statistics. Heapsort. Quicksort, Sorting in linear time.
  • Data structures. Elementary data structures. Hashing. Binary search and red-black trees.
  • Advanced design and analysis techniques. Dynamic and greedy programming.
  • Advanced data structures. Augmenting data structures. B-trees.
  • Graph algorithms. Elementary algorithms. Minimum connecting trees. Shortest paths. Maximum flow.

Textbook Information

[T1]: Introduction to algorithms. IV Edizione. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. MCGraw-Hill. 2023. 

Course Planning

 SubjectsText References
1The Role of Algorithms in Computing. Getting Started[T1] Chapter 1 e 2
2Characterizing Running Times[T1] Chapter 3
3Divide-and-Conquer[T1] Chapter 4
4 Heapsort[T1] Chapter 6
5Quicksort[T1] Chapter 7
6Sorting in linear time[T1] Chapter 8
7Medians and order statistics[T1] Chapter 9
8Elementary Data Structures[T1] Chapter 10
9Hash Tables[T1] Chapter 11
10Binary Search Trees[T1] Chapter 12
11Red-Black Trees[T1] Chapter 13
12Dynamic Programming[T1] Chapter 14
13Greedy Algorithms[T1] Chapter 15
14Augmenting Data Structures[T1] Chapter 17
15B-Trees[T1] Chapter 18
16Elementary Graph Algorithms[T1] Chapter 20
17Minimum Spanning Trees[T1] Chapter 21
18Shortest Paths[T1] Chapter 22 e 23
19Maximum Flow[T1] Chapter 24

Learning Assessment

Learning Assessment Procedures

The exam consists of an oral test which also includes the discussion of the project developed by the student.
VERSIONE IN ITALIANO