Mich interessiert die Frage, wie man Informatik-Majors am besten die NP-Vollständigkeit beibringen kann. Sollten wir es insbesondere unter Verwendung von Karp-Reduktionen oder unter Verwendung von Turing-Reduktionen lehren?
Ich bin der Meinung, dass die Konzepte der NP-Vollständigkeit und -Reduzierung etwas sind, das jeder Major der Informatik lernen sollte. Beim Unterrichten der NP-Vollständigkeit habe ich jedoch festgestellt, dass die Verwendung von Karp-Reduktionen einige Nachteile hat.
Erstens scheinen Karp-Reduktionen für manche Schüler unnötig verwirrend zu sein. Der intuitive Begriff der Reduktion lautet: "Wenn ich einen Algorithmus zur Lösung von Problem X habe, kann ich ihn auch zur Lösung von Problem Y verwenden." Das ist sehr intuitiv - lässt sich aber viel besser auf Turing-Reduktionen als auf Karp-Reduktionen übertragen. Infolgedessen sehe ich, dass Schüler, die versuchen, NP-Vollständigkeit zu beweisen, durch ihre Intuition in die Irre geführt werden und einen falschen Beweis bilden. Der Versuch, beide Arten von Reduktionen zu lehren und diesen Aspekt von Karp-Reduktionen hervorzuheben, fühlt sich manchmal ein wenig nach unnötigem Formalismus an und beansprucht unnötige Unterrichtszeit und Aufmerksamkeit der Schüler für das, was sich als ein unwesentliches technisches Detail anfühlt. Es ist nicht selbstverständlich, warum wir diesen eingeschränkten Begriff der Reduktion verwenden.
Ich verstehe den Unterschied zwischen Karp-Reduktionen und Turing-Reduktionen (Cook-Reduktionen) und wie sie zu unterschiedlichen Vorstellungen von NP-Vollständigkeit führen. Mir ist klar, dass Karp-Reduktionen eine genauere Unterscheidung zwischen Komplexitätsklassen ermöglichen. Für ein ernstes Studium der Komplexitätstheorie sind Karp-Reduktionen offensichtlich das richtige Werkzeug. Aber für Informatikstudenten, die dies gerade erst lernen und sich nie mit Komplexitätstheorie befassen werden, bin ich mir nicht sicher, ob diese feinere Unterscheidung entscheidend ist, damit sie sich damit auseinandersetzen können.
Schließlich erinnere ich mich, dass ich mich als Student verwirrt fühlte, als ich auf ein Problem wie "Tautologie" stieß - z. Was verwirrend war, war, dass dieses Problem eindeutig schwierig ist: Jeder Polynom-Zeit-Algorithmus würde implizieren, dass; und die Lösung dieses Problems ist offensichtlich so schwierig wie die Lösung des Tautologieproblems. Obwohl die intuitive Tautologie ebenso schwierig wie die Erfüllbarkeit ist, ist die Tautologie nicht NP-hart. Ja, ich verstehe heute, warum dies der Fall ist, aber zu der Zeit erinnere ich mich, dass ich davon verwirrt war. (Was mir durch den Kopf ging, als ich endlich verstand, war: Warum unterscheiden wir überhaupt zwischen NP-hart und co-NP-hart? Das scheint künstlich und durch die Praxis nicht sehr motiviert zu sein. Warum konzentrieren wir uns eher auf NP als co-NP? Sie scheinen gleichermaßen natürlich zu sein. Aus praktischer Sicht scheint die co-NP-Härte im Wesentlichen die gleichen praktischen Konsequenzen zu haben wie die NP-Härte. Warum hängen wir also alle an dieser Unterscheidung? Ja, ich kenne die Antworten, aber als Student erinnere ich mich, dass sich das Thema dadurch arkaner und weniger motiviert anfühlte.)
Meine Frage lautet also: Wenn wir den Schülern NP-Vollständigkeit beibringen, ist es dann besser, mit Karp-Reduktionen oder Turing-Reduktionen zu unterrichten? Hat jemand versucht, das Konzept der NP-Vollständigkeit mithilfe von Turing-Reduzierungen zu vermitteln? Wenn ja, wie ist es gelaufen? Gibt es nicht offensichtliche Fallstricke oder Nachteile, wenn wir die Konzepte mit Turing-Reduktionen unterrichten und die mit Karp-Reduktionen verbundenen konzeptionellen Probleme überspringen würden?
Verwandte: siehe hier und hier , wo erwähnt wird, dass der Grund, warum wir Karp-Reduktionen in der Literatur verwenden, darin liegt, dass wir zwischen NP-Härte und Co-NP-Härte unterscheiden können. Es scheint jedoch keine Antwort zu geben, die sich auf die pädagogische Perspektive konzentriert, ob diese Fähigkeit für die Lernziele einer Algorithmusklasse, die von jedem Hauptfach belegt werden sollte, entscheidend ist. Siehe auch hier auf cstheory.SE , wo es eine ähnliche Diskussion gibt.