Algorithms (2017/2018)

Course code
4S02709
Credits
12
Coordinator
Ferdinando Cicalese
Teaching is organised as follows:
Unit Credits Academic sector Period Academic staff
ALGORITMI PER BIOINFORMATICA 6 INF/01-INFORMATICS I sem. Ferdinando Cicalese
LABORATORIO DI PROGRAMMAZIONE II 6 INF/01-INFORMATICS I sem. Alessandro Farinelli

Learning outcomes

------------------------
MM: ALGORITMI PER BIOINFORMATICA
------------------------
The course aims at providing the fundamental (methodological) tools for the design and analysis of algorithms with some emphasis on problems of interests for bioinformatics. In the presentation of the main technique of algorithm design, applications and example will be preferably taken from the area of bioinformatics and computational biology. The course will provide the students with the knowledge and skills necessary to be able to model simple 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 profitably attended the course, will be able to evaluate the applicability and effectiveness of basic algorithmic design techniques to simple computational problems.
------------------------
MM: LABORATORIO DI PROGRAMMAZIONE II
------------------------
The objective of the course 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. The projects implemented during the course focus on applications that are relevant to bioinformatics. At the end of the course the student must be able to: -- implement and verify algorithms to solve basic computational problems; -- implement software modules using the object-oriented programming paradigm; -- 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, applied to problems that are relevant to bioinformatics. All the teaching material for this course is available on the course web page hosted on the teachers' web site.

Assessment methods and criteria

------------------------
MM: ALGORITMI PER BIOINFORMATICA
------------------------
The exam verifies that the students have acquired sufficient confidence and skill in the use of basic algorithmic design and algorithmic analysis tools. The exam consists of a written test with open questions. The test includes some mandatory exercises and a set of exercises among which the student can choose what to work on. The mandatory exercises are meant to evaluate the student's knowledge of classical algorithms and analysis tools as seen during the course. "Free-choice" exercises test the ability of students to model "new" toy problems and design and analyse algorithmic solutions for it. The exam can also be passed via two midterm tests (structured as the main final exam). The relative weight of the midterm tests is proportional to the part of the course on which their are based. The overall result of the midterm exams is only valid towards the registration at the one of the exams in February session. The grade in "Algorithms" is given by the average of the grades achieved for the module "Algorithms for Bioinformatics" and the grade achieved for the module "Programming Laboratory II".
------------------------
MM: LABORATORIO DI PROGRAMMAZIONE II
------------------------
The grade in "Algorithms" is given by the average of the grades in "Algorithms for Bioinformatics" and the grade in "Programming Laboratory II". The exam for "Programming Laboratory II" involves the implementation and verification of code written in Java language and it is performed using the computer. The exam can be carried out by partial tests or by a single test. Partial exam is made up of a computer test (conducted in the lab during the course) and a project (developed during the course) that will be presented in an oral exam to the teacher at the end of the course. The final vote is given by the average of the votes of the two partial tests. Exam without partial testing is a single computer test performed at the exam dates. All tests and projects are individual work. Cheating is strictly forbidden and will determine lowering of grades for all students involved.

Reference books
Author Title Publisher Year ISBN Note
J. Kleinberg, É. Tardos Algorithm Design (Edizione 1) Addison Wesley 2006 978-0321295354
H.J. Böckenhauer, D. Bongartz Algorithmic Aspects of Bioinformatics Springer 2007
Neil C. Jones, Pavel A. Pevzner An introduction to bioinformatics algorithms (Edizione 1) MIT Press 2004 0-262-10106-8
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to Algorithms (Edizione 3) MIT Press 2009 0-262-03384-4