Oui, je dirais que connaître quelque chose sur la complexité de calcul est un must pour tout programmeur sérieux. Tant que vous ne traitez pas d'énormes ensembles de données, tout ira bien sans connaître la complexité, mais si vous voulez écrire un programme qui s'attaque à de graves problèmes, vous en avez besoin.
Dans votre cas spécifique, votre exemple de recherche de composants connectés peut avoir fonctionné pour des graphiques de jusqu'à nœuds. Cependant, si vous avez essayé un graphique avec 100000 nœuds, l'algorithme de votre professeur aurait probablement réussi cela en 1 seconde, tandis que votre algorithme aurait (selon la gravité de la complexité) pris 1 heure, 1 jour, ou peut-être même 1 éternité.100100.000
Une erreur quelque peu courante que les étudiants font dans notre cours d'algorithmes est d'itérer sur un tableau comme celui-ci:
while array not empty
examine first element of array
remove first element from array
Ce n'est peut-être pas le code le plus beau, mais dans un programme compliqué, quelque chose comme ça peut apparaître sans que le programmeur en soit conscient. Maintenant, quel est le problème avec ce programme?
Supposons que nous l'exécutons sur un ensemble de données de éléments. Par rapport au programme suivant, l'ancien programme fonctionnera 50 000 plus lentement.100.00050.000
while array not empty
examine last element of array
remove last element from array
J'espère que vous convenez qu'avoir les connaissances nécessaires pour faire fonctionner votre programme fois plus rapidement est probablement une chose importante pour un programmeur. Comprendre la différence entre les deux programmes nécessite des connaissances de base sur la théorie de la complexité et des connaissances sur les particularités du langage dans lequel vous programmez.50.000
O ( 1 )O ( n )n−1
12n2nn=100.000
Ce n'est qu'un exemple de jouet, mais cela nécessite déjà une compréhension de base de la complexité pour faire la différence entre les deux programmes, et si vous essayez réellement de déboguer / optimiser un programme plus compliqué qui a cette erreur, il faut une compréhension encore plus grande pour trouver où est le bug. Parce qu'une erreur comme la suppression d'un élément d'un tableau de cette façon peut être très bien cachée par des abstractions dans le code.
Une bonne compréhension de la complexité permet également de comparer deux approches pour résoudre un problème. Supposons que vous ayez trouvé deux approches différentes pour résoudre le problème des composants connectés par vous-même: afin de décider entre eux, il serait très utile d'estimer (rapidement) leur complexité et de choisir la meilleure.