Università degli Studi di Urbino Carlo Bo / Portale Web di Ateneo


A.Y. Credits
2019/2020 9
Lecturer Email Office hours for students
Valerio Freschi Wednesday 09.00 - 11.00
Teaching in foreign languages
Course with optional materials in a foreign language English
This course is entirely taught in Italian. Study materials can be provided in the foreign language and the final exam can be taken in the foreign language.

Assigned to the Degree Course

Applied Informatics (L-31)
Date Time Classroom / Location
Date Time Classroom / Location

Learning Objectives

The aim of the course is to illustrate the main techniques for algorithms design and to describe and analyze the most known basic algorithms together with respective used data structures, with particular focus on computational complexity facets.


01. Introduction to algorithms and data structures:
 01.01 Algorithms and their typologies
 01.02 Correctness of an algorithm with respect to a problem
 01.03 Complexity of an algorithm with respect to resource usage
 01.04 Data structures and their typologies
02. Classes of problems:
 02.01 Decidable and undecidable problems
 02.02 Tractable and intractable problems
 02.03 Cook theorem
 02.04 NP-completeness
03. Complexity of the algorithms:
 03.01 Notations to express the asymptotic complexity
 03.02 Computing the complexity of non-recursive algorithms
 03.03 Computing the complexity of recursive algorithms
04. Array algorithms:
 04.01 Arrays: basic definitions and classical problems
  04.02 Traversal algorithm for arrays
 04.03 Linear search algorithm for arrays
 04.04 Binary search algorithm for sorted arrays
 04.05 Comparison criteria for sorting algorithms for arrays
 04.06 Insertsort
 04.07 Selectsort
 04.08 Bubblesort
 04.09 Mergesort
 04.10 Quicksort
 04.11 Heapsort

05. List algorithms:
 05.01 Lists: basic definitions and classical problems
 05.02 Traversal, search, insertion and removal algorithms for lists
 05.03 Insertion and removal algorithms for queues
 05.04 Insertion and removal algorithms for stacks
06. Tree algorithms:
 06.01 Trees: basic definitions and classical problems
 06.02 Traversal and search algorithms for binary trees
 06.03 Search, insertion and removal algorithms for binary search trees
 06.04 Balancing criteria for binary search trees
07. Graph algorithms:
 07.01 Graphs: basic definitions and classical problems
 07.02 Traversal and search algorithms for graphs
 07.03 Topological sorting algorithm for direct acyclic graphs
 07.04 Kruskal algorithm
 07.05 Prim algorithm
 07.06 Properties of the shortest path
 07.07 Bellman-Ford algorithm
 07.08 Dijkstra algorithm
08. Algorithmic techniques:
 08.01 Divide-and-conquer technique
 08.02 Dynamic programming
 08.03 Greedy technique
 08.04 Backtracking technique
09. Laboratory activity:
 09.01 C language fundamentals: recall, editing, compilation, debugging
 09.02 Pseudorandom number generators: rand and srand functions
 09.03 Algorithms complexity experimental evaluation: timing and counters
 09.04 Experimental comparison of sorting algorithms for arrays 
 09.05 Experimental comparison of search algorithms for binary trees 
 09.06 Implementation of graph algorithms: breadth-first and depth-first traversal algorithms, Dijkstra algorithm

Bridging Courses

Although there are no mandatory prerequisites for this exam, students are strongly recommended to take it after Procedural Programming and Calculus 1.
It is also worth noticing that the topics covered by this course will be used in Operating Systems, Databases, Object Oriented Programming and Modeling, and Logic and Functional Programming.

Learning Achievements (Dublin Descriptors)

Knowledge and understanding:
At the end of the course, the student will learn: to be aware of the importance of efficient design of algorithms; the fundamental knowledge for analyzing the computational resources required by an algorithm; the main algorithms and data structures for solving basic computational problems.

Applying knowledge and understanding:
The student will learn the methodologies typical of algorithmic design and analysis. In particular she/he will be able to design a series of classic algorithms (sorting, search, etc.) working on different data structures (arrays, lists, trees, graphs) and to analyze their computational complexity. The ability to apply these techniques will be developed and sharpened during laboratory activities, where various algorithms will be analyzed and implementated in C language.

Making judgements:
The student will learn how to apply the algorithmic methodologies to understand and solve new problems of computational nature. Critical discussions during classes and laboratory activities will stimulate and develop the making judgements ability of the student.
Communication skills:
The student will acquire the ability to communicate the fundamental concepts of algorithms and data structures with an appropriate and rigorous terminology. She/he will learn to describe the problems related to the design and analysis of efficient algorithms, and the methodologies adopted to solve them. 

Learning skills:
The student will acquire the ability to study and learn algoritmic techniques and fundamental data structures. She/he will learn to recognize the importance of computational resources (in particular space and time) in order to be able to autonomoulsy develop solutions for novel problems related to efficient program design.

Teaching Material

The teaching material prepared by the lecturer in addition to recommended textbooks (such as for instance slides, lecture notes, exercises, bibliography) and communications from the lecturer specific to the course can be found inside the Moodle platform › blended.uniurb.it

Didactics, Attendance, Course Books and Assessment


Theory lectures and laboratory exercises, both face-to face and on-line.


Although recommended, course attendance is not mandatory.

Course books

Cormen, Leiserson, Rivest, Stein, "Introduzione agli Algoritmi e alle Strutture Dati", McGraw-Hill, 2010.
(Cormen, Leiserson, Rivest, Stein, "Introduction to Algorithms", MIT Press, 2009.)
Demetrescu, Finocchi, Italiano, "Algoritmi e Strutture Dati", McGraw-Hill, 2008.
Crescenzi, Gambosi, Grossi, "Strutture di Dati e Algoritmi", Pearson/Addison-Wesley, 2012.
Sedgewick, "Algoritmi in C", Pearson, 2015.
(Sedgewick, "Algorithms in C", Addison-Wesley, 1998.)


Learning achievements will be evaluated through three types of assessments: project (to be developed individually or by groups of two students), written exam, and oral exam. This procedure is aimed in particular at evaluating the achievement of applying knowledge and understanding, with respect to problem solving and efficient usage of computational resources and, at the same time, at assessing the student's capabilities of summarizing concepts and her/his communication skills.

The individual project, which changes at each exam session, has to be submitted at least seven days before the written exam. The project is passed if the mark (which is valid for all the exam calls of the same academic year) is at least 18/30. Should the project be resubmitted in a subsequent exam call, the mark of the previously submitted project is cancelled. If the resubmission takes place in the same exam session, a 5/30 penalty is applied to the mark of the newly submitted project. 

The written exam, which can be taken only if the project has been passed, consists of seven questions to be answered in one hour and is passed if the mark (which is valid only for the exam call in which the written exam is taken) is at least 18/30. 

The oral exam, which can be taken only if the project and the written exam have been passed, consists of further questions about the course program. If passed, it determines a spread between -5/30 and 5/30 of the average of the two previous marks, thus yielding the final mark. 


The course offers additional e-learning facilities on the Moodle platform > elearning.uniurb.it

« back Last update: 10/09/2019


Questo contenuto ha risposto alla tua domanda?

Il tuo feedback è importante

Raccontaci la tua esperienza e aiutaci a migliorare questa pagina.

Se sei vittima di violenza o stalking chiama il 1522

Il 1522 è un servizio pubblico promosso dalla Presidenza del Consiglio dei Ministri – Dipartimento per le Pari Opportunità. Il numero, gratuito è attivo 24 h su 24, accoglie con operatrici specializzate le richieste di aiuto e sostegno delle vittime di violenza e stalking.

Posta elettronica certificata



Performance della pagina

Università degli Studi di Urbino Carlo Bo
Via Aurelio Saffi, 2 – 61029 Urbino PU – IT
Partita IVA 00448830414 – Codice Fiscale 82002850418
2021 © Tutti i diritti sono riservati