Ce cours introduit les concepts fondamentaux de la complexité algorithmique, une branche de l’informatique théorique qui étudie les ressources nécessaires (temps et espace mémoire) pour exécuter un algorithme. Les étudiants apprendront à analyser et comparer l’efficacité des algorithmes à l’aide de la notation asymptotique (O, Ω, Θ), à distinguer différentes classes de complexité (polynomiale, exponentielle, logarithmique, etc.) et à comprendre les notions de problèmes P, NP et NP-complets. L’objectif est de développer la capacité à concevoir des algorithmes efficaces, à évaluer leur performance et à reconnaître les limites théoriques de la calculabilité.