J'ai appris aujourd'hui que l'analyse d'algorithme diffère en fonction du modèle de calcul. C'est quelque chose auquel je n'ai jamais pensé ni entendu parler.
Un exemple qui m'a été donné, qui l'a illustré davantage, par l'utilisateur @chi était:
Par exemple, considérons la tâche: étant donné retournent . En RAM, cela peut être résolu dans car l'accès au tableau est à temps constant. En utilisant des MT, nous devons analyser toute l'entrée, donc c'est
Cela me fait me poser des questions sur les langages fonctionnels; D'après ma compréhension, «les langages fonctionnels sont intimement liés au calcul lambda» (d'après un commentaire de Yuval Filmus ici ). Donc, si les langages fonctionnels sont basés sur le calcul lambda, mais qu'ils fonctionnent sur des machines basées sur la RAM, quelle est la bonne façon d'effectuer une analyse de complexité sur des algorithmes implémentés à l'aide de structures de données et de langages purement fonctionnels?
Je n'ai pas eu l'occasion de lire les structures de données purement fonctionnelles mais j'ai regardé la page Wikipedia pour le sujet, et il semble que certaines des structures de données remplacent les tableaux traditionnels par:
"Les tableaux peuvent être remplacés par une carte ou une liste d'accès aléatoire, qui admet une implémentation purement fonctionnelle, mais le temps d'accès et de mise à jour est logarithmique."
Dans ce cas, le modèle de calcul serait différent, n'est-ce pas?
la source
Réponses:
Cela dépend de la sémantique de votre langage fonctionnel. Vous ne pouvez pas faire une analyse d'algorithme sur les langages de programmation isolément, car vous ne savez pas ce que signifient réellement les instructions. La spécification de votre langue doit fournir une sémantique suffisamment détaillée. Si votre langue spécifie tout en termes de calcul lambda, vous avez besoin d'une mesure des coûts pour les réductions (sont-ils O (1) ou dépendent-ils de la taille du terme que vous réduisez?).
Je pense que la plupart des langages fonctionnels ne le font pas de cette façon et fournissent plutôt des instructions plus utiles comme "les appels de fonction sont O (1), en ajoutant à la tête d'une liste est O (1)", des choses comme ça.
la source