ICC Semaine 3
Semaine 2 : algorithme / ingrédients de base / complexité
Semaine 3 : Conception d’algorithmes : Récursivité et programmation dynamique
Une approche fréquente pour résoudre un problème est de le décomposer en sous-
problèmes, chacun plus simple à résoudre.
Une classe particulière d’algorithmes qui fonctionnent sur ce principe sont les
algorithmes récursifs : algo qui fait appel à lui-même
Ex : calcul de la somme des n premiers nombres entiers
VERSION ITERATIVE :
Entrée : nombre entier positif n
Sortie : S(n)=
i 0
Pour i allant de 1 à n
x x + i
Sortir x
VERSION ALGO RECURSIF : Algo_rec
Entrée : nombre entier positif n
Sortie : S(n)
Si n + 1, sortir 1 ≫≫ C’est la condition d’arrêt, OBLIGATOIRE ‼
Sortir n + algo_rec(n-1) ≫ Fait appel à lui même et test avec la valeur (n-1)
Si n=3 > n 1
Sortir 3 + algo_rec (2)
N 1
Sortir 2 + algo_rec(1)
N=1 donc sort 1
2+1 = 3
3+3=6
Recherche d’un élément dans une liste ordonnée
Soit L une liste ordonnée : L = {-40, -12, 3, 17, 22, 40, 41, 57}
x un nombre entier
On aimerait savoir si x ?
ALGO DE DICHOTOMIE Prendre toute la liste, la diviser par 2 pour travailler sur une
plus petite liste
Entrée : liste L ordonnée, taille n, nombre x
Sortie : x ?
Si n = 1 { si x = L(1), sortir oui, sinon, sortir non} ≫ si la taille de ma liste est de 1
m = n/2 ≫ partie entière supérieure
Si x ≤ L(n), sortir dichotomie (L(1 ; m), m, x) ≫L(1 ; m) est la première partie de la liste
Sinon sortir dichotomie (L(m+1 ; n), (n-m) ; x)