Study-unit ALGORITHMS AND DATA STRUCTURES

Course name Computer science and electronic engineering
Study-unit Code 70A00090
Curriculum Ingegneria informatica
Lecturer Emilio Di Giacomo
Lecturers
  • Emilio Di Giacomo
Hours
  • 81 ore - Emilio Di Giacomo
CFU 9
Course Regulation Coorte 2020
Supplied 2022/23
Supplied other course regulation
Learning activities Caratterizzante
Area Ingegneria informatica
Sector ING-INF/05
Type of study-unit Obbligatorio (Required)
Type of learning activities Attività formativa monodisciplinare
Language of instruction Italian
Contents + Introduction to algorithms and data structures

+ Sorting

+ Data Structures

+ Advanced Techniques for Algorithm Design

+ Graphs and graph algorithms
Reference texts T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein "Introduzione agli Algoritmi e Strutture Dati", McGraw-Hill
Educational objectives The course objective is to provide to the students basic competences on the design and use of the main data structures, on the design and use of algorithms to solve problems, and on the techniques to evaluate their performances.

At the end of the course the student is expected to have the following knowledges:

- knowledge of the techniques for the complexity analysis of algorithms and problems

- knowledge of some foundamentals data structures (priority queues, search trees, etc.)

- knowledge of some foundamentals computational problems (sorting, minimum spanning tree, shortest paths, etc.)

- knowledge of some techinques for the design of algorithms for optimization problems (dynamic programming, greedy techinques)

At the end of the course the student is expected to have the following abilities:

- ability of establishing the complexity of an algorithm (even a recursive one)

- ability to implement and use the data structures presented in the course

- ability to find efficient algorithmic solutions

- ability to design algorithms for optimization problems using the general techniques presented during the course (dynamic programming, greedy techniques)
Prerequisites In order to be able to understand the subjects of the course the student must know the basic concepts of programming. She should be able to write programs to solve simple problems. In particular she must be able to effectively use the recursion. Some mathematical background is also required. The student should be able to understand (and make) mathematical proofs. In particular she should know the mathematical induction and should be able to understand (and make) proofs by induction. Finally, some knowledge of concepts from the Mathematical analysis, such as the concept of function, of limit, of series and of integral.
Teaching methods The course is organized as follows:

1- Lectures (69 hours) during which the various subjects of the course are explained and some excercises are done in order to help the understanding of the explained subjects and as a training for the exam.

2- Practical activity in the computer lab (12 hours). Students, helped by the teacher, write programs on the computer thus applying the concepts that they learned during the lectures.
Other information
Learning verification modality The exam consists of an oral examination and an implementation project. The objective of the oral examination is to evaluate the student's knowledge of the theoretical concepts taught during the course and his/her ability to find algorithmic solutions to solve simple problems.
The project, whose object has to be defined with the teacher, consists of the implementation and experimentation of algorithms and/or data structures. The project can be carried out by a single student or by a group of 2-3 students.
Extended program + Introduction to algorithms and data structures
- Introduction to algorithms.
- Complexity Analysis.
- Asymptotic notation.
- Recurrences .

+ Sorting
- Comparison-based sorting algorithms.
- Sorting in linear time.

+ Data Structures
- Elementary Data Structures: Stacks, Queues, Lists, Trees.
- Hashing.
- Binary Serach Trees.
- Red-black trees.
- Priority Queues: Heap.

+ Advanced Tecniques for Algorithm Design
- Dynamic Programming.
- Greedy techniques.

+ Graphs and graph algorithms
- Graphs.
- Graph traversal.
- Topological sort.
- Minimum Spanning tree.
- Single source shortest paths.

Digital Information Service by Lidia Pozzoblu - Thanks to Aldo Bizzilupo for Web site and other technical assistance.