J'ai obtenu cette formule à partir d'un livre de structure de données dans l'algorithme de tri à bulles.
Je sais que nous sommes (n-1) * (n fois), mais pourquoi la division par 2?
Quelqu'un peut-il me l'expliquer ou en donner la preuve détaillée?.
Je vous remercie
Voir nombres triangulaires .
Commencez par le triangle ...
*
**
***
****
représentant 1 + 2 + 3 + 4 jusqu'à présent. Coupez le triangle en deux le long d'une dimension ...
*
**
* **
** **
Faites pivoter la plus petite partie de 180 degrés et collez-la sur la plus grande partie ...
**
*
*
**
**
**
Fermez l'espace pour obtenir un rectangle.
À première vue, cela ne fonctionne que si la base du rectangle a une longueur paire - mais si elle a une longueur impaire, vous coupez simplement la colonne du milieu en deux - cela fonctionne toujours avec une largeur d'un demi-unité deux fois plus grande ( zone encore entière) bande sur un côté de votre rectangle.
Quelle que soit la base du triangle, la largeur de votre rectangle est (base / 2)
et la hauteur est (base + 1)
, donnant ((base + 1) * base) / 2
.
Cependant, mon base
est votre n-1
, car le tri à bulles compare une paire d'éléments à la fois, et itère donc uniquement sur (n-1) positions pour la première boucle.
(N-1) + (N-2) +...+ 2 + 1
Est une somme de N-1 éléments. Maintenant, réorganisez les articles de sorte qu'après le premier arrive le dernier, puis le second, puis l'avant-dernier, c'est-à-dire (N-1) + 1 + (N-2) + 2 +..
. La façon dont les articles sont ordonnés maintenant, vous pouvez voir que chacune de ces paires est égale à N (N-1 + 1 est N, N-2 + 2 est N). Puisqu'il y a N-1 articles, il y a (N-1)/2 de telles paires. Vous ajoutez donc N (N-1)/2 fois, donc la valeur totale est N*(N-1)/2
.
Essayez de faire des paires de nombres à partir de l'ensemble. Le premier + le dernier; le second + l'avant dernier. Cela signifie n-1 + 1; n-2 + 2. Le résultat est toujours n. Et puisque vous ajoutez deux nombres ensemble, il n'y a que (n-1)/2 paires qui peuvent être faites à partir de (n-1) nombres.
C'est donc comme (N-1)/2 * N.
Je sais que nous sommes (n-1) * (n fois), mais pourquoi la division par 2?
C'est seulement (n - 1) * n
si vous utilisez un bubbleort naïf. Vous pouvez réaliser des économies importantes si vous remarquez ce qui suit:
Après chaque comparaison et échange, le plus grand élément que vous avez rencontré sera au dernier endroit où vous vous trouviez.
Après la première passe, l'élément le plus grand sera en dernière position; après le ke passer, le ke le plus grand élément sera dans le ke dernière position.
Ainsi, vous n'avez pas à trier le tout à chaque fois: il vous suffit de trier n - 2 éléments la deuxième fois, n - 3 éléments la troisième fois, et ainsi de suite. Cela signifie que le nombre total de comparaisons/échanges que vous devez faire est de (n - 1) + (n - 2) + ...
. Il s'agit d'un série arithmétique, et l'équation pour le nombre total de fois est (n - 1) * n/2 .
Exemple: si la taille de la liste est N = 5, alors vous faites 4 + 3 + 2 + 1 = 10 swaps - et notez que 10 est le même que 4 * 5/2.
Ceci est une preuve assez courante. Une façon de le prouver est d'utiliser l'induction mathématique. Voici un lien: http://zimmer.csufresno.edu/~larryc/proofs/proofs.mathinduction.html
Somme de la progression arithmétique
(A1 + AN)/2 * N = (1 + (N-1))/2 * (N-1) = N * (N-1)/2
Supposons que n = 2. Ensuite, nous avons 2-1 = 1 sur le côté gauche et 2 * 1/2 = 1 sur le côté droit.
Notons f(n) = (n-1) + (n-2) + (n-3) + ... + 1
Supposons maintenant que nous avons testé jusqu'à n = k. Ensuite, nous devons tester pour n = k + 1.
sur le côté gauche, nous avons k + (k-1) + (k-2) + ... + 1, donc c'est f (k) + k
Sur le côté droit, nous avons alors (k + 1) * k/2 = (k ^ 2 + k)/2 = (k ^ 2 + 2k - k)/2 = k + (k-1) k/2 = k f (k)
Donc, cela doit tenir pour chaque k, et cela conclut la preuve.
Voici une preuve par induction, considérant les termes N
, mais c'est la même chose pour N - 1
:
Pour N = 0
La formule est évidemment vraie.
Supposons que 1 + 2 + 3 + ... + N = N(N + 1) / 2
soit vraie pour certains N
naturels.
Nous prouverons que 1 + 2 + 3 + ... + N + (N + 1) = (N + 1)(N + 2) / 2
est également vrai en utilisant notre hypothèse précédente:
1 + 2 + 3 + ... + N + (N + 1) = (N(N + 1) / 2) + (N + 1) = (N + 1)((N / 2) + 1) = (N + 1)(N + 2) / 2
.
La formule est donc valable pour tous les N
.