Insegnare la completezza NP - Riduzioni di Turing vs riduzioni di Karp


25

Sono interessato alla domanda sul modo migliore per insegnare la completezza NP alle major dell'informatica. In particolare, dovremmo insegnarlo usando le riduzioni di Karp o le riduzioni di Turing?

Sento che i concetti di completezza e riduzioni di NP sono qualcosa che ogni grande informatico dovrebbe imparare. Tuttavia, quando ho insegnato la completezza NP, ho notato che l'uso delle riduzioni di Karp ha alcuni aspetti negativi.

Prima di tutto, le riduzioni del Karp sembrano confondere inutilmente alcuni studenti. L'idea intuitiva di una riduzione è "se ho un algoritmo per risolvere il problema X, allora posso usarlo anche per risolvere il problema Y". È molto intuitivo, ma si associa molto meglio alle riduzioni di Turing che alle riduzioni di Karp. Di conseguenza, vedo gli studenti che stanno provando a dimostrare la completezza NP essere fuorviati dalla loro intuizione e formare una prova errata. Cercare di insegnare entrambi i tipi di riduzioni e enfatizzare questo aspetto delle riduzioni del Karp a volte sembra un po 'inutile formalismo e occupa inutili ore di lezione e l'attenzione degli studenti su ciò che sembra un dettaglio tecnico inessenziale; non è evidente il motivo per cui usiamo questa nozione più ristretta di riduzione.

Comprendo la differenza tra le riduzioni di Karp e le riduzioni di Turing (Cook) e il modo in cui portano a diverse nozioni di completezza NP. Mi rendo conto che le riduzioni del Karp ci danno una granularità più fine delle distinzioni tra le classi di complessità. Quindi, per uno studio serio della teoria della complessità, le riduzioni di Karp sono ovviamente lo strumento giusto. Ma per gli studenti di informatica che stanno solo imparando questo e non entreranno mai nella teoria della complessità, non sono sicuro che questa raffinata distinzione sia fondamentale per cui essere esposti.

Infine, da studente, ricordo di essermi sentito perplesso quando mi sono imbattuto in un problema come "tautologia" - ad esempio, data una formula booleana, controlla se si tratta di una tautologia. Ciò che confondeva era che questo problema era chiaramente difficile: qualsiasi algoritmo del tempo polinomiale avrebbe implicato che P=NP; e risolvere questo problema è ovviamente difficile come risolvere il problema della tautologia. Tuttavia, anche se intuitivamente la tautologia è tanto dura quanto soddisfacente, la tautologia non è NP-dura. Sì, capisco oggi perché questo è il caso, ma al momento ricordo di esserne rimasto perplesso. (Ciò che mi è passato per la testa una volta che ho finalmente capito era: perché tracciamo questa distinzione tra NP-hard e co-NP-hard, comunque? Ciò sembra artificiale e non molto motivato dalla pratica. Perché ci concentriamo piuttosto su NP rispetto alla co-NP? Sembrano ugualmente naturali. Dal punto di vista pratico, la durezza NP-Co sembra avere essenzialmente le stesse conseguenze pratiche della durezza NP, quindi perché siamo tutti bloccati da questa distinzione? Sì, conosco il risposte, ma da studente, ricordo che questo ha reso la materia più arcana e scarsamente motivata.)

Quindi, la mia domanda è questa. Quando insegniamo la completezza NP agli studenti, è meglio insegnare usando le riduzioni Karp o le riduzioni di Turing? Qualcuno ha provato a insegnare il concetto di completezza NP usando le riduzioni di Turing? Se è così, come è andata? Ci sarebbero insidie ​​o svantaggi non ovvi se insegnassimo i concetti usando le riduzioni di Turing e saltassimo le questioni concettuali associate alle riduzioni di Karp?


Correlati: vedi qui e qui , che menziona che il motivo per cui usiamo le riduzioni di Karp in letteratura è perché ci consente di distinguere tra durezza NP e durezza NP-co. Tuttavia, non sembra dare alcuna risposta incentrata su una prospettiva pedagogica se questa capacità sia critica per gli obiettivi di apprendimento di una classe di algoritmi che dovrebbe essere presa da ogni CS maggiore. Vedi anche qui su cstheory.SE , che ha una discussione simile.


Osservazione motivazionale: Turing-riduce a un problema in NP non è noto per implicare . XNP

1
@RickyDemer, capito - ma quando stiamo cercando di dimostrare un problema è difficile, non ci interessa davvero se è in NP o no, quindi questo non mi motiva in modo super efficace. E mostrare un problema è difficile è l'applicazione principale di NP, completezza NP, durezza NP, ecc.X
DW

1
Non vedo molta differenza. L'idea di Cook di "invocare la soluzione di altri problemi" è naturale per la programmazione , ma anche per le persone che hanno un background più astratto (alcuni discreti calcoli matematici) la mappatura tra istanze problematiche è naturale.
vonbrand,

Risposte:


10

Direi sicuramente di insegnare usando le riduzioni di Karp (molte altre). Indipendentemente dai vantaggi dell'utilizzo delle riduzioni di Turing poli-tempo (Cook), le riduzioni Karp sono il modello standard.

Tutti usano Karp e la principale insidia dell'insegnamento di Cook è che finirai con un'intera classe di studenti che diventano patologicamente confusi ogni volta che leggono un libro di testo o provano a discutere l'argomento con chiunque non sia stato insegnato da te.

k


7

È meglio insegnare a entrambi ! Un maggiore in informatica dovrebbe sapere di entrambi.

Non conosco nessuno che utilizzi le riduzioni di Cook per insegnare la completezza NP, i teorici della complessità ovviamente no, i teorici della non complessità in genere seguono quella che è la definizione standard dal documento di Karp ed è usata in tutti i libri di testo (di cui sono a conoscenza). In seguito causerà molta confusione se non segui la terminologia standard.

Le riduzioni del cuoco stanno essenzialmente risolvendo i problemi usando le subroutine in scatola nera. Sono facili da spiegare e motivare se i tuoi studenti hanno qualche esperienza di programmazione. Sono essenziali poiché senza riduzioni di Cook non è possibile discutere di riduzioni tra problemi di ricerca, problemi di ottimizzazione, ecc.

NPNPPNPNP

NPcoNPNPNPNPPNP

xAf(x)B


2
NPNPNPNP

@DW nel tuo commento intendevi "Cook" al posto di (il secondo e il terzo) "Karp"? Puoi ancora dimostrare che i problemi sono difficili con Cook, non è questo il problema. Il problema è che NP non è chiuso sotto di loro, vale a dire le riduzioni di Cook non preservano in modo efficiente la verificabilità dei problemi.
Kaveh,

2
Oops, sì, intendevo Cook, non Karp. (argh!) Capisco che NP non è chiuso sotto le riduzioni di Cook, ma puoi spiegare perché questo è un problema, dal punto di vista di come insegniamo gli algoritmi agli studenti universitari? Quali problemi pedagogici o concettuali crea ciò? Quali sarebbero le conseguenze negative se insegnassimo algoritmi del genere e ammettessimo / accettassimo che NP non è chiuso sotto le riduzioni di Cook? Ad esempio, causerebbe qualche incomprensione concettuale problematica tra gli studenti?
DW

-3

L'idea intuitiva di una riduzione è "se ho un algoritmo per risolvere il problema X, allora posso usarlo anche per risolvere il problema Y".

un modo interessante per affrontare questo particolare problema di insegnamento è rendersi conto che la completezza NP ha somiglianze e analogie con l'indecidibilità che è anche non intuitiva. gli studenti entrano in classe solo dopo aver sentito parlare di algoritmi che si fermano. ma il teorema principale di TCS è che esistono problemi per i quali non esiste una soluzione garantita, vale a dire il problema di arresto. e in effetti problemi indecidibili possono iniziare a sembrare ben lungi dall'essere inventati e apparentemente in qualche modo ubriachi.

quindi, la teoria ci sta dicendo il modo di vedere il calcolo fondamentalmente come un processo che può restituire una risposta in alcune circostanze. in altre circostanze, potrebbe non esserlo. per completezza e decidibilità NP, la domanda fondamentale e più generale è "esiste un algoritmo che ritorna Yin tempo P". ma questo non dice nulla su un algoritmo che ritorna Nin P time. un algoritmo potrebbe tornare Yin P time per un'istanza ma non restituire una risposta in altre istanze. la teoria ci sta dicendo che qui c'è davvero una netta differenza a cui dobbiamo prestare molta attenzione. se non intuitivo, significa che le nostre intuizioni fondamentali devono essere riadattate (come spesso accade nell'insegnamento teorico).


in altre parole, a quanto pare possono esistere algoritmi che ritornano Ynel tempo P ma che impiegano "più tempo" del tempo P per tornare Ne la teoria si basa su / orientata / focalizzata sul tempo necessario per rispondere Y.
vzn

1
Ogni studente che ha scritto più di cinque programmi ha familiarità con il concetto di "un algoritmo che non si ferma" dall'esperienza personale diretta.
David Richerby,

semplicemente cercando di definire il coNP in un modo più intuitivo come richiesto sulla base dell'esperienza / analogie quotidiane. l'ho sempre trovato poco intuitivo. qualcuno ha un modo migliore?
vzn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.