J'ai trouvé l'explication de Wikipedia ci-dessous utile, après l'avoir lue trois fois :
Source : https://en.wikipedia.org/wiki/Amortized_analysis#Dynamic_Array
"Tableau dynamique
Analyse amortie de l'opération de poussée pour un réseau dynamique
Considérons un tableau dynamique dont la taille augmente au fur et à mesure que le nombre d'éléments augmente. tel qu'un ArrayList en Java. Si nous commençons avec un tableau dynamique de taille 4, il faudrait un temps constant pour y ajouter quatre éléments. Cependant, l'ajout d'un cinquième élément à ce tableau prendrait plus de temps, car le tableau tableau devrait créer un nouveau tableau de taille double (8), copier les anciens éléments dans le nouveau tableau, puis ajouter le nouvel élément. élément. Les trois opérations "push" suivantes prendraient également des temps constants de temps constant, et l'ajout suivant nécessiterait un autre doublement lent de la taille du tableau. lent doublement de la taille du tableau.
En général, si l'on considère un nombre arbitraire de poussées n sur un tableau de taille n, nous remarquons que les opérations de poussée prennent un temps constant sauf la dernière qui prend O(n) temps pour effectuer l'opération de doublement de la taille. de la taille. Puisqu'il y a eu n opérations au total, nous pouvons prendre la moyenne et trouver que pour pousser des éléments dans le tableau dynamique prend : O(n/n)=O(1), temps constant".
Selon moi, il s'agit d'une simple histoire :
Supposons que vous ayez beaucoup d'argent. Vous voulez les empiler dans une pièce. Vous avez de longues mains et de longues jambes, aussi longues que vous en avez besoin aujourd'hui ou à l'avenir. Et vous devez tout remplir dans une pièce, pour qu'il soit facile de la fermer à clé.
Vous allez donc jusqu'au bout/au coin de la pièce et vous commencez à les empiler. Au fur et à mesure que vous les empilez, la pièce va lentement manquer d'espace. Cependant, au fur et à mesure que vous la remplissez, il est facile de l'empiler. Vous avez l'argent, vous mettez l'argent. C'est facile. C'est O(1). Nous n'avons pas besoin de déplacer l'argent précédent.
Une fois que la salle manque d'espace. Nous avons besoin d'une autre pièce, plus grande. Ici, il y a un problème, puisque nous ne pouvons avoir qu'une seule pièce et donc qu'une seule serrure, nous devons transférer tout l'argent existant dans cette pièce dans la nouvelle pièce plus grande. Il faut donc déplacer tout l'argent de la petite pièce vers la plus grande. En d'autres termes, il faut les empiler à nouveau. Nous devons donc déplacer tout l'argent précédent. C'est donc O(N). (en supposant que N est le nombre total d'argent de l'argent précédent)
En d'autres termes, c'était facile jusqu'à N, une seule opération, mais lorsque nous avons dû déménager dans une pièce plus grande, nous avons effectué N opérations. En d'autres termes, si nous faisons la moyenne, il s'agit d'une insertion au début, et d'un déplacement supplémentaire lors du déménagement dans une autre pièce. Soit un total de 2 opérations, une insertion et un déplacement.
En supposant que N est grand comme 1 million, même dans une petite pièce, les 2 opérations par rapport à N (1 million) ne sont pas vraiment un nombre comparable, et sont donc considérées comme constantes ou O(1).
En supposant que nous fassions tout cela dans une autre pièce plus grande et que nous devions à nouveau déménager. C'est toujours la même chose. disons, N2 (disons, 1 milliard) est le nouveau montant du compte d'argent dans la pièce plus grande
Nous avons donc N2 (qui inclut N de la pièce précédente, puisque nous déplaçons toutes les pièces de la petite à la grande).
Nous n'avons besoin que de deux opérations, l'une étant l'insertion dans une pièce plus grande, puis une autre opération de déplacement vers une pièce encore plus grande.
Ainsi, même pour 2 N (1 milliard), il s'agit de 2 opérations pour chacun, ce qui n'est encore rien. C'est donc constant, ou O(1).
Ainsi, lorsque le N passe de N à N2, ou autre, cela n'a pas beaucoup d'importance. Il reste constant, soit O(1) opérations nécessaires pour chacun des N .
Supposons maintenant que vous ayez N égal à 1, très petit, que le nombre d'argent soit petit et que vous disposiez d'une pièce très petite, qui ne peut contenir qu'un seul nombre d'argent.
Dès que vous remplissez l'argent dans la pièce, la pièce est remplie.
Lorsque vous allez dans la pièce la plus grande, supposez qu'elle ne peut contenir qu'une seule somme d'argent supplémentaire, soit un total de 2 pièces d'argent. C'est-à-dire l'argent déplacé précédemment et un autre. Et la pièce est à nouveau remplie.
De cette façon, le N augmente lentement et n'est plus constant O(1), puisque nous déplaçons tout l'argent de la pièce précédente, mais que nous ne pouvons y mettre qu'un seul argent supplémentaire.
Après 100 fois, la nouvelle pièce contient 100 comptes d'argent de la précédente et 1 compte d'argent supplémentaire qu'elle peut accueillir. C'est O(N), puisque O(N+1) est O(N), c'est-à-dire que le degré de 100 ou 101 est le même, les deux sont des centaines, par opposition à l'histoire précédente de un à des millions et de un à des milliards.
Il s'agit donc d'une manière inefficace d'allouer des pièces (ou de la mémoire/de la RAM) pour notre argent (variables).
Une bonne façon de procéder est donc d'allouer plus d'espace, avec des puissances de 2.
1ère taille de pièce = 1 pièce d'argent
2ème taille de pièce = 4 pièces d'argent
3ème taille de pièce = 8 pièces d'argent
Taille de la 4ème pièce = 16 pièces d'argent
Taille de la 5ème pièce = permet de contenir 32 pièces d'argent
Taille de la 6e pièce = 64 pièces d'argent
Taille de la 7e pièce = 128 pièces d'argent
Taille de la 8e pièce = 256 pièces d'argent
Taille de la 9e pièce = correspond à 512 pièces d'argent
Taille de la 10e pièce = correspond à 1024 pièces d'argent
Taille de la 11e pièce = 2 048 pièces d'argent
...
Taille de la 16ème pièce = 65 536 pièces d'argent
...
32ème taille de pièce = correspond à 4 294 967 296 pièces d'argent
...
64ème taille de pièce= correspond à 18,446,744,073,709,551,616 compte d'argent
Pourquoi est-ce mieux ? Parce qu'il semble croître lentement au début, et plus rapidement par la suite, c'est-à-dire par rapport à la quantité de mémoire dans notre RAM.
Cela est utile car, dans le premier cas, même si c'est une bonne chose, le montant total du travail à effectuer par argent est fixe (2) et n'est pas comparable à la taille de la pièce (N), la pièce que nous avons prise dans les étapes initiales pourrait être trop grande (1 million) et nous pourrions ne pas l'utiliser pleinement en fonction de la possibilité d'obtenir autant d'argent à économiser dans le premier cas.
Cependant, dans le dernier cas, celui des puissances de 2, il croît dans les limites de notre mémoire vive. Ainsi, en augmentant les puissances de 2, l'analyse armotisée reste constante et est adaptée à la mémoire vive limitée dont nous disposons actuellement.
1 votes
mortoray.com/2014/08/11/qu'est-ce que le temps amorti ?