Wikipédia le définit comme
Un algorithme est dit de temps polynomial si son temps de fonctionnement est délimité par une expression polynomiale dans la taille de l'entrée pour l'algorithme, c'est-à-dire pour une constante k.
L'algorithme fonctionne en temps fortement polynomial si [8]
le nombre d'opérations dans le modèle arithmétique de calcul est limité par un polynôme dans le nombre d'entiers dans l'instance d'entrée; et
l'espace utilisé par l'algorithme est délimité par un polynôme de la taille de l'entrée.
Chez Bernhard Korte, Jens Vygen, Combinatorial Optimization :
Définition 1.4.
Un algorithme à entrée rationnelle fonctionnerait en temps polynomial si
- il existe un entier k tel qu'il s'exécute en temps , où n est la taille d'entrée, et
- tous les nombres dans les calculs intermédiaires peuvent être stockés avec bits.
Un algorithme à entrée arbitraire fonctionnerait en temps fortement polynomial si
- il existe un entier k tel qu'il s'exécute en temps pour toute entrée composée de n nombres et
- il s'exécute en temps polynomial pour une entrée rationnelle.
S'il vous plait corrigez moi si je me trompe. Voici les différences littérales que j'ai remarquées:
Pour les algorithmes de temps polynomiaux, la définition de Korte et Vygen est "la définition de Wikipédia + espace de stockage polynomial".
Pour les algorithmes de temps fortement polynomiaux, la définition de Korte et Vygen et la définition de Wikipedia nécessitent toutes deux un temps polynomial dans la taille de stockage d'entrée. Mais K et V nécessitent en outre un temps polynomial dans le nombre de nombres dans n'importe quelle entrée, tandis que Wikipedia nécessite en outre un espace de stockage polynomial dans la taille d'entrée.
Les définitions de K et V et de Wikipedia pour ces deux concepts sont-elles respectivement équivalentes? Quelles sont les autres différences et relations entre eux?
Merci et salutations!
la source
Réponses:
Avant les définitions formelles, réfléchissez à ce que la classification "fortement / faiblement" vise à distinguer.
Tout d'abord, envisagez d'exécuter l'un ou l'autre sur une machine Turing. Les deux s'exécuteront en un certain nombre d'étapes polynomiales dans la longueur de l'entrée codée binaire. Par conséquent, le nombre d'opérations arithmétiques effectuées par les deux devrait être polynomial dans la longueur de l'entrée codée binaire . Par conséquent, pour les deux Turing Machine, le temps de fonctionnement augmenterait de façon polynomiale au fur et à mesure que le nombre de valeurs d'entrée ou leurs grandeurs augmenteraient. Pour souligner ce dernier, notez que même le plus fort prendra plus de pas TM sur des amplitudes plus grandes (il doit au moins lire les bits supplémentaires). En aucun cas, on ne devient exponentiel (comme c'est le cas avec le temps pseudo-polynomial sans rapport). Avec une machine Turing seule, une différence fondamentale ne semble pas détectable.
L'ensemble d'algorithmes qui s'exécutent en nombre d'opérations arithmétiques polynomiales dans le nombre de nombres d'entrée est bien défini, mais chevauche la classe d'algorithmes qui prennent un nombre d'étapes TM exponentiel dans la longueur de l'entrée codée binaire (voir exemples ). Par conséquent, pour cet ensemble, les propriétés du deuxième paragraphe ne seraient pas valables. Pour exclure l'intersection indésirable, nous ajoutons une condition pour un espace polynomial TM [*].
Dans [1], cela est indiqué de deux manières:
[*] La deuxième condition est énoncée partout comme un espace polynomial, alors que nécessiter un temps polynomial a plus de sens pour moi. Le premier est plus inclusif, mais étrange. Existe-t-il des algorithmes fortement polynomiaux qui prennent plus de temps que les polynômes? Notez que l'exemple de la quadrature répétée ne prend ni le temps polynomial ni l'espace polynomial.
[1] Grötschel, Martin; László Lovász, Alexander Schrijver (1988). "Complexité, oracles et calcul numérique". Algorithmes géométriques et optimisation combinatoire. Springer. ISBN 0-387-13624-X.
la source