SDA
Data structures and algorithms
Description: This introductory course presents fundamental algorithms and data structures, as well as generic methods for efficiently solving computational problems. After a general introduction to algorithms and the concept of complexity, certain data structures are presented for their usefulness, such as hash tables, trees (particularly search trees), graphs, heaps, etc. Generic solution methods are then introduced through various examples, such as the divide-and-conquer principle, dynamic programming, and the class of greedy algorithms. Reference algorithms on graphs (Prim, Ford Fulkerson, Dijkstra, etc.) are presented in this context. The rest of the course deals with solving NP-hard problems using exact solution techniques (backtracking, branch-and-bound) and approximate techniques (polynomial time approximation schemes). The course concludes with the NPC class and the P=NP conjecture. The tutorials complement the various chapters of the course, focusing on specific problems. The practical work involves a project to design road navigation software spread over four sessions, drawing on all the chapters of the course.
Learning outcomes: At the end of this course, students will be able to identify the temporal and spatial complexities of an algorithm and place them in a hierarchy of complexity classes in order to evaluate their efficiency. They will be able to implement various generic techniques (dynamic programming, greedy algorithms, divide and conquer, etc.) to design an algorithm that is efficient in terms of complexity. Finally, they will be able to recognize the intrinsic difficulties of NP-hard problems and, where appropriate, use approximation algorithms rather than seeking an exact solution.
Evaluation methods: 3h written test, can be retaken.
Evaluated skills:
- Development
- Modelling
Course supervisor: Nicolas Jozefowiez
Geode ID: SPM-INF-009
CM:
- Introduction 1/2 (1.5 h)
- Introduction 2/2 (1.5 h)
- Problème de recherche et structures de données associatives 1/2 (1.5 h)
- Problème de recherche et structures de données associatives 2/2 (1.5 h)
- Graphes et parcours (1.5 h)
- Diviser pour régner (1.5 h)
- Programmation dynamique (1.5 h)
- Tas binaire et programmation dynamique (suite) (1.5 h)
- Algorithmes gloutons 1/2 (1.5 h)
- Algorithmes gloutons 2/2 (1.5 h)
- Problèmes NP-difficiles 1/2 (1.5 h)
- Problèmes NP-difficiles 2/2 (1.5 h)
- Problèmes NP-complets (1.5 h)
TD:
- Calcul de complexités (1.5 h)
- Graphes bipartis (1.5 h)
- Programmation dynamique (1.5 h)
- Problèmes NPC et algorithme d’approximation (1.5 h)
TP:
- Implémentation des graphes (4.0 h)
- Algorithmes géométriques (4.0 h)
- Plus court chemin dans un graphe (4.0 h)
- Problème du voyageur du commerce (4.0 h)
