Différence entre la complexité temporelle et la complexité informatique

14

Pour mesurer la complexité d'un algorithme, s'agit-il d'une complexité temporelle ou d'une complexité informatique? Quelle est la différence entre eux?

J'ai utilisé pour calculer le nombre maximal (pire) d'opérations de base (les plus coûteuses) dans l'algorithme.

Hilal médian
la source
2
Pas une réponse à votre question, mais étant donné votre intérêt pour ce genre de chose, vous pourriez également être intéressé par cs.stackexchange.com/q/13669/755
DW
1
«complexité d'un algorithme» lorsqu'il est fait référence à un runtime asymptotique est un terme impropre (fréquemment utilisé). Vous voulez dire "runtime asymptotique".
Raphael

Réponses:

9

La complexité informatique n'est qu'un terme plus général, car le temps n'est pas la seule ressource à considérer. Le deuxième plus évident est l'espace utilisé par un algorithme, et donc nous pouvons parler d' espace complexité de l' , également en tant que partie de la complexité de calcul. En effet, nous pouvons le faire pour toute mesure que vous vous souciez d'utiliser, bien sûr, certaines mesures sont plus utiles que d'autres.

Donc, compter le nombre de pas qu'un algorithme prend dans le pire des cas donne une complexité temporelle liée au problème qu'il résout, compter la quantité de mémoire / le nombre de cellules de bande qu'il utilise donne une complexité d'espace liée, etc. etc.

Rappelez-vous également que si vous voulez être strict, la complexité fait référence au problème, pas à l'algorithme, donc un problème a des limites de complexité, un algorithme a des limites de ressources (temps d'exécution, utilisation de l'espace ...). C'est juste une question de formalité définitionnelle, la théorie de la complexité traite des problèmes. Oui, les algorithmes sont un outil clé pour analyser les problèmes et la complexité et l'algorithmique est étroitement liée, mais formellement, nous ne dirions pas que Merge-Sort (un algorithme) est en , c'est le problème S o r t i n g qui est en P . Merge-Sort utilise certaines ressources ( O ( n log n )PSortingPO(nlogn)par exemple). La limite de ressource et l'exactitude de l'algorithme impliquent la complexité (supérieure) du problème, mais ce sont des choses différentes. est également T C 0 -complete sous A C 0 -réductions, cette complexité liée ne peut vraiment être déclaré pour un problème (mais a des implications algorithmiques).SortingTC0AC0

Luke Mathieson
la source
@shekharsuman Par problème, je veux dire la notion formelle d'un problème de calcul (par exemple k-Vertex Cover), pas la signification générale. La complexité informatique est la classification des problèmes informatiques, donc dans un sens formel, la complexité se réfère à ce que nous pouvons dire sur le problème. Les résultats sur les algorithmes nous renseignent sur la complexité des problèmes, mais ne sont pas en soi des résultats de complexité (mais de manière informelle, nous parlons de la complexité d'un algorithme).
Luke Mathieson
1
@shekharsuman le premier paragraphe de la page wikipedia est un assez bon résumé.
Luke Mathieson
@Luke Merci, cela clarifie les choses. Cependant, si je peux utiliser l'idiome "type de complexité le plus utilisé pour évaluer formellement les algorithmes" (même si je sais que ce n'est pas précis). Quel serait le temps par rapport au calcul? Ce que je pense, c'est qu'en général, la chose la plus importante est le temps, car les ressources sont plus extensibles dans un certain sens!
Hilal médian
1
Le temps @MedianHilal est en effet la mesure la plus couramment considérée pour la complexité d'un problème. L'espace n'est pas trop loin derrière (au moins par les théoriciens de la complexité et les personnes traitant de très grands ensembles de données, moins au jour le jour).
Luke Mathieson
-2

La complexité cyclomatique est souvent utilisée comme mesure de la complexité de calcul, un exemple utile est fourni dans /programming/9097987/calculation-of-cyclomatic-complexity

Il peut y avoir de nombreux chemins différents (éventuellement imbriqués) à travers un algorithme lui conférant une complexité cyclomatique élevée, mais pas de boucles lui donnant une faible complexité temporelle. Un programme avec une seule boucle aurait une faible complexité cyclomatique mais peut-être une complexité temporelle élevée.

La complexité cyclomatique est souvent utilisée comme mesure de la maintenance requise pour le code. Une discussion plus détaillée est fournie dans http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity . Ceci est différent de la complexité temporelle qui est la mesure du temps d'exécution du code et peut être utilisée pour évaluer la perception des utilisateurs de l'efficacité du système.

velouté
la source
La question porte sur la complexité de calcul, pas sur la complexité cyclomatique!
Am_I_Helpful
Vous voudrez peut-être lire l'OP - il pose des questions sur la complexité d'un algorithme - La complexité cyclomatique donne une mesure statique de la complexité de calcul d'un algorithme - essayez d'ajouter des commentaires positifs la prochaine fois
velvetytoast
2
La complexité cyclomatique ne mesure pas la complexité de calcul. La complexité informatique fait référence au temps d'exécution, et non à la complexité de la structure du code source.
DW
@DW Plus précisément, la complexité de calcul fait référence aux ressources requises pour résoudre un problème (qui peuvent inclure l'espace, l'alternance, les appels Oracle, etc., ainsi que le temps).
David Richerby
@DavidRicherby Je ne suis pas un expert en la matière, veuillez donc corriger si vous avez tort. Les mesures de complexité statique, telles que la taille du programme, jouent un rôle dans certaines situations. Ai-je raison de dire que cela est davantage lié à la complexité de Kolmogorov. Cela ne serait-il pas également le cas pour la complexité cyclomatique? Un type de complexité pour écrire des programmes ou des problèmes, et l'autre pour les résoudre ou les exécuter ... peut-être une brève approximation de la situation. Je ne suis pas sûr d'écrire une question sensée à ce sujet.
babou