ALGORITHMS
Obiettivi formativi
The course aims at providing the students with a wide knowledge of fundamental algorithms and data structures, with emphasis on applications and performance analysis of real implementations. It will develop algorithmic design skills, exposing the students to complex problems that require significant problem solving efforts and that can be exploited in a variety of contexts.
Risultati di apprendimento attesi
Knowledge and understanding:
At the end of the course the students will have a deep knowledge of fundamental algorithmic techniques for solving efficiently a variety of computational problems. They will also acquire a clear understanding of the impact of algorithms in today’s and tomorrow’s business and society.
Applying knowledge and understanding:
The students will be able to:
- understand and define clear requirements to a problem, decompose it into manageable pieces, assess alternative problem solving strategies, and employ algorithmic techniques to design efficient solutions
- implement and engineer their algorithmic solutions using the programming skills obtained in previous courses
Making judgements:
We expect students to be able to analyze and compare different solutions to computational problems, critically choosing the most efficient one on a rigorous methodological basis.
Communication skills:
The course will give the students the ability to communicate effectively - in English - their ideas, proposals, and critical reasoning in the field of algorithm design, analysis, and implementation.
Learning skills:
This course will provide the students with the ability to learn a series of design and analytical tools and to apply them to real problems. The method of study will make the students able to break down complex problems arising in specific applications into manageable pieces and to apply algorithmic patterns in order to design rigorous and documentable solutions.
Contenuti Del Corso
The course focuses on the design and analysis of algorithms and data structures. In particular, it will cover the following topics:
- Fundamental algorithms: searching and sorting
- Advanced data types: priority queues and dictionaries
- Graph algorithms: breadth-first and depth-first search, minimum spanning trees, and shortest paths.
- Algorithmic techniques: divide and conquer, greedy, dynamic programming
Testi Di Riferimento
Lecture notes and other course material provided by the teacher and made available on the Luiss Learn platform.
Two useful textbooks:
- Jeff Erickson. Algorithms. Available online at: http://jeffe.cs.illinois.edu/teaching/algorithms/
- Thomas H. Cormen. Charles E. Leiserson. Ronald L. Rivest. Clifford Stein. Introduction to Algorithms. Third Edition. The MIT Press. Cambridge, Massachusetts.
Metodologie Didattiche
Lectures, lab sessions and group project work. Students’ participation during lectures is strongly encouraged.
Modalità di verifica dell'apprendimento
Competences will be assessed via a written theory exam (75% of the final grade) and a group project work (25% of the final grade). The software project will be introduced since the very beginning of the course (week 1), with intermediate milestones and feedback. The project should be completed by the first exam session. There will be a penalty for late submissions. Additional details are available on Luiss Learn.
Criteri per l’assegnazione dell’elaborato finale
A thesis will be assigned (upon specific request to the instructor) to students who demonstrate a serious and motivated interest to the course topics.
Settimana 1
Course overview and organization. Syllabus discussion. Deadlines and rules of conduct.
Algorithmic thinking. A toy example: Fibonacci numbers. Correctness, running time, memory usage.
Software lab: project presentation (part 1 released). Theory lab.
Settimana 2
More on recursion: recursion trees, recurrence relations. Analysis of recursive vs iterative algorithms. Asymptotic analysis.
Theory and software labs.
Settimana 3
Input size. Worst case, best case, average case analysis. Searching algorithms: sequential and binary search. Solving recurrences by iteration. Quadratic sorting algorithms. First test preparation.
Bubblesort lab, theory homework solution.
Settimana 4
Efficient comparison-based sorting algorithms. Master theorem. Divide and conquer sorting algorithms: mergesort.
Software and theory labs.
First intermediate test.
Settimana 5
Quicksort. Solving recurrences by substitution. Priority queues and heapsort.
Project part 2 released. Discussion of part 1.
Settimana 6
Upper and lower bounds. Lower bound on sorting. Counting sort. Dictionaries. Binary search trees: introduction.
Software and theory labs.
Settimana 7
More on binary search trees. Balanced search trees: AVL trees.
Software and theory labs.
Settimana 8
Graphs. Data structures for graphs. Second test preparation.
Software and theory labs.
Second intermediate test.
Settimana 9
Depth-first search. Breadth-first search. Applications.
Project part 3 released. Software and theory labs.
Settimana 10
Algorithmic techniques: greedy algorithms.
Software and theory labs.
Settimana 11
More algorithmic techniques: dynamic programming.
Theory and software labs.
Settimana 12
Course recap. Third intermediate test preparation.
Third intermediate test.