# Algorithms (2020/2021)

Course code
4S02709
Credits
12
Coordinator
Roberto Posenato
Teaching is organised as follows:
ALGORITMI PER BIOINFORMATICA 6 INF/01-INFORMATICS II semestre, I semestre Roberto Posenato
LABORATORIO DI PROGRAMMAZIONE II 6 INF/01-INFORMATICS See the unit page See the unit page

#### Learning outcomes

The course aims at providing the fundamental methodological tools for the design and analysis of al-gorithms with emphasis on their employment in the solution of simple bioinformatics problems. The students will learn to implement basic algorithmic solution and fundamental data structures for solving problems in bioinformatics by employing object oriented programming. The course is structured on two modules: Algoritmi per Bioinformatica and Laboratorio di Programmazione II, which are detaled below. Module 1: The students will learn foundations of algorithm design and analysis. They will be able to model simple (real world) problems in terms of computational problems; to quantify the computational resources necessary to execute an algorithm, hence to compare different algorithmic solutions in terms of their computational cost. In particular, a student who has profitably attended the course, will be able to evaluate the applicability and effectiveness of basic algorithmic design techniques to simple computational problems. Module 2: The aim of this module is to provide the basic knowledge to implement fundamental algorithms using object oriented programming. The reference programming language is Java. The teaching methodology includes assisted software development and the implementation of specific projects focussed on applications that are relevant to bioinformatics. At the end of the course the student will be able to use the main data structures available in Java and develop new data structures for the implementation of specific software modules.

#### Syllabus

------------------------
MM: ALGORITMI PER BIOINFORMATICA
------------------------
Basic definitions: Computational Problems and Algorithms Analysis of algorithms: worst case and average case analysis; Algorithmic complexity: asymptotic notations; basic tools for the analysis of algorithms; solution of recurrences; Algorithms for searching sorting and selection. Data Structure for the implementing a dictionary: queues, heaps, binary search trees, hash tables; Design techniques: divide and conquer; greedy; dynamic programming; Graphs and Graph algorithms: graph traversals, basic connectivity problems, topological sorting
------------------------
MM: LABORATORIO DI PROGRAMMAZIONE II
------------------------
Object-oriented programming and the Java language. Implementation of simple programs in Java (primitive types and control structures). Definition of classes and methods. Exception management in Java. Recursion. Interfaces and packages. Implementation of sorting algorithms, search (greedy and exhaustive), and main algorithms on graphs.

#### Assessment methods and criteria

There is only one assessment for both modules.
The exam verifies that the students have acquired sufficient confidence and skill in: the use of basic algorithmic design, algorithmic analysis tools, and Java implementation of algorithms. The exam consists of a written test with multiple-choices and open questions. The multiple-choices exercises are meant to evaluate the student's knowledge of classical algorithms, analysis tools, and the basic knowledge of Java. Open exercises test are meant to evaluate the ability of students to model "new" toy problems, design and analyse algorithmic solutions for it, and implement the algorithm solution in Java.

 Author Title Publisher Year ISBN Note Docente del corso Dispense del docente 2020 Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduzione agli algoritmi e strutture dati (Edizione 3) McGrawHill 2010 978-88-386-6515-8