Récemment, quand j'ai parlé à un physicien, j'ai affirmé que, selon mon expérience, lorsqu'un problème qui semble naïvement prendre un temps exponentiel se révèle non trivialement en P ou en BPP, il est généralement possible d'identifier une "raison primordiale" de la réduction. --- et presque toujours, cette raison appartient à une liste d’une dizaine de "suspects habituels" ou moins (par exemple: programmation dynamique, algèbre linéaire ...). Cependant, cela m’a alors amené à penser: pouvons-nous réellement écrire une liste décente de telles raisons? Voici une première tentative incomplète:
(0) Caractérisation mathématique. Problème a une caractérisation non purement mathématique «purement mathématique» qui, une fois connue, permet immédiatement de faire une recherche exhaustive sur une liste de poly (n) possibilités. Exemple: planarité de graphe, pour laquelle un algorithme O (n 6 ) découle du théorème de Kuratowski.
(Comme le souligne "planaire" ci-dessous, il s’agissait d’un mauvais exemple: même une fois que vous avez découvert une caractérisation combinatoire de la planarité, le fait de donner un algorithme polynomial en temps réel n’est toujours pas trivial. Laissez-moi vous substituer ici un meilleur exemple: , disons, "étant donné une entrée n écrite en binaire, calculez le nombre de couleurs nécessaires pour colorer une carte arbitraire incorporée sur une surface de n trous." Il n'est pas évident a priori qu'il s'agisse d'une machine calculable (ou même finie!). Mais il existe une formule connue qui donne la réponse, et une fois que vous connaissez la formule, il est trivial de calculer en temps polynomial. En attendant, la "réduction aux mineurs exclus / la théorie de Robertson-Seymour" devrait probablement être ajoutée en tant que raison principale distincte dans P.)
Quoi qu'il en soit, ce n'est pas précisément le genre de situation qui m'intéresse le plus.
(1) Programmation dynamique. Le problème peut être scindé de manière à permettre une solution récursive sans explosion exponentielle - souvent parce que les contraintes à satisfaire sont agencées dans un ordre simple ou linéaire. "Purement combinatoire"; aucune structure algébrique nécessaire. L'accessibilité des graphes (et donc 2SAT) est un cas particulier.
(2) les matroïdes. Problem a une structure matroid, permettant à un algorithme glouton de fonctionner. Exemples: correspondance, arbre couvrant minimal.
(3) algèbre linéaire. Le problème peut être réduit à la résolution d’un système linéaire, au calcul d’un déterminant, au calcul de valeurs propres, etc. On peut soutenir que la plupart des problèmes impliquant des "annulations miraculeuses", y compris celles résolvables par le formalisme de la porte d’allumette de Valiant, relèvent également du parapluie algébrique linéaire.
(4) la convexité. Le problème peut être exprimé comme une sorte d'optimisation convexe. La programmation semi-finale, la programmation linéaire et les jeux à somme nulle sont des cas particuliers (de plus en plus) spéciaux.
(5) Test d'identité polynomiale. Le problème peut être réduit à la vérification d’une identité polynomiale, de sorte que le théorème fondamental de l’algèbre mène à un algorithme aléatoire efficace - et dans certains cas, comme la primalité, même à un algorithme déterministe.
(6) Chaîne de Markov Monte Carlo. Le problème peut être réduit à l’échantillonnage à partir du résultat d’une marche à mélange rapide. (Exemple: compter approximativement les correspondances parfaites.)
(7) algorithme euclidien. GCD, fractions continues ...
Divers / Pas évident de savoir exactement comment classer: mariage stable, factorisation polynomiale, problème d'appartenance à des groupes de permutation, divers autres problèmes de théorie des nombres et de la théorie des groupes, problèmes de réseau de faible dimension ...
Ma question est la suivante: quelles sont les choses les plus importantes que j'ai laissées de côté?
Clarifier:
Je me rends compte qu'aucune liste ne peut être complète: quel que soit le nombre fini de raisons que vous donniez, quelqu'un sera capable de trouver un problème exotique qui est dans P mais pas pour aucune de ces raisons. C'est en partie pour cette raison que je m'intéresse davantage aux idées qui posent beaucoup de problèmes différents, apparemment sans rapport, en P ou BPP, qu'aux idées qui ne fonctionnent que pour un problème.
Je réalise aussi que la répartition des choses est subjective. Par exemple, les matroïdes ne devraient-elles être qu'un cas particulier de programmation dynamique? La solvabilité par recherche en profondeur d’abord est-elle assez importante pour constituer sa propre raison, distincte de la programmation dynamique? En outre, le même problème peut souvent se trouver dans P pour plusieurs raisons, en fonction de la façon dont vous le regardez: par exemple, trouver une valeur propre principale est dans P à cause de l'algèbre linéaire, mais aussi parce qu'il s'agit d'un problème d'optimisation convexe.
En bref, je ne souhaite pas de "théorème de classification" - mais juste une liste reflétant utilement ce que nous savons actuellement sur les algorithmes efficaces. Et c’est pourquoi ce qui m’intéresse le plus, ce sont les techniques permettant d’inscrire dans P ou BPP des éléments qui ont une large applicabilité mais qui ne correspondent pas à la liste ci-dessus - ou d’autres idées pour améliorer ma première tentative grossière de me vanter auprès du physicien.