Définitions d'un algorithme fonctionnant en temps polynomial et en temps fortement polynomial

18

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.T(n)=O(nk)

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, etO(nk)
  • tous les nombres dans les calculs intermédiaires peuvent être stockés avec bits.O(nk)

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 etO(nk)
  • 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!

StackExchange pour tous
la source
la section wikipedia juste après le defn a une assez bonne explication, n'est-ce pas assez clair? cela a à voir avec le nombre de bits qui représentent des nombres, et de très grands nombres peuvent affecter les mesures de complexité "vers le haut". pense que les defns avec K&V sont probablement "presque" équivalents. quant aux entrées rationnelles, il faut une preuve que l'arithmétique sur les rationnelles n'augmente pas leur taille de façon importante. pense que cela peut être montré en trouvant l'écran LCD de toutes les entrées et en faisant toute l'arithmétique en chiffres par rapport à l'écran LCD.
vzn
@vzn: l'explication dans Wikipedia (1) est décente pour l'arithmétique vs la machine de Turing mais est assez superficielle en ce qui concerne le but et la définition fortement poly, et (2) était complètement faux sur ce que GCD illustre.
alexei

Réponses:

5

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.

O(1)

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:

  • L'algorithme s'exécute en temps fortement polynomial si l'algorithme est un algorithme d'espace polynomial et effectue un certain nombre d'opérations arithmétiques élémentaires qui sont limitées par un polynôme dans le nombre de nombres d'entrée.
  • Un algorithme polynomial est un algorithme d'espace polynomial (dans notre modèle de machine Turing standard) et un algorithme de temps polynomial dans le modèle arithmétique (voir cette question pour une clarification).

O(n3)O(n2)

[*] 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.

alexei
la source