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:
for (int i=0; i<c; i++) {
if (input[i] == null) {
return false;
}
}
return true;
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.