Les techniques dépendent du modèle et du type de ressource que nous voulons obtenir une borne inférieure. Notez que pour prouver une borne inférieure sur la complexité d'un problème, nous devons d'abord fixer un modèle mathématique de calcul: une borne inférieure pour un problème est qu'aucun algorithme utilisant une certaine quantité de ressources ne peut résoudre le problème, c'est-à-dire que nous quantifions universellement sur des algorithmes. Nous devons avoir une définition mathématique du domaine de la quantification. (Cela est généralement vrai pour les résultats d'impossibilité.) Par conséquent, les résultats de la borne inférieure ne s'appliquent qu'à un modèle de calcul particulier. Par exemple, le Ω(nlogn)La borne inférieure pour le tri ne fonctionne que pour les algorithmes de tri basés sur la comparaison, sans cette restriction et dans des modèles de calcul plus généraux, il pourrait être possible de résoudre le tri plus rapidement, même le temps linéaire. (Voir le commentaire de Josh ci-dessous.)
Voici quelques méthodes directes de base pour prouver les bornes inférieures dans la théorie de la complexité de calcul pour les modèles plus généraux de calcul (machines et circuits de Turing).
I. Comptage:
Idée: Nous montrons qu'il y a plus de fonctions que d'algorithmes.
Ex: Certaines fonctions nécessitent des circuits exponentiellement grands.
Le problème avec cette méthode est qu'elle est un argument existentiel et ne donne aucune fonction explicite ni aucune limite supérieure sur la complexité du problème avéré difficile.
II. Combinatoire / algébrique:
Idée: Nous analysons les circuits et montrons qu'ils ont une propriété particulière, par exemple les fonctions calculées par eux peuvent être approximées par une belle classe d'objet mathématique, tandis que la fonction cible n'a pas cette propriété.
Ex: le lemme de commutation de Håstad et ses variantes utilisent l'arbre de décision pour approximer , Razborov-Smolensky utilise des polynômes sur les champs pour approximer les fonctions A C 0 [ p ] , etc.AC0AC0[ p ]
Le problème avec cette méthode est qu'en pratique, elle n'a fonctionné que pour des classes petites et relativement faciles à analyser. Il existe également la barrière des preuves naturelles de Razborov-Rudich qui formalise en quelque sorte pourquoi les propriétés simples en elles-mêmes ne sont probablement pas suffisantes pour prouver des limites inférieures de circuit plus générales.
L'article de Razborov « Sur la méthode d'approximation » soutient que la méthode d'approximation est complète pour prouver les limites inférieures dans un sens.
III. Diagonalisation:
Idée. Nous diagonalisons par rapport aux fonctions de la classe plus petite. L'idée remonte à Gödel (et même à Cantor).
Ex. Théorèmes de hiérarchie temporelle , théorème de hiérarchie spatiale , etc.
Le principal problème avec cette méthode est que pour obtenir une limite supérieure, nous devons avoir un simulateur universel pour la classe plus petite et il est difficile de trouver de bons simulateurs non triviaux. Par exemple, pour séparer de P S p a c e,
nous devons avoir un simulateur pour P à l' intérieur de P S p a c e et des résultats montrent que s'il existe de tels simulateurs, ils ne seront pas agréables. Par conséquent, nous nous retrouvons généralement avec des classes séparées avec le même type de ressources, où en utilisant un peu plus de ressources, nous pouvons simuler universellement la classe la plus petite.PP S p a c ePP S p a c e
Nous avons également la barrière de relativisation (remontant à Baker, Gill et Solovay) et la barrière d'algèbre (par Aaronson et Wigderson) qui stipulent que des types particuliers d'arguments de diagonalisation seront transférés vers d'autres paramètres où le résultat est manifestement faux.
Notez que ces barrières ne s'appliquent pas aux arguments de diagonalisation plus généraux. En fait, selon l'article de Dexter Kozen « Indexation des classes subrécursives », la diagonalisation dans est complète pour prouver les bornes inférieures.
Comme vous l'avez probablement remarqué, il existe une relation étroite entre trouver de bons simulateurs universels pour une classe de complexité et séparer cette classe de complexité des classes plus grandes (pour une déclaration formelle, voir l'article de Kozen).
Travaux récents
Pour les avancées récentes, consultez les articles récents de Ryan Williams . Je n'en parle pas dans cette réponse car j'espère que Ryan lui-même écrira une réponse.