INFORMATICA II
Academic Year 2026/2027 - Teacher: GEORGIA FARGETTAExpected Learning Outcomes
The course introduces the fundamentals of algorithm design and analysis, with particular emphasis on fundamental data structures and algorithms on graphs and sorting. A section of the course is dedicated to the use of Python and the main scientific libraries for computational mathematics, with an introduction to Artificial Intelligence and Machine Learning concepts.
Knowledge and understanding: students will acquire knowledge of the main algorithm design techniques (incremental, divide-and-conquer), methods for analyzing algorithmic complexity, and the functioning of fundamental data structures (stacks, queues, trees, graphs). Basic concepts of regression and clustering will also be introduced.
Applying knowledge and understanding: students will develop skills in designing and implementing algorithms in Python, managing datasets with scientific libraries, and solving practical computational problems. They will also be able to apply supervised and unsupervised learning models to simple case studies.
Making judgements: students will gain the ability to select the most appropriate data structures and algorithms depending on the problem, evaluate the efficiency and limitations of proposed solutions, and critically interpret the results obtained.
Communication skills: students will acquire the ability to clearly and rigorously present algorithmic solutions and programming projects, including through code documentation and discussion of results.
Learning skills: students will be able to independently deepen their understanding of algorithms and AI techniques not covered in the course, using specialist literature and technical documentation, and apply the acquired knowledge to new contexts in computer science and mathematics.
Course Structure
Teaching organization
total study 150 hours
103 hours of individual study
35 hours of frontal lectures12 hours of exercises
The course is articulated in frontal lectures and pratical classes
If the course is delivered in blended or remote mode, appropriate adjustments may be made to the above, in order to ensure consistency with the syllabus.
Required Prerequisites
Attendance of Lessons
Attendance at classes is strongly recommended.Detailed Course Content
The course introduces the foundations of algorithm design and analysis, with practical applications to computer science and computational mathematics. The program is completed with an introductory section on Artificial Intelligence and Machine Learning, using Python and scientific libraries.
Algorithm design and complexity
Algorithms as a technology for solving computational problems
Design techniques: incremental methodology and divide-and-conquer
Algorithm complexity and its practical implications
Fundamental data structures
Stacks, queues, linked lists: definitions, basic operations, and implementation
Hash tables: basic concepts and implementation
Binary search trees: structure, basic operations, and implementation
Graphs and graph algorithms
Graph definition: directed and undirected
Representations and implementation (adjacency lists, matrices)
Traversals: BFS (Breadth-First Search) and DFS (Depth-First Search) – definition and implementation
Shortest-path algorithms:
Dijkstra – description and implementation
Bellman-Ford – description and implementation
Analysis of recursive algorithms and sorting
Solving recurrences:
Substitution method
Iterative method and recursion-tree method
Master theorem
Sorting algorithms:
MergeSort, QuickSort – description and implementation
Linear-time sorting: Counting Sort, Radix Sort – description and implementation
Medians and order statistics: linear-time selection algorithm – description and implementation
Laboratory: Python for computational mathematics
Introduction to Python for scientific computing
Use of main libraries:
NumPy: arrays, vector/matrix operations
SciPy: linear algebra, integrals, optimization
Pandas: simplified dataset management in tabular form
Introduction to Artificial Intelligence and Machine Learning
Historical background and motivations of AI
Learning paradigms:
Supervised learning
Unsupervised learning
Basic algorithms:
Linear regression: model, cost function, optimization – and implementation
Clustering (k-means): distance, centroid, iterative algorithm – and implementation
Textbook Information
Thomas H. Cormen et al., Introduction to Algorithms, The MIT Press
Course Planning
| Subjects | Text References | |
|---|---|---|
| 1 | Algorithm Design and Complexity | T. H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022 - Lecturer Notes |
| 2 | Fundamental Data Structures | T. H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022 - Lecturer Notes |
| 3 | Graphs and Graph Algorithms | T. H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022 - Lecturer Notes |
| 4 | Analysis of Recursive Algorithms and Sorting | T. H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022 - Lecturer Notes |
| 5 | Laboratory: Python for Computational Mathematics | Jake VanderPlas, Python Data Science Handbook, O'Reilly -documentazione ufficiale NumPy/Pandas -Lecturer Notes |
| 6 | Introduction to Artificial Intelligence and Machine Learning | Aurélien Géron, Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, O'Reilly - Lecturer Notes |
Learning Assessment
Learning Assessment Procedures
To sit for the final exam, you must have booked on the SmartEdu portal. For any technical issues regarding your booking,
please contact the Segreteria Didattica.
The exam consists of two parts.
The first part is a practical exam on arguments treated in the course, in Python.
The second part consists of a project on the argument studied in class.
The verbalization will be preceded by a brief discussion on the results of the two tests and, in dubious cases, by a short oral test.
Final grades will be assigned taking into account the following criteria:
Rejected: Basic knowledges have not been acquired. The student is not able to solve simple exercises and implement simple Python programs.
18-23: Basic knowledges have been acquired. The student solves simple exercises and has a moderate ability of implementing simple Python programs.
24-27: All the knowledges have been acquired. The student solves all the proposed exercises and implements the requested program making few errors.
28-30 cum laude: All the knowledges have been completely acquired. The student applies knowledge and has excellect communication skills, learning skills and making judgements.
Learning assessment may also be carried out on-line, should the conditions require it. To ensure equal opportunities and in compliance with current laws, interested students may request a personal interview in order to plan any compensatory and/or dispensatory measures based on educational objectives and specific needs. Students can also contact the CInAP (Centro per l'integrazione Attiva e Partecipata – Servizi per le Disabilità e/o i DSA) referring teacher within their department (https://www.cinap.unict.it/content/referenti).
Examples of frequently asked questions and / or exercises
Asymptotic Complexity
*"Given the recurrence , determine which case of the Master Theorem applies and write the asymptotic solution."*
Sorting Algorithms
"Describe the worst case of QuickSort: in which input configuration does it occur, what is the resulting complexity, and how does the randomized choice of pivot mitigate the problem?"
Data Structures
"Explain the difference between adjacency list and adjacency matrix for graph representation: state the space complexity and the cost of the main operations, motivating the choice based on graph density."
Graphs — Traversals
"Perform a BFS traversal on the following graph starting from node A, indicating step by step the state of the queue, the set of visited nodes, and the computed distances."
Python Programming — OOP
"Implement in Python a base class Shape with a color attribute and a subclass Rectangle that overrides the describe() method and adds an area() method. Use super().__init__() in the subclass constructor."
Scientific Libraries
"Using NumPy, create an array of 10 random elements, compute its mean and standard deviation, and select the elements greater than the mean."