Certains algorithmes complexes ( union-find ) ont la fonction Ackermann inverse presque constante qui apparaît dans la complexité temporelle asymptotique, et sont optimales dans le pire des cas si le terme Ackermann inverse presque constant est ignoré.
Existe-t-il des exemples d'algorithmes connus avec des durées de fonctionnement qui impliquent des fonctions qui croissent fondamentalement plus lentement que Ackermann inverse (par exemple, des inverses de fonctions qui ne sont pas équivalentes à Ackermann sous des transformations polynomiales ou exponentielles, etc.), qui donnent le pire des cas le plus connu complexité pour résoudre le problème sous-jacent?
Réponses:
(Merci à Tsvi Kopelowitz pour cette référence.)
la source
la source
Quand Alan Turing a découvert l'ordinateur, il y avait plusieurs modèles pour l'ordinateur proposé. Turing a prouvé que certains (3) de ces modèles pouvaient se simuler ET calculer la fonction Ackermann, tandis que les autres modèles pouvaient se simuler mais pas la fonction Ackermann (ils ne pouvaient donc pas simuler les 3). Par conséquent, ces 3 modèles (Turing Machine, von Neumann et un que je ne connais pas) ont été choisis comme architecture pour un ordinateur. Cela ne signifie pas que la fonction Ackermann est la limite de l'ordinateur, mais je suppose que c'est une science difficile. Je ne connais aucune fonction calculable qui se développe plus rapidement que la fonction Ackermann.
Maintenant, je ne pense pas qu'il y ait un problème pratique qui corresponde à votre question, mais peut-être pouvons-nous en construire un. Nous devons cependant imposer des contraintes à l'entrée. Comme nous ne pouvons pas utiliser O (n), nous ne pouvons pas vérifier l'ensemble de l'entrée. En fait, nous ne pouvons même pas vérifier la longueur de l'entrée car ce serait O (log n). Donc, nous avons besoin comme premier paramètre d'une représentation de la longueur du reste de l'entrée, par exemple c telle que Ackermann (c) soit la longueur de l'entrée. Comme cela ne convient pas non plus, nous demandons comme première valeur dans notre entrée le paramètre c, tel que bb (c) soit de la longueur de l'entrée, où bb est la fonction de castor occupé. Cette fonction est incomputable mais bb (c) existe certainement. Ensuite, l'algorithme se présente comme:
Le but de l'algorithme est de vérifier que si c est l'inverse de bb, si alors la longueur d'entrée est supérieure à bb (c).
S'il y a une fonction calculable qui croît plus vite que la fonction Ackermann, je pense que nous pouvons utiliser son inverse pour créer un algorithme qui répond à votre question sur n'importe quelle entrée.
la source