D'après ce que j'ai vu, il semble que la notation big-O et la complexité du temps et de la mémoire soient beaucoup soulignées dans l'enseignement formel de l'informatique ... mais étant autodidacte, cette perception est basée sur l'audition et la lecture de ce que les personnes ayant de telles formations Dire et écrire.
Bien que je pense que les idées et les concepts généraux sont importants, je ne crois pas que leur formalisation (comme la notation big-O et la terminologie variée) soit aussi importante, sauf à des fins de communication. Ce n'est pas parce que quelqu'un n'est pas familier avec la notation formelle et la terminologie qu'il ne peut pas voir comment et pourquoi un algorithme serait plus rapide qu'un autre dans un cas particulier. Les gens peuvent voir que le temps pris pour rechercher un arbre binaire équilibré se rapporte au logarithme en base 2 du nombre de nœuds sans d'abord se renseigner sur la théorie de la complexité dans un sens formel, s'ils comprennent comment l'arbre fonctionne et ont une compréhension raisonnable de haute mathématiques à l'école. Il est important de savoir quand prêter attention à la complexité et à l'utilisation de la mémoire, et à considérer les cas typiques et les pires, mais ... mais certaines personnes ne le font pas.
La notation et la terminologie deviennent importantes pour la communication. Ils donnent un bon moyen de transmettre une quantification des performances d'un algorithme à quelqu'un d'autre. Parce qu'il revient fréquemment dans les articles et les explications, il est utile d'en avoir au moins une compréhension vague afin qu'ils soient plus faciles à suivre.
Alors oui, les concepts sont importants (mais moins quand les ressources et le temps sont importants mais que les données ne le sont pas). Mais bien que les concepts soient importants, leur formalisation n'est souvent pas si importante - et il faut se rappeler que la notation et la terminologie ne sont pas les mêmes que les concepts eux-mêmes.
Éditer:
Je ne prétendrais pas comprendre les concepts avec autant de détails que quelqu'un qui a étudié formellement, mais beaucoup d'idées générales ont tout simplement du sens. Je pense vraiment qu'il est utile d'étudier officiellement cela, mais une partie de cette valeur peut encore exister sans.
En ce qui concerne l'introduction des concepts (en dehors de l'étude formelle), je pense qu'un bon début est d'encourager les gens à réfléchir à la quantité de mémoire disponible des structures de données, aux étapes des algorithmes et à la façon dont ces choses changent avec différentes données.
Cela aide également à considérer des situations hypothétiques et des changements, comme considérer ce qui se passe si un arbre est équilibré par rapport à ce qui se passe s'il est aussi déséquilibré que possible, ou combien de niveaux dans l'arbre la plupart des nœuds seraient, ou combien de nœuds supplémentaires il peut maintenez si la profondeur est augmentée d'un niveau. Cette façon de penser est généralement utile aux programmeurs de toute façon, pas seulement quand on regarde la complexité; et s'il est appliqué à la réflexion sur la façon dont les algorithmes et les structures de données fonctionnent dans des circonstances différentes, il va naturellement dans le même sens qu'un examen plus formel de la complexité.
O(n^2)
signifie.