Di recente, quando ho parlato con un fisico, ho affermato che, nella mia esperienza, quando un problema che sembra ingenuo dovrebbe richiedere tempo esponenziale si rivela non banalmente essere in P o BPP, in genere si può identificare un "motivo generale" per cui la riduzione si verifica --- e quasi sempre, questa ragione appartiene a un elenco di una dozzina o meno di "soliti sospetti" (ad esempio: programmazione dinamica, algebra lineare ...). Tuttavia, questo mi ha fatto pensare: possiamo davvero scrivere un elenco decente di tali motivi? Ecco un primo tentativo incompleto in uno:
(0) Caratterizzazione matematica. Problema ha una caratterizzazione "puramente matematica" non ovvia che, una volta conosciuta, rende immediato che puoi semplicemente fare una ricerca esaustiva su un elenco di poli (n) possibilità. Esempio: planarità grafica, per la quale un algoritmo O (n 6 ) segue dal teorema di Kuratowski.
(Come indicato di seguito "planare", questo è stato un cattivo esempio: anche quando conosci una caratterizzazione combinatoria della planarità, dare un algoritmo polinomiale per il tempo è ancora piuttosto non banale. Quindi, lasciami sostituire un esempio migliore qui: che ne dici , diciamo, "dato un input n scritto in binario, calcola quanti colori sono necessari per colorare una mappa arbitraria incorporata su una superficie con n buchi." Non è ovvio a priori che ciò sia calcolabile (o addirittura finito!). Ma c'è una formula nota che dà la risposta, e una volta che conosci la formula, è banale calcolare in tempo polinomiale. Nel frattempo, "ridurre ai minori esclusi / teoria di Robertson-Seymour" dovrebbe probabilmente essere aggiunto come motivo generale separato per cui qualcosa può essere in P.)
Comunque, questo è specificamente non è il tipo di situazione che più mi interessi.
(1) Programmazione dinamica. Il problema può essere suddiviso in modo tale da consentire una soluzione ricorsiva senza esponenziale esponenziale, spesso perché i vincoli da soddisfare sono disposti in un ordine lineare o di altro tipo. "Puramente combinatorio"; nessuna struttura algebrica necessaria. Probabilmente, la raggiungibilità del grafico (e quindi 2SAT) sono casi speciali.
(2) Matroidi. Il problema ha una struttura matroid, che consente a un algoritmo avido di funzionare. Esempi: matching, spanning tree minimo.
(3) Algebra lineare. Il problema può essere ridotto per risolvere un sistema lineare, calcolare un determinante, calcolare autovalori, ecc. Probabilmente, la maggior parte dei problemi che coinvolgono "cancellazioni miracolose", compresi quelli risolvibili dal formalismo del matchgate di Valiant, cadono anche sotto l'ombrello lineare-algebrico.
(4) Convessità. Il problema può essere espresso come una sorta di ottimizzazione convessa. La programmazione semidefinita, la programmazione lineare e i giochi a somma zero sono casi comuni (sempre più) speciali.
(5) Test di identità polinomiale. Il problema può essere ridotto al controllo di un'identità polinomiale, in modo che il Teorema Fondamentale dell'Algebra porti a un algoritmo randomizzato efficiente - e in alcuni casi, come la primalità, persino un algoritmo dimostrabilmente deterministico.
(6) Markov Chain Monte Carlo. Il problema può essere ridotto al campionamento dall'esito di una camminata a miscelazione rapida. (Esempio: conteggio approssimativo degli abbinamenti perfetti.)
(7) Algoritmo euclideo. GCD, frazioni continue ...
Varie / Non ovvio esattamente come classificare: matrimonio stabile, factoring polinomiale, problema di appartenenza ai gruppi di permutazione, vari altri problemi nella teoria dei numeri e nella teoria dei gruppi, problemi reticolari a bassa dimensione ...
La mia domanda è: quali sono le cose più importanti che ho lasciato fuori?
Per chiarire:
Mi rendo conto che nessuna lista può essere completa: qualunque sia il numero finito di motivi che fornisci, qualcuno sarà in grado di trovare un problema esotico che si trova in P ma non per nessuno di questi motivi. In parte per questo motivo, sono più interessato alle idee che mettono molti problemi diversi e apparentemente non correlati in P o BPP, piuttosto che in idee che funzionano solo per un problema.
Mi rendo anche conto che è soggettivo come dividere le cose. Ad esempio, i matroidi dovrebbero essere solo un caso speciale di programmazione dinamica? La solvibilità mediante una ricerca approfondita è abbastanza importante da essere la sua stessa ragione, separata dalla programmazione dinamica? Inoltre, spesso lo stesso problema può essere in P per diversi motivi, a seconda di come lo si guarda: ad esempio, trovare un autovalore principale è in P a causa dell'algebra lineare, ma anche perché è un problema di ottimizzazione convessa.
In breve, non spero in un "teorema di classificazione", ma solo in un elenco che riflette utilmente ciò che attualmente sappiamo sugli algoritmi efficienti. Ed è per questo che ciò che mi interessa di più sono le tecniche per mettere cose in P o BPP che hanno ampia applicabilità ma che non rientrano nell'elenco sopra - o altre idee per migliorare il mio primo tentativo grezzo di fare del mio vanto il fisico.