En gros, la complexité temporelle est un moyen de résumer comment le nombre d'opérations ou d'exécution d'un algorithme augmente à mesure que la taille d'entrée augmente.
Comme la plupart des choses dans la vie, un cocktail peut nous aider à comprendre.
SUR)
Lorsque vous arrivez à la fête, vous devez serrer la main de tout le monde (effectuez une opération sur chaque élément). À mesure que le nombre de participants N
augmente, le temps / travail qu'il vous faudra pour serrer la main de tout le monde augmente au fur et à mesure O(N)
.
Pourquoi O(N)
et non cN
?
Il y a des variations dans le temps qu'il faut pour serrer la main des gens. Vous pouvez faire la moyenne de cela et le capturer dans une constante c
. Mais l'opération fondamentale ici - serrer la main de tout le monde - serait toujours proportionnelle à O(N)
, quoi qu'il en c
soit. Lorsque nous débattons de l'opportunité d'aller à un cocktail, nous sommes souvent plus intéressés par le fait que nous devrons rencontrer tout le monde que par les moindres détails de l'aspect de ces réunions.
O (N ^ 2)
L'hôte du cocktail veut que vous jouiez à un jeu stupide où tout le monde rencontre tout le monde. Par conséquent, vous devez rencontrer d' N-1
autres personnes et, parce que la personne suivante vous a déjà rencontré, elles doivent rencontrer des N-2
personnes, etc. La somme de cette série est x^2/2+x/2
. Au fur et à mesure que le nombre de participants augmente, le x^2
terme devient très rapide , nous abandonnons donc tout le reste.
O (N ^ 3)
Vous devez rencontrer tout le monde et, à chaque réunion, vous devez parler de tout le monde dans la salle.
O (1)
L'hôte veut annoncer quelque chose. Ils sonnent un verre à vin et parlent fort. Tout le monde les entend. Il s'avère que peu importe le nombre de participants, cette opération prend toujours le même temps.
O (log N)
L'hôte a présenté tout le monde à la table par ordre alphabétique. Où est Dan? Vous pensez qu'il doit être quelque part entre Adam et Mandy (certainement pas entre Mandy et Zach!). Compte tenu de cela, est-il entre George et Mandy? Non. Il doit être entre Adam et Fred, et entre Cindy et Fred. Et ainsi de suite ... nous pouvons localiser efficacement Dan en regardant la moitié de l'ensemble, puis la moitié de cet ensemble. En fin de compte, nous regardons les individus O (log_2 N) .
O (N log N)
Vous pouvez trouver où vous asseoir à la table en utilisant l'algorithme ci-dessus. Si un grand nombre de personnes venaient à la table, une à la fois, et toutes le faisaient, cela prendrait du temps O (N log N) . Cela se révèle être le temps qu'il faut pour trier une collection d'articles quand ils doivent être comparés.
Meilleur / pire cas
Vous arrivez à la fête et avez besoin de trouver Inigo - combien de temps cela prendra-t-il? Cela dépend de votre arrivée. Si tout le monde tourne autour, vous avez touché le pire des cas: cela prendra du O(N)
temps. Cependant, si tout le monde est assis à la table, cela ne prendra que du O(log N)
temps. Ou peut-être pouvez-vous tirer parti du pouvoir de cri de verre à vin de l'hôte et cela ne prendra que du O(1)
temps.
En supposant que l'hôte n'est pas disponible, nous pouvons dire que l'algorithme de recherche d'Inigo a une limite inférieure de O(log N)
et une limite supérieure de O(N)
, selon l'état de la fête à votre arrivée.
Espace et communication
Les mêmes idées peuvent être appliquées pour comprendre comment les algorithmes utilisent l'espace ou la communication.
Knuth a écrit un bel article sur l'ancien intitulé "La complexité des chansons" .
Théorème 2: Il existe des chansons arbitrairement longues de complexité O (1).
PREUVE: (due à Casey et au Sunshine Band). Considérez les chansons Sk définies par (15), mais avec
V_k = 'That's the way,' U 'I like it, ' U
U = 'uh huh,' 'uh huh'
pour tous k.