Coût amorti
Denis TRYSTRAM
Notes de cours ALGO – ENSIMAG 1A – février 2013
Coût amorti
Motivation. Le contexte ici est un peu différent d’auparavant. On consid-
ère une série d’opérations effectuées sur une structure de données. Certaines
opérations sont plus coûteuses que d’autres, mais elles sont rares et ainsi,
leur impact global reste faible.
Définition. Le temps pour exécuter une séquence de nopérations sur une
structure de données est moyenné sur l’ensemble de la structure : Tamorti =
Pn
i=1 T(i)
n(où idésigne l’opération courante).
Exemple. Gestion d’un pile d’objets (LIFO). Ici, on distingue les opérations
standard d’empilement (pop-in), de dépilement (pop-out) et le dépilement
d’un groupe de kobjets d’un seul coup. Si on fait une analyse classique
de coût, au pire l’opération de dépilement multiple peut coûter ns’il y a n
objets sur la pile. Cette situation n’est possible que si l’on a fait avant n
opérations peu coûteuses d’empilements...
L’analyse amortie diffère d’une analyse en moyenne au sens où on n’utilise
pas de probabilités. L’idée est d’examiner sur une moyenne d’opérations avec
une analyse plus fine en pire cas sur plusieurs opérations consécutives. On
distingue essentiellement deux types de méthodes : la méthode des agrégats
et la méthode de comptage (avec sa variante du potentiel).
•Agrégats.∀n, une séquence de nopérations consécutives prend au
pire un total de T(n)au total, le coût amorti par opération est Tamorti =
T(n)
n.
•Analyses comptables. Contrairement aux agrégat, cette méthode
s’intéresse à chaque opération locale. On peut penser à une analogie
économique où l’on va réserver un crédit à chaque opération peu coû-
teuse pour l’utiliser plus tard pour les opérations coûteuses. On note
ccile coût amorti de l’opération iet cison coût réel.
Ce crédit peut être calculé directement par une fonction adéquate ou
par une fonction potentielle. Si Diest la structure de données après la
i-ème opération et Φi:Di→Rla fonction potentielle, le coût amorti
de l’opération iest obtenu par l’expression suivante cci=ci+Φi−Φi−1.