Le tout c'était de multiplier n avec un facteur k de manière à ce que n[i+2] ~ n[i+1] + n[i]. En effet dans le cas d'une réallocation complète et dans si l'allocateur mémoire a des propriétés de type 'best fit', ce facteur de croissance peut permettre de réussir l'allocation i+2 en réutilisant l'espace des deux précédentes allocations i+1 et i. C'est choisi par pas mal d'implémentations mais aussi parce l'accroissement est moins important qu'avec k = 2 tout en restant exponentiel.
On cherche donc un k tel que
¤ n[i+1] = k * n[i]
¤ n[i+2] = n[i+1] + n[i]
<=> k² * n[i] = k * n[i] + n[i]
<=> k² = k + 1
on cherche k réel strictement positif
<=> k = (1 + sqrt(5)) / 2
i.e. k ~ 1,62
Et ne pas oublier qu'on peut faire une approximation en calcul entier en faisant '16 * n / 10' par exemple.
Message édité par Taz le 01-02-2007 à 17:19:55