Existe-t-il un concept pour un algorithme calculant une fonction en trouvant d'abord un autre algorithme?


14

Si je comprends bien, un algorithme qui calcule la valeur d'une fonction réelle a une complexité de calcul si les conditions suivantes sont réunies: Lorsque nous calculons à la précision requiert de l'ordre des étapes .FO(g(n))Fδg(n)

Cependant, que se passe-t-il si nous avons un algorithme qui "trouve d'abord un algorithme plus efficace pour calculer ", puis calcule ?FF

En d'autres termes, que se passe-t-il si nous avons un algorithme qui fait ce qui suit:UNE

  1. Trouver un algorithme efficace pour le calcul .BF

  2. utilisez pour calculer .BF

Dans ce cas, nous ne pouvons plus parler du temps de calcul , il faudrait pour calculer par exemple, parce qu'il dépend entièrement de savoir si l' algorithme algorithme a déjà trouvé . En d'autres termes, le temps de calcul requis pour calculer si est le premier nombre calculé est bien supérieur au temps de calcul nécessaire pour calculer après que déjà été calculé.F(5)UNEBF(5)5F(5)F(3)

Ma question est, existe-t-il un concept / théorie sur ce type d'algorithme qui trouve d'abord un autre algorithme avant de calculer une fonction? Plus précisément, je m'interroge sur l'analyse de la complexité de calcul de ces algorithmes.


1
Diriez-vous que Mathematica fait essentiellement ce que vous demandez? Vous lui donnez des équations à résoudre et il détermine automatiquement l'algorithme à utiliser pour résoudre ces équations, puis les résout.
user541686

Consultez itu.dk/people/sestoft/pebook , c'est pertinent.
Nathan Ringo

Réponses:


18

Il existe un algorithme bien connu, l'algorithme de recherche universel de Levin, dont le mode de fonctionnement est identique. Considérons par exemple le problème de trouver une affectation satisfaisante pour une formule dont la garantie est satisfiable. La recherche universelle de Levin exécute tous les algorithmes potentiels en parallèle, et si un algorithme génère une affectation satisfaisante, arrête et génère cette affectation. Si l'algorithme optimal pour le problème s'exécute au temps , alors l'algorithme de Levin s'exécute au temps (avec une constante peut-être énorme) s'il est correctement mis en œuvre.F(n)O(F(n))

Bien que l'algorithme de Levin ne soit pas pratique (en raison des énormes constantes impliquées), il est très intéressant théoriquement. Consultez l' article de Scholarpedia pour en savoir plus sur la recherche universelle.


10

Supposons que nous ayons une fonction fqui prend un argument xde type Aet génère une autre fonction qui prend un argument yde type Bet renvoie un résultat de type C. Dans vos mots, fprend un argument xet retourne un "algorithme" qui prend des entrées de type Bet des résultats de type C.

La fonction fa le type

A → (B → C)

En effet, il prend x : Aet retourne une fonction de type B → C. Mais un tel fest équivalent à une fonction g : A × B → Cqui prend à la fois x et yà la fois et vous donne le résultat final. En effet, il existe un isomorphisme entre les types

A → (B → C)

et

A × B → C

parce que nous pouvons définir gen termes de fcomme

g(x, y) := f(x)(y)

et nous pouvons définir fen termes de gcomme

f(x) := (y ↦ g(x,y))

L'opération de passage de gà fest appelée curry et les programmeurs fonctionnels l'utilisent tout le temps. Dans la théorie de la calculabilité, l'idée de prendre une entrée et de sortir une fonction (algorithme) est incorporée dans le théorème smn .

La réponse à votre question est "oui, les gens font ça tout le temps". Mais il y a aussi une morale: un algorithme qui trouve un algorithme n'est encore qu'un algorithme.


1
+1 pour cette dernière phrase. Bien dit.
John Coleman

f(5)c+ccf(5)f(5)c1+c2c1c2c1>c2

@ Programmer2134 les optimisations du compilateur seraient-elles le concept qui vous intéresse? Je ne suis pas du tout sûr de la théorie derrière cela (en particulier ses interactions avec la théorie de la complexité), mais cela pourrait être un exemple potentiel
Mark

Le mot à la mode à rechercher est «évaluation partielle».
Andrej Bauer
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.