Algorithmique Avancé Et Complexité - Procédures Récursives
Algorithmique Avancé Et Complexité - Procédures Récursives
Algorithmique Avancé Et Complexité - Procédures Récursives
Exemple: Tab=(1,2,3,4,5)
T(n) = 8T(n/2)+O(n2)
Analyse des algorithmes
« diviser pour régner »
Lorsqu’un algorithme contient un appel récursif
à lui-même, son temps d’exécution peut souvent
être décrit par une équation de récurrence qui
décrit le temps d’exécution global pour un
problème de taille n en fonction du temps
d’exécution pour des entrées de taille moindre.
Analyse des algorithmes
« diviser pour régner »
• Cette récurrence se décompose suivant les trois étapes du
paradigme de base :
- Si la taille du problème est suffisamment réduite, n ≤ c pour une
certaine constante c, la résolution est directe et consomme un
temps constant O(1).
- Sinon, on divise le problème en a sous-problèmes chacun de
taille 1/b de la taille du problème initial. Le temps d'exécution
total se décompose alors en trois parties :
- D(n) : le temps nécessaire à la division du problème en
sous-problèmes.
- aT (n/b) : le temps de résolution des a sous-problèmes.
- C(n) : le temps nécessaire pour construire la solution finale
à partir des solutions aux sous-problèmes.
Analyse des algorithmes
« diviser pour régner »
La relation de récurrence prend alors la forme :
Exemple 2 : T(n)=T(2n/3)+1
• a = 1 , b = 3/2 , k = 0
• a = bk
• T(n) = O(nklog n) = O(log n)
Autres résolutions de récurrence
Equations de récurrence linéaires:
T(n)=aT(n-1)+ f(n)