Classes de complexité pour les cas autres que le «pire cas»


10

Avons-nous des classes de complexité concernant, disons, la complexité moyenne des cas? Par exemple, existe-t-il une classe de complexité (nommée) pour les problèmes qui prennent le temps polynomial attendu pour se décider?

Une autre question considère la meilleure complexité de cas , illustrée ci-dessous:

Existe-t-il une classe de problèmes (naturels) dont la décision nécessite au moins un temps exponentiel?

Pour clarifier, considérons un langage complet pour EXP . De toute évidence, toutes les instances de nécessitent pas de temps exponentiel: il existe des instances qui peuvent être décidées même en temps polynomial. Donc, la meilleure complexité des cas de n'est pas le temps exponentiel.LLLL

EDIT: Depuis que plusieurs ambiguïtés sont apparues, je veux essayer de le clarifier encore plus. Par complexité du «meilleur cas», j'entends une classe de complexité dont la complexité des problèmes est limitée par une fonction. Par exemple, définissez BestE comme la classe de langages qui ne peut pas être décidée en temps inférieur à une certaine exponentielle linéaire. Symboliquement, notons une machine de Turing arbitraire, et , et des nombres naturels:c n 0 nMcn0n

LBestE (c)(M)[(L(M)=L)(n0)(n>n0)(X{0,1}n)[T(M(X))2c|X|]]

où indique le temps qu'il faut avant que s'arrête sur l'entrée .M xT(M(X))MX

J'accepte que définir une telle classe de problèmes est très étrange, car nous exigeons que chaque machine Turing , quelle que soit sa puissance, ne puisse pas décider du langage en temps moins qu'une exponentielle linéaire.M

Remarquez cependant que la contrepartie polynomiale-temps ( BestP ) est naturelle, car chaque machine de Turing nécessite du tempspour au moins lire son entrée.|X|

PS: Peut-être, au lieu de quantifier comme "pour toutes les machines de Turing ", nous devons le limiter à certaines classes de machines de Turing prédéfinies, telles que les machines de Turing à temps polynomial. De cette façon, nous pouvons définir des classes comme , qui est la classe de langages nécessitant au moins un temps quadratique pour être décidé sur des machines de Turing à temps polynomial.B e s t ( n 2 )MBest(n2)

PS2: On peut également considérer l'équivalent de la complexité du circuit, dans lequel nous considérons la taille / profondeur du circuit le moins pour décider d'une langue.


Tout simplement parce qu'il existe des instances de SAT qui sont faciles, cela ne signifie pas que son heure attendue est polynomiale. Je ne suis pas sûr de comprendre votre question ..
Lev Reyzin

@Lev Reyzin: Je ne voulais pas dire que SAT est dans le poly-temps attendu. Je voulais dire que SAT a des instances faciles, nous ne pouvons pas dire que sa complexité dans le "meilleur des cas" est difficile.
MS Dousti

Oh, je vois, la complexité moyenne des cas et la meilleure complexité des cas sont deux questions distinctes! D'une certaine manière, j'ai raté cela lors de ma première lecture - mon erreur.
Lev Reyzin

Je ne peux pas vraiment analyser votre définition de BestE. M et x sont assis en dehors de leur quantification ... aussi, ne voulez-vous pas que rejette les entrées qui ne sont pas dans ? LML
Ryan Williams

@Ryan: Merci d'avoir signalé la faille. Je l'ai corrigé.
MS Dousti

Réponses:


13

Bien que je ne puisse pas vraiment analyser vos définitions, vous devez savoir que des hiérarchies temporelles beaucoup plus fortes sont connues, en particulier des hiérarchies temporelles "presque partout".

Voici l'énoncé formel: pour chaque temps lié , il existe un langage L T I M E [ T ( n ) ] avec la propriété que tout algorithme déterministe qui reconnaît correctement L doit s'exécuter dans le temps asymptotiquement supérieur à t ( n ) sur toutes les entrées, mais en nombre fini, pendant un temps suffisamment petit t ( n ) . T(n)LTjeME[T(n)]Lt(n)t(n)

"Suffisamment petit" signifie .t(n)Journalt(n)o(T(n))

Supposons que nous choisissons pour un exemple, et d' obtenir une langue inintelligible L . Ensuite, tout algorithme qui reconnaît correctement L doit prendre au moins 2 n / n 2 de temps sur toutes les entrées au-delà d'une certaine longueur. Cela semble être ce que vous recherchez dans votre classe BestE.T(n)=2nLL2n/n2

Référence:

John G. Geske, Dung T. Huynh, Joel I. Seiferas: une note sur les ensembles presque partout complexes et la séparation des classes déterministes-complexité-temps Inf. Comput. 92 (1): 97-104 (1991)


Très bien merci. Je pense que vous avez très bien compris ma question, et votre phrase d'introduction "Je ne peux pas vraiment analyser vos définitions" n'est qu'un signe de votre modestie :)
MS Dousti

2
Pourvu que je devine correctement, votre définition devrait être quelque chose comme: "L \ dans BestE \ iff (\ exist c) (\ forall M) [(L (M) = L) \ Rightarrow (\ exist n_0) (\ forall n > n_0) (\ forall x \ in \ {0,1 \} ^ n) [T (M (x))> 2 ^ {c | x |})]. "
Ryan Williams

Oui, vous avez raison. J'ai modifié la définition à la dernière minute et j'ai égaré certains des quantificateurs. J'ai corrigé la question en fonction de votre définition.
MS Dousti

12

Il existe un certain nombre de classes qui tentent d'aborder diverses notions de complexité de cas moyen. Au Complexity Zoo, certaines classes qui pourraient vous intéresser sont:

AvgP

HeurP

DistNP

(NP, échantillonnable P)

Arora / Barak couvre de nombreuses classes similaires (dans Ch 18), définissant distP, distNP et sampNP.

La relation exacte entre toutes ces classes est caractérisée par Five Worlds d'Impagliazzo, qui a déjà été posée dans une autre question .

En ce qui concerne la question de la complexité du «meilleur cas», je ne suis pas sûr de bien comprendre ce que vous voulez dire. Vous recherchez de l' EXP ?

Si vous voulez dire des classes de complexité définies en termes de meilleur temps d'exécution de cas sur toutes les instances, ce n'est pas une très bonne mesure de complexité a priori, car vous ne regarderiez que les cas triviaux d'un problème donné.


Très bien fait! C'est ce dont j'avais besoin pour la partie complexité moyenne de la question. En ce qui concerne la partie "meilleur cas", j'ai remarqué que l'énoncé original de la question était vague. Ma faute! Je l'ai beaucoup édité, alors pensez à le relire.
MS Dousti

5

TjeME[T(n)]CLCLLLCLCLL¯=ΣLCBestEE

(Mise à part historique: la notion d'immunité a été développée pour la première fois par Post en 1944 dans la théorie de la calculabilité, bien avant que P ne soit même défini. le mot «immunisé» signifie généralement «immunisé contre les ensembles calculables». Dans ce cadre, l'immunité équivaut à «immunisé contre les ensembles ce», car chaque ensemble infini ce contient un infini calculable. Je crois que l'article de Post a également été le premier à introduire le notion de réduction de plusieurs, mais je ne pouvais pas le jurer.)


MLLM(X)=1

LLC

1
@Sadeq: corrigé, merci. @Ryan: Vrai (ou c'était il y a quelques heures: il a depuis mis à jour la définition). Ce serait alors l'immunité au lieu de la bi-immunité. Quoi qu'il en soit, je voulais principalement souligner le mot-clé «immunité».
Joshua Grochow

2

Différents cas ont plus de sens lorsque l'on parle d'algorithmes, pas de problèmes. D'un autre côté, les classes de complexité concernent les problèmes, pas les algorithmes. Par conséquent, la classe de complexité étant toujours le pire des cas pour tout algorithme est due à la définition.

Dans la complexité, votre objectif est de connaître le nombre de ressources nécessaires pour résoudre n'importe quelle instance d'un problème donné. Par conséquent, vous savez que pour une instance et un algorithme donnés, vous allez avoir besoin de ces ressources et rien de plus.

Dans l'analyse d'algorithmes, votre objectif est de vous assurer que votre algorithme a une limite supérieure pour une ressource, dans n'importe quel cas du problème. Une limite triviale est la classe de complexité du problème, car aucun algorithme utile (celui qui fait des étapes inutiles) ne prend plus de temps que cela. Cependant, vous pouvez améliorer cette limite compte tenu des spécificités de l'algorithme.

Θ

Quant au meilleur des cas, il est trivial pour chaque problème de trouver le moins de ressources nécessaires. Supposons que l'entrée est de longueur O (n) et la sortie de longueur O (m). Ensuite, le TM M suivant s'exécute toujours en O (n) + O (m) dans le meilleur des cas:

M {entrée, instance, solution}

  1. Comparez l'instance donnée avec l'instance encodée dans la machine.
  2. S'ils sont égaux, retournez la solution encodée.
  3. Sinon, faites une recherche par force brute.

-1

O(1)


1
Je ne pense pas que cela compte comme un algorithme correct pour le problème. Cependant, votre algorithme peut être modifié de sorte qu'il vérifie d'abord si l'entrée est égale à l'instance particulière que vous avez prédéterminée (en temps O (1)). Si tel est le cas, il génère la réponse précalculée. Sinon, vous résolvez l'instance donnée par n'importe quel moyen. En y réfléchissant, tout algorithme correct s'exécute en temps O (1) pour chaque instance, si nous pouvons prendre différentes constantes derrière la notation O pour différentes instances. C'est pourquoi la «complexité du meilleur des cas» au sens littéral n'est pas utile.
Tsuyoshi Ito

Si vous parlez de calcul déterministe et non probabiliste, il faudrait du temps linéaire (temps O (n)) pour vérifier si deux codages d'instances sont équivalents: balayez les n bits du codage d'entrée et vérifiez qu'il est le même comme l'encodage programmé, non?
Daniel Apon

2
@Daniel: Oui, mais si l'une des instances est fixe, cela ne prend que du temps constant, où la constante dépend de la longueur de l'instance fixe.
Tsuyoshi Ito
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.