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:DiRla fonction potentielle, le coût amorti
de l’opération iest obtenu par l’expression suivante cci=ci+ΦiΦi1.
Ainsi, sur l’ensemble des opérations Pn
i=1 cci=Pn
1(ci+ ΦiΦi1)
=Pn
1ci+ ΦnΦ0.
Si le potentiel choisi vérifie ΦnΦ0alors le coût amorti global Pn
i=1 cci
est une borne supérieure du coût réel total.
Sur l’exemple de la pile, on obtient un coût amorti en O(1) en utilisant la
méthode de l’agrégat avec l’argument global qu’il y a dépilement possible que
si l’on a fait auparavant un empilement. On retrouve le même résultat par
la seconde méthode en prenant un potentiel Φiégal au nombre d’éléments
présents sur la pile à l’étape i, ce qui correspond à un coût amorti au pire
égal à 2à chaque étape (si l’opération est un empilement), et par conséquent
au pire 2n
nsur l’ensemble des opérations.
Exercice : Coût amorti d’un tableau dynamique
The problem is to implement a table that can resize itself when an insertion
arises and the table is full. A common heuristic is to allocate a new table
with a size doubled. If only insertions are performed, the load factor of a
table is always at least 1/2, and thus the amount of wasted space never
exceeds half the total space.
In the following pseudo-code, we assume that Tis an object representing
the table. The field table[T]contains a pointer to the block of storage rep-
resenting the table. The field num[T]contains the number of items in the
table, and the field size[T]is the total number of slots in the table.
Initially, the table is empty: num[T] = size[T]=0.
Algorithm 1: Table Insert
Input: The table Tand the element to be inserted x
Result:TTx
if size[T]=0then1
allocate table[T]of size 12
size[T]13
end4
if num[T] = size[T]then5
allocate newtable of size 2×size[T]6
insert all items in table[T]into newtable7
free table[T]8
table[T]newtable9
size[T]2×size[T]10
end11
insert xinto table[T]12
num[T]num[T]+113
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !