Algorithms

Course objectives

General objectives: Acquire basic knowledge on fundamental algorithm design techniques and techniques to analyze the correctness and the complexity of an algorithm. Specific objectives: Knowledge and understanding: At the end of the course, the student knows: - fundamental algorithm design techniques, - techniques to analyze the correctness and the efficiency of an algorithm. Apply knowledge and understanding: At the end of the course, the student is able to: - analyze the complexity of a problem using rigorous mathematical tools, - analyze existing algorithms and data structures, - design and analyze new algorithms and data structures for simple real-life-problems. Critical and judgmental skills: The student, at the end of the course, should be able to autonomously choose which algorithmic technique is best suited for a given problem and to evaluate among several algorithmic solutions for a certain problem which one should prefer. Communication skills: The student will acquire the ability to express an algorithmic idea through the use of pseudocode. Learning ability: The student will acquire the ability to analyze a problem, and to design the necessary data structures and the correct and efficient algorithms for the problem.

Channel 1
GIANNI FRANCESCHINI Lecturers' profile

Program - Frequency - Exams

Course program
Basics: -Basic notations -Asymptotic notations -Worst case analysis -Divide and conquer Sorting and selection: -Heapsort -Mergesort -Quicksort -Sorting in linear time -Selection problems Some data structures: -Basic data structures -Binary Trees -RB-Trees Amortized analysis -Basic amortized analysis -The accounting method -The potential method -Dynamic arrays Some more data structures -B-Trees and the external memory model -Union-find -Fibonacci Heap Graphs and basic graph algorithms -Representations of graphs -BFS and DFS -Topological sorting -Strongly connected components Greedy algorithms -Basics of greedy algorithms -Huffman codes Dynamic programming -Basics of dynamic programming -Rod cutting -Matrix-chain multiplication -Longest common subsequence Minimum spanning trees -Kruskal's algorithm -Prim's algorithm Shortest paths problems -The Bellman-Ford algorithm -Dijkstra's algorithm -The Floyd-Warshall algorithm String algorithms and data structures -String sorting -Tries -Suffix sorting -Suffix trees Programming -The C programming language
Prerequisites
No prerequisite.
Books
"Introduction to Algorithms" Cormen, Leiserson, Rivest, Stein 3rd edition
Frequency
Non-mandatory.
Exam mode
The course can be passed in two ways 1) by passing two written exams held at the half point and at the end of the course 2) by passing a written exam held during any of the post-course examination sessions
Bibliography
None
  • Lesson code1049269
  • Academic year2025/2026
  • CourseBioinformatics
  • CurriculumSingle curriculum
  • Year3rd year
  • Semester2nd semester
  • SSDINF/01
  • CFU6