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 .
Cependant, que se passe-t-il si nous avons un algorithme qui "trouve d'abord un algorithme plus efficace pour calculer ", puis calcule ?
En d'autres termes, que se passe-t-il si nous avons un algorithme qui fait ce qui suit:
Trouver un algorithme efficace pour le calcul .
utilisez pour calculer .
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é.
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.
la source
Réponses:
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.
la source
Supposons que nous ayons une fonction
f
qui prend un argumentx
de typeA
et génère une autre fonction qui prend un argumenty
de typeB
et renvoie un résultat de typeC
. Dans vos mots,f
prend un argumentx
et retourne un "algorithme" qui prend des entrées de typeB
et des résultats de typeC
.La fonction
f
a le typeEn effet, il prend
x : A
et retourne une fonction de typeB → C
. Mais un telf
est équivalent à une fonctiong : A × B → C
qui prend à la foisx
ety
à la fois et vous donne le résultat final. En effet, il existe un isomorphisme entre les typeset
parce que nous pouvons définir
g
en termes def
commeet nous pouvons définir
f
en termes deg
commeL'opération de passage de
g
àf
est 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.
la source