web-dev-qa-db-fra.com

Complexité Big-O pour n + n-1 + n-2 + n-3 + (...) + 1

Je me demandais .. quelle est la complexité d'un algorithme qui commence avec n éléments (que je traverse en faisant quoi que ce soit). Je retire un élément, je le fais à nouveau .. Je retire un autre élément et je le fais à nouveau jusqu'à ce qu'il ne me reste plus qu'un élément. est-ce O (n log n)? Je ne peux pas le visualiser ...

12
scala newbie

Le célèbre mathématicien Gauss aurait trouvé une formule pour ce problème précis quand il était à l'école primaire. Et comme mentionné par @Henry dans les commentaires, c'est: enter image description here

Source: Wikipedia

Comme le travail est effectué pour chaque entrée, c'est-à-dire, O(1) est requis pour chaque "élément". Par conséquent, le problème est dans O (n ^ 2).

La visualisation (aussi Wikipedia ) peut être vue comme un carré à moitié rempli: enter image description here

18
gue

Pour résoudre la complexité de O (n + n-1 + n-2 .... n fois), nous devons utiliser Sum pour la formule mathématique par voir ce lien

=> n+n+n...n times - (1+2+3...n times)
=> n^2- (n^2+n)/2

La complexité sera

(n^2-n)/2
1
Deepak Gupta