Quels sont les problèmes non triviaux où nous savons que l'algorithme actuel que nous avons est asymptotiquement optimal? (Pour les machines de turing)
Et comment cela est-il prouvé?
Quels sont les problèmes non triviaux où nous savons que l'algorithme actuel que nous avons est asymptotiquement optimal? (Pour les machines de turing)
Et comment cela est-il prouvé?
Réponses:
Tout algorithme qui prend un temps linéaire et doit lire toute son entrée doit être asymptotiquement optimal. De même, comme le commente Raphaël, tout algorithme dont le temps d'exécution est du même ordre que la taille de sortie est optimal.
Si la mesure de complexité que vous envisagez est la complexité de la requête, c'est-à-dire le nombre de fois où la machine doit regarder l'entrée pour résoudre un problème particulier, il existe de nombreux problèmes pour lesquels nous avons des algorithmes optimaux. La raison en est que les limites inférieures pour la complexité des requêtes sont plus faciles à atteindre que les limites inférieures pour la complexité du temps ou de l'espace, grâce à certaines techniques populaires, notamment la méthode de l' adversaire .
L'inconvénient, cependant, est que cette mesure de complexité est presque exclusivement utilisée dans le traitement de l'information quantique car elle fournit un moyen facile de prouver un écart entre la puissance de calcul quantique et classique. L'algorithme quantique le plus connu dans ce cadre est l'algorithme de Grover . Étant donné une chaîne binaire pour laquelle il existe un seul i tel que x i = n , vous devez trouver i . Classiquement (sans ordinateur quantique), l'algorithme le plus trivial est optimal: il faut interroger cette chaîne n / 2 fois en moyenne pour trouver . Grover a fourni un algorithme quantique qui le fait dans O ( √interroge la chaîne. Cela s'est également avéré optimal.
Le tri par comparaison à l'aide de comparaisons (tri par fusion, pour n'en nommer qu'un) est optimal, la preuve consiste simplement à calculer la hauteur d'un arbre avec n ! feuilles.
En supposant que la conjecture des jeux uniques, Khot, Kindler, Mossel et O'donnell ont montré qu'il est NP-complet d'approcher Max-Cut mieux que l'algorithme de Goemans et Williamson. Donc, dans ce sens, G&W est optimal (en supposant également que ).
Certains algorithmes distribués peuvent se révéler optimaux en ce qui concerne certaines conditions (par exemple, la proportion de processeurs contradictoires), mais puisque vous avez mentionné les machines Turing, je suppose que ce n'est pas le type d'exemples que vous recherchez.
Supposons que vous entrée donné et qu'on vous demande de décider si la machine RAM M se termine sur l' entrée x après t pas. Par le théorème de la hiérarchie temporelle, l'algorithme optimal pour décider ceci est de simuler l'exécution de M ( x ) pour t étapes, ce qui peut être fait dans le temps O ( t ) .
(Remarque: pour les machines Turing, la simulation de l'exécution de prend des étapes O ( t log t ) ; nous ne connaissons qu'une limite inférieure de Ω ( t ) . Donc, ce n'est pas tout à fait optimal pour les machines Turing en particulier).
Il existe d'autres problèmes qui contiennent la version du problème d'arrêt en tant que sous-cas. Par exemple, décider si une phrase est une conséquence du WS1S prend du temps 2 ↑ ↑ O ( | θ | ) et c'est optimal.
Si vous autorisez des problèmes de structure de données dynamiques, nous connaissons certains algorithmes optimaux à temps super-linéaire. C'est dans le modèle de sonde cellulaire, qui est aussi fort que le mot RAM, c'est-à-dire qu'il ne s'agit pas d' un modèle restreint comme les arbres de décision algébriques.
Un exemple est de conserver les sommes de préfixe dans les mises à jour dynamiques. Nous commençons avec un tableau de nombres , et le but est de garder une structure de données qui permet les opérations suivantes:
Vous pouvez facilement prendre en charge les deux opérations en temps avec une structure de données basée sur un arbre binaire augmenté avec A [ i ] aux feuilles. Patrascu et Demaine ont montré que c'était optimal: pour toute structure de données, il y a une séquence de n additions et de requêtes de somme de préfixes qui doivent prendre Ω ( n log n ) total.
Un autre exemple est l' union find : commencez par une partition de en singletons, et conservez une structure de données qui permet les deux opérations:
il existe deux algorithmes de recherche quelque peu similaires qui, à ma connaissance, sont optimaux en fonction de contraintes particulières sur l'ordre / la distribution des entrées. cependant, les présentations des algorithmes ne mettent généralement pas l'accent sur cette optimalité.
section dorée recherche pour trouver le maximum ou le minimum (extremum) d'une fonction unimodale. suppose que l'entrée est une fonction unimodale. le trouve en temps logarithmique en moyenne. si je me souviens bien, il peut y avoir une preuve d'optimalité dans le livre Structure & Interpretation of computer programmes par abelson & sussman.
la recherche binaire trouve un point dans le temps logarithmique en moyenne dans une liste triée, mais nécessite que l'entrée soit triée.
je cite wikipedia ci-dessus mais il n'a pas les preuves qu'ils sont optimaux, peut-être que d'autres références prouvant l'optimalité peuvent être trouvées par le public.
De nombreux algorithmes de temps sublinéaires ont des bornes supérieures correspondant à leurs bornes inférieures.