37635 - Data Structure and Algorithms

Academic Year 2020/2021

  • Moduli: Gianluigi Zavattaro (Modulo 1) Pietro Di Lena (Modulo 2)
  • Teaching Mode: Traditional lectures (Modulo 1) Traditional lectures (Modulo 2)
  • Campus: Bologna
  • Corso: First cycle degree programme (L) in Computer Science (cod. 8009)

    Also valid for First cycle degree programme (L) in Mathematics (cod. 8010)

Learning outcomes

Knowing the main data structures (like sequences, trees, dictionaries, priority queues, graphs) and the main algorithms for solving some basic computational problems (like searching, sorting, tree and graph visits, minimum spanning trees, shortest paths, matrix multiplication) . Understanding and using the main methodologies (e.g. divide-&-conquer, dynamic programming, greedy, backtracking, local search) for designing efficient iterative and recursive algorithms. Understanding and using the main techniques for analyzing iterative and recursive algorithms. Knowing the basic computational classes (P, NP, NP-hardness) and evaluating the inherent difficulty of basic computational problems.

Course contents

Data structures. Arrays, records, lists, stacks, queues. Trees. Tree visits (preorder, inorder, postorder). Sets. Dictionaries. Binary search. Hash tables. Priority queues. Heaps. Heapsort. Balanced search trees. MFSET. Graphs. DFS and BFS. Design and analysis of algorithms. Computational complexity. Order of growth. Recurrence equations. Lower bounds. Design techniques: divide-&-conquer, backtrack, greedy, local search, dynamic programming. Sorting: Mergesort, Quicksort, Shellsort. Algorithms on graphs: Minimum Spanning Tree (Prim, Kruskal), Shortest Paths (Bellman-Ford, Dijkstra, Floyd-Wharshall). Complexity. The P and NP classes. NP-completeness.

There is also a module of laoratory in which data structures are implemented and used, and the Object-Oriented paradigm as well as some Java notions are introduced.

Readings/Bibliography

Main text:

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Algoritmi e strutture dati
McGraw-Hill - seconda edizione. 2008.

Suggested books:

A.A. Bertossi & A. Montresor, Algoritmi e Strutture di Dati, Citta' Studi Edizioni, Torino. Terza edizione. 2014.

Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
Introduzione agli algoritmi e strutture dati
McGraw-Hill - terza edizione. 2010

Teaching methods

The course is aught during the second semester, and it comprises lessons and lectures. First, theoretical foundations are presented. After base notions are introduced, the main data structures and computational problems are presented. Algorithms for solving such problems are designed, pointing out the design techniques employed. For each proposed algorithm, theorems are stated, and sometimes proved, showing their correctness and temporal computational complexity. Next, several exercises are solved. Moreover, practical design and implementation of data structures are consuidered in the laboratory lessons.

Assessment methods

The assessment consists in a project and in a final written examination.


The project can be done by small goups of students and must be discussed with the teacher.

The written exam lasts 2 hours, during which no books, notes, calculatora and electronic devices are allowed. The written exam consists of 4 questions, some of which are exercises whose purpose is to check the practical ability to design correct and efficient algorithms to solve computational problems, while other are open-answer questions whose objective is to verify that the expected theoretical knowledge has been acquired.

Teaching tools

Projector.

Office hours

See the website of Gianluigi Zavattaro

See the website of Pietro Di Lena

SDGs

Quality education

This teaching activity contributes to the achievement of the Sustainable Development Goals of the UN 2030 Agenda.