ALGORYTHMS AND DATA STRUCTURE

Course objectives

General objectives: The aim of the course is to introduce fundamental principles and techniques for data representation, algorithm design, and analysis of their performance. The application of these principles and techniques is demonstrated through the study of classic algorithms and data structures, which are of significant theoretical and practical importance. Linear and non-linear connected structures (lists, stacks, queues, trees, graphs, hash tables) are covered, along with their respective sorting, searching, and selection problems, analyzing the performance of the corresponding algorithms. Specific objectives: Knowledge and understanding: By the end of the course, students are expected to be familiar with classic data structures and algorithms for solving fundamental problems, as well as the main techniques for performance analysis. Applied knowledge and understanding: Through the application of acquired knowledge, students learn to compare different solutions based on their computational characteristics (time taken, memory usage) and are able to provide a concrete implementation of the studied data structures and algorithms in a programming language. Judgment autonomy: Targeted exercises enable students to develop the ability to design and implement algorithmic solutions and evaluate their performance. Communication skills: Classroom lectures provide students with the technical language necessary for effective idea exchange; this language is used by students during interactive exercises to propose and analyze their own solution to the chosen problem. Learning ability: The course introduces basic notions, principles, and techniques necessary for the study of algorithms and data structures in general. Although the application of these elements is demonstrated on a selection of fundamental problems, the course equips students with the ability to generalize this application and thus tackle the study of more advanced approaches not covered in the program.

Channel 1
FABIO PATRIZI Lecturers' profile

Program - Frequency - Exams

Course program
Algorithm Analysis (12 hours) Algorithms and data structures: generalities and examples. Introduction to the notion of cost (time and memory). Asymptotic notation for cost function and analysis techniques (worst, best and average case). Analysis techniques for recursive algorithms: iterative, substitution, recurrence relation, Master Theorem. Abstract data types (12 hours) Abstract data types (stacks, queues, trees) and their implementations. Tree traversal algorithms. Sorting (12 hours) Incremental sorting algorithms (description, implementation and analysis): SelectionSort, InsertionSort, BubbleSort, HeapSort. Sorting algorithms based on divide et impera approach: MergeSort, QuickSort. Lower bound on cost of sorting for model based on comparisons. Linear sorting algorithms (description, implementation and analysis): IntegerSort, BucketSort, RadixSort. Dictionary (6 hours) Dictioanry data type. Binary search trees. AVL trees. Hash tables (6 hours) Graphs (12 hours) Graphs and their representations. Graph traversal algorithms (description, implementation and cost). Greedy algorithms. Minimum spanning tree and its computation based on greedy algorithms: Krsukal, Prim, Boruvka. Shortest paths on graphs and algorithms for their computation (description, implementation and analysis): computation of distances, Bellman and Ford Algorithm, computation of shortest paths with single source on DAGs, Dijkstra algorithm.
Prerequisites
Basic knowledge of at least one progamming language, preferably C, required. Previous attendance of the Course in Programming Techniques (Tecniche della Programmazione) is strongly recommended.
Books
C. Demetrescu, I. Finocchi, G. F. Italiano: Algoritmi e strutture dati, McGraw-Hill, seconda edizione
Teaching mode
The course format includes standard weekly lectures and pratice lab sessions.
Frequency
Attendance is not mandatory but strongly encouraged.
Exam mode
The exam consists of a test (70% of final mark) including open-ended questions about theoretical and practical aspects, and a project in C (30%). The test aims at evaluating the acquired knowledge (problems, data structures, algorithms, definitions, proofs of results) and the ability of the student to apply such knowledge to specific problems (design of an algorithm, application to a specific instance, evaluation of an algorithm's cost). The project aims at evaluating the ability of students to realize a concrete system.
Lesson mode
The course format includes standard weekly lectures and pratice lab sessions.
  • Lesson code1022760
  • Academic year2024/2025
  • CourseInformation Engineering
  • CurriculumInformatica
  • Year2nd year
  • Semester1st semester
  • SSDING-INF/05
  • CFU6
  • Subject areaIngegneria informatica