ALGORITMI
Academic Year 2023/2024 - Teacher: GIUSEPPE MANGIONIExpected 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.
- know how to evaluate the complexity of algorithms;
- ability to identify the best algorithms and data structures to solve a given computational problem.
- know how to evaluate the suitability of a given algorithm and/or a data structure for solving a problem.
- acquire knowledge of algorithms and data structures and the technical vocabulary associated with them
- 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
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
Course Planning
Subjects | Text References | |
---|---|---|
1 | The Role of Algorithms in Computing. Getting Started | [T1] Chapter 1 e 2 |
2 | Characterizing Running Times | [T1] Chapter 3 |
3 | Divide-and-Conquer | [T1] Chapter 4 |
4 | Heapsort | [T1] Chapter 6 |
5 | Quicksort | [T1] Chapter 7 |
6 | Sorting in linear time | [T1] Chapter 8 |
7 | Medians and order statistics | [T1] Chapter 9 |
8 | Elementary Data Structures | [T1] Chapter 10 |
9 | Hash Tables | [T1] Chapter 11 |
10 | Binary Search Trees | [T1] Chapter 12 |
11 | Red-Black Trees | [T1] Chapter 13 |
12 | Dynamic Programming | [T1] Chapter 14 |
13 | Greedy Algorithms | [T1] Chapter 15 |
14 | Augmenting Data Structures | [T1] Chapter 17 |
15 | B-Trees | [T1] Chapter 18 |
16 | Elementary Graph Algorithms | [T1] Chapter 20 |
17 | Minimum Spanning Trees | [T1] Chapter 21 |
18 | Shortest Paths | [T1] Chapter 22 e 23 |
19 | Maximum Flow | [T1] Chapter 24 |