Interesuje mnie pytanie, jak najlepiej uczyć kompletności NP na kierunkach informatycznych. W szczególności, czy powinniśmy tego uczyć stosując redukcje Karp czy redukcje Turinga?
Uważam, że koncepcje kompletności i redukcji NP są czymś, czego powinien nauczyć się każdy kierunek informatyki. Jednak ucząc kompletności NP zauważyłem, że stosowanie redukcji Karp ma pewne wady.
Po pierwsze, obniżenie Karp wydaje się być niepotrzebnie mylące dla niektórych uczniów. Intuicyjnym pojęciem redukcji jest „jeśli mam algorytm do rozwiązania problemu X, to mogę go również użyć do rozwiązania problemu Y”. To bardzo intuicyjne - ale znacznie lepiej odwzorowuje redukcje Turinga niż redukcje Karp. W rezultacie widzę studentów, którzy próbują udowodnić kompletność NP, zostają wprowadzeni w błąd przez swoją intuicję i tworzą niepoprawny dowód. Próba nauczenia obu rodzajów redukcji i podkreślenie tego aspektu redukcji Karp czasami wydaje się trochę niepotrzebnym formalizmem i zajmuje niepotrzebny czas na zajęciach oraz uwagę uczniów na to, co wydaje się być nieistotnym szczegółem technicznym; nie jest oczywiste, dlaczego używamy tego bardziej ograniczonego pojęcia redukcji.
Rozumiem różnicę między redukcjami Karp a redukcjami Turinga (Cooka) i jak prowadzą one do różnych pojęć kompletności NP. Zdaję sobie sprawę, że redukcje Karp dają nam większą szczegółowość rozróżnienia między klasami złożoności. Tak więc, do poważnego badania teorii złożoności, redukcje Karp są oczywiście właściwym narzędziem. Ale dla studentów informatyki, którzy dopiero się tego uczą i nigdy nie zamierzają zagłębiać się w teorię złożoności, nie jestem pewien, czy to lepsze rozróżnienie jest krytyczne, ma dla nich kluczowe znaczenie.
Wreszcie, jako student, pamiętam, że czułem się zdziwiony, gdy natknąłem się na problem taki jak „tautologia” - np. Biorąc pod uwagę logiczną formułę, sprawdź, czy jest to tautologia. Mylące było to, że ten problem jest wyraźnie trudny: każdy algorytm wielomianowy sugerowałby, że ; a rozwiązanie tego problemu jest oczywiście tak samo trudne jak rozwiązanie problemu tautologii. Jednak choć intuicyjnie tautologia jest tak trudna, jak satysfakcja, tautologia nie jest trudna NP. Tak, rozumiem dzisiaj, dlaczego tak jest, ale w tym momencie pamiętam, że byłem tym zaskoczony. (Po tym, jak w końcu zrozumiałem, przeszło mi przez myśl: dlaczego w każdym razie rozróżniamy między NP-twardym a co-NP-twardym? To wydaje się sztuczne i niezbyt dobrze motywowane praktyką. Dlaczego skupiamy się na NP niż co-NP? Wydają się równie naturalne. Z praktycznego punktu widzenia twardość co-NP wydaje się mieć zasadniczo takie same praktyczne konsekwencje jak twardość NP, więc dlaczego wszyscy rozłączamy się z tym rozróżnieniem? Tak, wiem odpowiedzi, ale jako student pamiętam, że właśnie to sprawiło, że przedmiot był bardziej tajemniczy i słabo umotywowany).
Więc moje pytanie brzmi: Kiedy uczymy uczniów kompletności NP, czy lepiej uczyć stosując redukcje Karp lub redukcje Turinga? Czy ktoś próbował nauczać pojęcia kompletności NP za pomocą redukcji Turinga? Jeśli tak, jak poszło? Czy wystąpiłyby jakieś nieoczywiste pułapki lub wady, gdybyśmy uczyli pojęć stosując redukcje Turinga i pomijaliśmy kwestie koncepcyjne związane z redukcjami Karp?
Powiązane: patrz tutaj i tutaj , które wspominają, że powodem, dla którego stosujemy redukcje Karpa w literaturze, jest to, że pozwala nam odróżnić twardość NP od twardości co-NP. Wydaje się jednak, że nie daje żadnej odpowiedzi, która koncentrowałaby się na pedagogicznej perspektywie tego, czy ta umiejętność jest kluczowa dla celów uczenia się klasy algorytmów, które powinny być podejmowane przez każdego kierownika CS. Zobacz także tutaj na cstheory.SE , który ma podobną dyskusję.