Un algorithme représente une approche systématique et claire pour résoudre un problème spécifique. Lorsqu'un développeur cherche une solution, il commence par formuler un algorithme. Une fois qu'il estime que cet algorithme est valide, il se penche sur son efficacité. Il peut se demander, par exemple, « cet algorithme est-il performant ? » Plutôt que de simplement l'implémenter et de le tester sur sa propre machine, ce qui pourrait donner des résultats biaisés, il est plus judicieux d'adopter une méthode d'évaluation plus rigoureuse. En effet, si deux développeurs mettent en œuvre des algorithmes différents pour le même enjeu et mesurent leur rapidité sur leurs ordinateurs respectifs, celui doté d'un matériel plus performant pourrait conclure à tort que son algorithme est supérieur, alors que ce n'est pas nécessairement le cas. De plus, cette approche requiert une phase d'implémentation qui peut être ardue, voire impossible, avant d'obtenir une première estimation de la rapidité de l'algorithme. Pour remédier à cela, un outil essentiel et efficace a été développé : la complexité algorithmique, que nous explorerons dans ce cours.