web-dev-qa-db-fra.com

Qu'est-ce que c'est O(...) et comment puis-je le calculer?

Aider! J'ai une question où j'ai besoin d'analyser le Big-O d'un algorithme ou du code.

  • Je ne sais pas exactement ce que Big-O est ou comment il se rapporte à Big-theta ou à d'autres moyens d'analyser la complexité d'une algorithme.

  • Je ne sais pas si Big-o fait référence au temps pour exécuter le code, ou la quantité de mémoire qu'il prend (compromis spatiaux/temps).

  • J'ai des devoirs en informatique où je dois prendre des boucles, peut-être un algorithme récursif et proposer le Big-O pour cela.

  • Je travaille sur un programme où j'ai le choix entre deux structures de données ou des algorithmes avec un Big-O connu et je ne savais pas lequel choisir.

Comment puis-je comprendre comment calculer et appliquer Big-o à mon programme, devoirs ou connaissances générales de l'informatique?

Remarque: cette question est une cible de dupe canonique pour d'autres questions Big-o comme déterminé par la communauté . Il est intentionnellement large de pouvoir contenir une grande quantité d'informations utiles pour de nombreuses questions. N'utilisez pas le fait que c'est cette large comme une indication que les questions similaires sont acceptables.

31
mowwwalker

Le O(...) fait référence à la notation Big-O, qui est un moyen simple de décrire le nombre d'opérations qu'un algorithme prend pour faire quelque chose. Ceci est connu sous le nom de complexité temporelle .

Dans la notation Big-O, le coût d'un algorithme est représenté par son fonctionnement le plus coûteux en grand nombre. Si un algorithme a pris n3 + n2 + n étapes, il serait représenté O (n3). Un algorithme qui comptait chaque élément dans une liste fonctionnerait dans O(n) Time, appelé temps linéaire.

Pour une liste des noms et des exemples classiques sur Wikipedia: Commandes de fonctions communes

Matériel associé:

22
MaxGabriel