Recherche sur la Complexité Algorithmique
Introduction
La complexité algorithmique est une mesure de l'efficacité d'un algorithme en termes de temps
d'exécution (complexité temporelle) et d'utilisation de la mémoire (complexité spatiale). Elle permet
de comparer différents algorithmes accomplissant la même tâche.
Complexité temporelle et spatiale
La complexité temporelle mesure le nombre d'opérations qu'un algorithme effectue. La complexité
spatiale mesure la quantité de mémoire utilisée pendant l'exécution. On utilise souvent la notation
Big-O pour exprimer ces complexités.
Exemple simple : Tri à bulles (Bubble Sort)
Le tri à bulles est un algorithme de tri simple, mais inefficace pour de grandes données. Sa
complexité temporelle est O(n^2).
Code en C :
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
Fonctions récursives
Une fonction récursive s'appelle elle-même. Exemple : calcul de la factorielle.
Code en C :
int factorielle(int n) {
if (n <= 1) return 1;
else return n * factorielle(n - 1);
Complexité temporelle : O(n)
Version itérative (inverse de la récursion)
L'itération peut remplacer la récursion pour éviter l'utilisation excessive de la pile mémoire.
Code en C :
int factorielle_iterative(int n) {
int result = 1;
for (int i = 2; i <= n; i++) {
result *= i;
return result;
Complexité temporelle : O(n)
Comparaison récursif vs itératif
Les fonctions récursives sont plus élégantes, mais peuvent consommer plus de mémoire. Les
versions itératives sont souvent plus efficaces en pratique.
Conclusion
Comprendre la complexité algorithmique permet de concevoir des programmes efficaces. Même de
simples algorithmes comme le tri à bulles permettent d'illustrer des concepts fondamentaux de
manière claire.