# Algorithms - ALGORITMI (2015/2016)

Course code
4S02709
Name of lecturer
Romeo Rizzi
Number of ECTS credits allocated
6
ING-INF/05 - INFORMATION PROCESSING SYSTEMS
Language of instruction
Italian
Location
VERONA
Period
II semestre dal Mar 1, 2016 al Jun 10, 2016.

To show the organization of the course that includes this module, follow this link Course organization

#### Lesson timetable

II semestre
Day Time Type Place Note
Tuesday 10:30 AM - 12:30 PM optional practice session Lecture Hall G from Mar 22, 2016  to Jun 10, 2016
Tuesday 10:30 AM - 1:30 PM lesson Laboratory Alfa
Thursday 8:30 AM - 11:30 AM lesson Lecture Hall I

#### Learning outcomes

The goal of this course is to familiarize with the main techniques and methodologies for the design and analysis of efficient algorithms.
We also present some more advanced paradigms and introduce a few approaches
for the dealing with NP-hard problems (approximation algorithms, implicit enumeration and branch & bound algorithms).

Recommended Prerequisite
------------------------
To attend the course lessons in a productive way, a student should be aware of the complexity issues related to problems and algorithms and interested in the design of efficient algorithms.

PROGRAMMING: c/c++ is the reference programming language.

ALGORITHMS: The student should be confident with the following concepts:
1. problems and formulations, encodings and instances
2. running time, memory consumption, worst case/average/amortized analysis, asymptotic growth and notation
3. Basic data structures as list, stack, queue, tree, heap.
4. Sorting
5. Graph representation and fundamental graph algorithms:
5.1 Graph visit: BFS, DFS.
5.2 Topological ordering. Connected component.
5.3 Minimal spanning tree. Kruskal and Prim algorithm.
5.4 Single-source shortest path: Dijkstra algorithm and Bellman-Ford one.
5.5 All-pairs shortest path: Floyd-Warshall algorithm and Johnson one.
5.6 Max flow: Ford-Fulkerson algorithm.

#### Syllabus

We follow a direct approach driven by the eager of solving
interesting algorithmic problems together.
Just to draw a path, that could be the following.

Main concepts recall about computational problems: definition, instances, encoding, precise and approximate models. Optimization computational problem.
Main concepts recall about algorithms: computational resources, input encoding, input size/cost, computational time. Worst and average analysis. Computational time and growth order.
Computational time vs. hardware improvements: main relations. Efficient algorithms and tractable problems.

Recursion and induction
-----------------------
examples of the inductive approach in solving problems.

-------------------------
Definition and application to some problems.

---------------
Definition and application to some problems.

----------------------------
Definition and application to some problems.
Memoization and Dynamic programming.

Branch & Bound technique
------------------------
Definition and application to some problems.
Lower bounds and upper bounds.

Approximations algorithms
-------------------------
A few classical examples (node cover, set cover, Christofides for the metric TSP, an FPTAS for the knapsack).

Fixed parameter tractability
----------------------------
A few examples.
Kernels, iterative compression, color coding.

#### Assessment methods and criteria

The final grade for Algorithms and Complexity is the rounded up average of the mark of Algorithms and the mark of Complexity, where a 30+lode accounts for a 33.
There is no need to give the two exams within a same session: both marks keep validity over the year and, for Algorithms, it is the greatest mark collected that counts.

The test for Algorithms lasts 5 houers and takes places in a computer room: the student designs and codes (in c or c++) the most efficient algorithms he can for three given problems.
Past exams with solutions can be found at the web-page of the course:
http://profs.sci.univr.it/~rrizzi/classes/Algoritmi/index.html

Depending on the edition of the course and the agreement with the students, it is also possible to collect add-up marks on the mark of the exam. These can come with active participation and work of service for the course, and through participating to the projects. We refer to the page of the course for an up to date information on the projects:
http://profs.sci.univr.it/~rrizzi/classes/Algoritmi/index.html