web-dev-qa-db-fra.com

Quelle est la preuve de (N – 1) + (N – 2) + (N – 3) + ... + 1 = N * (N – 1) / 2

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

22
skystar7
7
Viral Shah

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.

20
Steve314

(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.

16
sepp2k

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.

8
gius

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.

4
John Feminella

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

2
John Kane

Somme de la progression arithmétique

(A1 + AN)/2 * N = (1 + (N-1))/2 * (N-1) = N * (N-1)/2

1
ShPavel

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.

1
martiert

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.

1
IVlad