Le temps constant est la complexité absolue la plus basse. On peut se demander: y a-t-il quelque chose de non trivial qui peut être calculé en temps constant? Si nous nous en tenons au modèle de la machine de Turing, alors peu de choses peuvent être faites, car la réponse ne peut dépendre que d'un segment initial de longueur constante de l'entrée, car des parties plus éloignées de l'entrée ne peuvent même pas être atteintes en temps constant.
D'un autre côté, si nous adoptons le modèle RAM à coût unitaire un peu plus puissant (et plus réaliste), dans lequel les opérations élémentaires sur les nombres bits sont comptées comme des étapes uniques, alors nous pourrons peut-être résoudre des problèmes non triviaux tâches, même en temps constant. Voici un exemple:
Instance: entiers , chacun donné au format binaire par O ( log n ) bits.
Question: Existe-t-il un graphe à sommets, tel que sa connectivité au sommet est k , sa connectivité aux bords est l et son degré minimum est d ?
Notez que d'après la définition, il n'est même pas évident que le problème est en NP . La raison en est que le témoin naturel (le graphe) peut avoir besoin d' une description longue de bits, tandis que l'entrée n'est donnée que par O ( log n ) bits. D'un autre côté, le théorème suivant (voir la théorie des graphes extrêmes de B. Bollobas) vient à la rescousse.
Théorème: Soit entiers. Il existe un graphe à n sommets avec connectivité au sommet k , connectivité aux bords l et degré minimum d , si et seulement si l'une des conditions suivantes est remplie:
- ,
Comme ces conditions peuvent être vérifiées en temps constant (dans le modèle RAM à coût unitaire), le théorème conduit à un algorithme à temps constant dans ce modèle.
Question: Quels sont quelques autres exemples non triviaux d'algorithmes à temps constant?
la source
Réponses:
L'article Algorithmes d'approximation à temps constant via les améliorations locales de Nguyen et Onak donne de nombreux exemples de schémas d'approximation à temps constant aléatoires: Correspondance maximale (le temps d'exécution ne dépend que du degré maximum du graphique), Définir la couverture, etc. Les auteurs présenter une méthode pour concevoir de tels algorithmes.
la source
Il existe de nombreux exemples de jeux étudiés dans la théorie des jeux combinatoires où l'état d'un jeu peut être décrit par un nombre constant de valeurs entières. Pour certains d'entre eux, une stratégie gagnante pour le jeu peut être calculée en temps constant. Mais ils soulèvent également des questions sur ce qu'est exactement votre modèle de calcul.
L'un des jeux combinatoires les plus simples et les plus basiques est nim: l'un a un nombre constant de piles de haricots, et en un seul mouvement, vous pouvez supprimer n'importe quel nombre de haricots d'une pile, gagnant ou perdant (selon votre choix de règles) si vous prenez le dernier haricot. La stratégie optimale peut être calculée en temps constant si vous autorisez les opérations xor booléennes au niveau du bit (c'est-à-dire l'opérateur ^ dans les langages de programmation comme C / C ++ / Java / etc.) Est-ce un algorithme à temps constant dans votre modèle?
En voici un où l'on sait qu'il existe un algorithme déterministe exact à temps constant (dans un modèle étendu de calcul éventuellement irréaliste qui vous permet de tester la primalité d'un nombre en temps constant) mais on ne sait pas ce qu'est cet algorithme: étant donné un départ déplacer dans le jeu de monnaies Sylver , déterminer s'il s'agit d'un coup gagnant ou perdant. Un organigramme de ce problème est donné dans Berlecamp, Conway et Guy, Winning Ways , mais cela dépend d'un ensemble fini de contre-exemples pour une caractérisation générale des mouvements gagnants, et on ne sait pas ce que cet ensemble est (ou même s'il est vide).
Un autre exemple intéressant de la théorie des jeux combinatoires est le jeu de Wythoff. Chaque position de jeu peut être décrite par une paire d'entiers (c'est-à-dire un espace constant, dans votre modèle de calcul), les mouvements dans le jeu impliquent de réduire l'un de ces deux entiers à une valeur plus petite, et la stratégie gagnante implique de passer à une position où le rapport entre ces deux nombres entiers est aussi proche du nombre d'or que possible. Mais dans de nombreuses positions de jeu, il y a un choix: vous pouvez réduire le plus grand des deux entiers au point où il est (presque) le plus petit entier multiplié par le nombre d'or, ou le plus petit entier divisé par le nombre d'or. Un seul de ces deux choix sera gagnant. Ainsi, la stratégie optimale peut être définie en termes d'un nombre constant d'opérations arithmétiques, mais ces opérations impliquent un nombre irrationnel, le nombre d'or. Est-ce un algorithme à temps constant dans votre modèle? Peut-être ça'n logn
la source
la source