Notions de calcul efficace


11

Un algorithme de machine de Turing à temps polynomial est considéré comme efficace si son temps d'exécution, dans le pire des cas, est limité par une fonction polynomiale dans la taille d'entrée. Je connais la forte thèse de Church-Turing:

Tout modèle raisonnable de calcul peut être simulé efficacement sur les machines de Turing

Cependant, je ne connais pas de théorie solide pour analyser la complexité de calcul des algorithmes de -calculus.λ

Avons-nous une notion d'efficacité de calcul pour chaque modèle de calcul connu? Existe-t-il des modèles qui ne sont utiles que pour les questions de calculabilité mais inutiles pour les questions de complexité de calcul?

Réponses:


9

Pour autant que je sache, les principaux modèles de calculabilité sont le λ-calcul, les machines de Turing et les fonctions récursives . Je ne connais pas la situation concernant la complexité des fonctions récursives, elles peuvent ou non être inutiles pour la complexité.

Il peut être considéré comme une heureuse coïncidence que les machines de Turing, qui ne sont pas si probablement des machines très inefficaces, soient également un très bon modèle de complexité. Ce qui a rendu les choses naturelles, c'est qu'il y a beaucoup de transformations impliquant des MT qui sont polynomiales. (Machine universelle, simulation d'une machine à bandes avec une machine à 1 bande, d'un alphabet arbitraire à un binaire, simulant une PRAM , ...) et que les polynômes sont une classe de fonctions stables par les opérations arithmétiques et la composition - ce qui en fait un bon candidat pour la théorie de la complexité.n

Le λ-calcul pur était en soi inutile pour la complexité. Cependant, un système de type simple est entré en jeu et a permis de garantir la terminaison de certains termes λ de manière très simple. Puis d'autres systèmes (systèmes T , F , ..) ont permis une grande expressivité tout en gardant la terminaison.

L'efficacité ou la complexité étant un raffinement de terminaison et les types étant étroitement liés à la logique, sont venues plus tard des logiques linéaires légères qui caractérisent plusieurs classes de complexité. ( Élémentaire , P, et quelques variantes pour PSPACE et autres). La recherche dans ce domaine est très active et ne se limite pas à ces classes de complexité, ni même au λ-calcul.

tl; dr: λ-calcul était utile pour la calculabilité, la terminaison et la théorie de la complexité.

Cependant, donner du crédit là où le crédit est dû Les machines de Turing sont un bon moyen à l'unanimité de définir ce qu'est la complexité, mais cela n'est vrai que pour les limites lâches comme le "polynôme", pas pour les limites strictes pour lesquelles les modèles de type PRAM conviennent mieux.


Pourquoi alors faisons-nous la plupart de nos analyses d'exécution à l'aide de modèles de type RAM?
Raphael

La réalité a des opérations de mémoire de base dans (je dirais ), donc les modèles de type RAM sont beaucoup plus appropriés pour des limites étroites comme . Vous avez donc raison: les machines de Turing sont excellentes lorsque la transformation de PRAM n'affecte pas beaucoup votre limite. (Par exemple, lorsque vous prouvez que votre problème est en P ou en L / NL)O(1)O(log|memory|)nlog27
jmad

@Raphael: vous réagissiez à ma dernière phrase, non?
jmad

Oui, je l'ai fait (pour le bien du lecteur inexpérimenté).
Raphael

1

En termes de complexité temporelle, je pense que ce dur sur le calcul lambda. La raison en est que l'étape de calcul unitaire dans le calcul lambda est -reduction ( entrée wikipedia ): Toutes les expressions, quelle que soit de leur longueur, prendrait pas de temps de calcul sous ce modèle.β

(λx.term)vterm[x:=v]
1

Vous pouvez attribuer un coût à la réduction en termes de nombre ou de taille des redex. Cela a en effet été étudié de manière approfondie (recherchez par exemple des références sur la réduction optimale). β
Gilles 'SO- arrête d'être méchant'

@Gilles: Étant donné que nous ne savons pas quel est le coût réel (modèle unitaire) de la mise en œuvre de la réduction optimale, votre remarque n'est pas vraiment pertinente. Pour l'instant, ces études ne fournissent qu'un raffinement du problème énoncé dans cette réponse.
Stéphane Gimenez

1

À propos de l'inclusion du λ-calcul dans le modèle de complexité standard, voici le résumé de quelques (très) nouvelles recherches sur le sujet. Il donne une réponse à cette question pour une forme restreinte de réduction β. Fondamentalement, la complexité dans le modèle de coût standard est similaire au comptage des étapes de réduction β lorsqu'il est limité à la réduction de la tête (qui comprend les stratégies appel par nom et appel par valeur).

Sur l'invariance du modèle de coût unitaire pour la réduction de la tête de Beniamino Accattoli et Ugo Dal Lago. (WST2012, lien vers la procédure )

Le λ-calcul est un modèle de calcul largement accepté des programmes fonctionnels d'ordre supérieur, mais il n'existe pas de modèle de coût direct et universellement accepté pour cela. En conséquence, la difficulté de calcul de réduire les termes λ à leur forme normale est généralement étudiée en raisonnant sur des algorithmes de mise en œuvre concrets. Ici, nous montrons que lorsque la réduction de la tête est la dynamique sous-jacente, le modèle de coût unitaire est en effet invariant. Cela améliore les résultats connus, qui ne traitent que de la réduction faible (appel par valeur ou appel par nom). L'invariance est prouvée au moyen d'un calcul linéaire de substitutions explicites, qui permet de décomposer joliment toute étape de réduction de la tête dans le λ-calcul en étapes de substitution plus élémentaires, rendant ainsi la combinatoire de la réduction de la tête plus facile à raisonner.


Le PO a demandé des modèles qui n'admettent pas l' analyse de complexité. -calculus n'a servi que de motivation. λ
Raphael
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.