Ensino de NP-completude - Reduções de Turing vs Reduções de Karp


25

Estou interessado na questão de qual a melhor maneira de ensinar a NP-completude aos cursos de ciência da computação. Em particular, devemos ensiná-lo usando reduções de Karp ou reduções de Turing?

Sinto que os conceitos de completude e redução de NP são algo que todo especialista em ciência da computação deve aprender. No entanto, ao ensinar a NP-completude, notei que o uso das reduções de Karp tem algumas desvantagens.

Antes de tudo, as reduções de Karp parecem desnecessariamente confusas para alguns estudantes. A noção intuitiva de redução é "se eu tiver um algoritmo para resolver o problema X, então também posso usá-lo para resolver o problema Y". Isso é muito intuitivo - mas mapeia muito melhor as reduções de Turing do que as reduções de Karp. Como resultado, vejo alunos que tentam provar a completude do NP serem desviados por sua intuição e formam uma prova incorreta. Tentar ensinar ambos os tipos de reduções e enfatizar esse aspecto das reduções de Karp às vezes parece um formalismo desnecessário e ocupa um tempo desnecessário nas aulas e a atenção dos alunos sobre o que parece ser um detalhe técnico não essencial; não é evidente por que usamos essa noção mais restrita de redução.

Entendo a diferença entre reduções de Karp e reduções de Turing (Cook), e como elas levam a diferentes noções de completude de NP. Percebo que as reduções de Karp nos dão uma granularidade mais fina de distinções entre classes de complexidade. Portanto, para um estudo sério da teoria da complexidade, as reduções de Karp são obviamente a ferramenta certa. Mas para os estudantes de ciência da computação que estão apenas aprendendo isso e nunca vão entrar na teoria da complexidade, não tenho certeza se essa distinção mais fina é crítica é fundamental para que eles sejam expostos.

Por fim, como estudante, lembro-me de ficar confuso ao encontrar um problema como "tautologia" - por exemplo, dada uma fórmula booleana, verifique se é uma tautologia. O que foi confuso foi que esse problema é claramente difícil: qualquer algoritmo de tempo polinomial implicaria que P=NP; e resolver esse problema é obviamente tão difícil quanto resolver o problema da tautologia. No entanto, embora a tautologia intuitivamente seja tão difícil quanto a satisfação, a tautologia não é difícil para o NP. Sim, entendo hoje por que esse é o caso, mas na época me lembro de ficar intrigado com isso. (O que passou pela minha cabeça uma vez que finalmente entendi foi: Por que traçamos essa distinção entre NP-hard e co-NP-hard, afinal? Isso parece artificial e não é muito bem motivado pela prática. Por que nos concentramos em NP Eles parecem igualmente naturais. De uma perspectiva prática, a dureza da co-NP parece ter essencialmente as mesmas conseqüências práticas que a dureza da NP, então por que ficamos todos presos nessa distinção? Sim, eu sei o respostas, mas como estudante, lembro que isso apenas fez o sujeito parecer mais misterioso e pouco motivado.)

Então, minha pergunta é essa. Quando ensinamos NP-completude aos alunos, é melhor ensinar usando reduções de Karp ou reduções de Turing? Alguém já tentou ensinar o conceito de completude NP usando reduções de Turing? Se sim, como foi? Haveria armadilhas ou desvantagens não óbvias se ensinássemos os conceitos usando reduções de Turing e pulássemos as questões conceituais associadas às reduções de Karp?


Relacionado: veja aqui e aqui , que menciona que a razão pela qual usamos reduções de Karp na literatura é porque ela nos permite distinguir entre dureza NP e dureza co-NP. No entanto, parece não dar nenhuma resposta focada em uma perspectiva pedagógica sobre se essa capacidade é crítica para os objetivos de aprendizagem de uma classe de algoritmos que devem ser adotados por todos os principais especialistas em CS. Veja também aqui no cstheory.SE , que tem uma discussão semelhante.


Observação motivacional: Turing-reduz a um problema em PN não é conhecido por implicar . XNP

11
@ RickyDemer, entendido - mas quando estamos tentando demonstrar que um problema é difícil, não nos importamos se o está no NP ou não, de modo que isso não me motiva de maneira super eficiente. E mostrar que um problema é difícil é a principal aplicação de NP, completude de NP, dureza de NP etc.X
DW

11
Não vejo muita diferença. A idéia de Cook de "invocar a solução de outros problemas" é natural para a programação , mas para pessoas que têm um background mais abstrato (alguma matemática discreta), o mapeamento entre instâncias de problemas também é natural.
21715 vonbrand

Respostas:


10

Eu diria muito definitivamente ensinar usando reduções de Karp (muitos-um). Independentemente dos benefícios do uso de reduções de Turing no tempo poli (Cook), as reduções de Karp são o modelo padrão.

Todo mundo usa Karp e a principal armadilha de ensinar Cook é que você acabará com toda uma classe de alunos que se tornam patologicamente confusos sempre que lêem um livro ou tentam discutir o assunto com alguém que não foi ensinado por você.

Concordo que as reduções de Cook são, de várias maneiras, mais sensíveis e que não há distinção entre dureza NP e dureza CoNP em termos práticos, no sentido de que ambos significam "Esse problema é muito difícil e você não terá uma algoritmo geral, eficiente e exato que pode lidar com grandes instâncias ". Por outro lado, a distinção entre NP e coNP não é inteiramente um artefato de uma teoria baseada em reduções de Karp: você não costuma falar sobre gráficos que não são de 3 cores ou nos quais cada conjunto de  vértices contém pelo menos uma aresta. De alguma forma, a versão "natural" do problema geralmente parece estar no NP e não no coNP.k


7

É melhor ensinar os dois ! Um especialista em ciência da computação deve saber sobre os dois.

Eu não conheço ninguém que use reduções de Cook para ensinar a completude a PN, obviamente, os teóricos da complexidade não seguem; os teóricos da não complexidade normalmente seguem a definição padrão desde o artigo de Karp e são usados ​​em todos os livros didáticos (que eu conheço). Isso causará muita confusão para eles posteriormente, se você não seguir a terminologia padrão.

As reduções de cozimento estão basicamente resolvendo problemas usando sub-rotinas de caixa preta. Eles são fáceis de explicar e motivar se seus alunos tiverem alguma experiência em programação. Eles são essenciais, pois sem as reduções do Cook, você não pode discutir reduções entre problemas de pesquisa, problemas de otimização etc.

NPNPPNPNP

NPcoNPNPNPNPPNP

xAf(x)B


2
NPNPNPNP

@DW você quis dizer "Cook" no lugar de (o segundo e o terceiro) "Karp" no seu comentário? Você ainda pode provar que há problemas com o Cook, que não é esse o problema. A questão é que o NP não está fechado sob eles, ou seja, as reduções de Cook não preservam a verificabilidade eficiente dos problemas.
Kaveh

2
Opa, sim, eu quis dizer Cook, não Karp. (argh!) Entendo que o NP não está fechado nas reduções de Cook, mas você pode explicar por que isso é um problema, da perspectiva de como ensinamos algoritmos para estudantes de graduação? Que problemas pedagógicos ou conceituais isso cria? Quais seriam as consequências negativas se ensinássemos algoritmos como esse e apenas admitíssemos / aceitássemos que o NP não está fechado com reduções de Cook? Por exemplo, isso causaria algum mal-entendido conceitual problemático entre os estudantes?
DW

-3

A noção intuitiva de redução é "se eu tiver um algoritmo para resolver o problema X, então também posso usá-lo para resolver o problema Y".

Uma maneira interessante de abordar essa questão de ensino em particular é perceber que a completude do PE tem semelhanças e analogias com a indecidibilidade, o que também é pouco intuitivo. os alunos entram na aula apenas tendo ouvido falar em algoritmos que são interrompidos. mas o teorema do princípio do TCS é que existem problemas para os quais não há solução garantida, ou seja, o problema de parada. e, de fato, problemas indecidíveis podem começar a parecer longe de ser inventados e aparentemente são um tanto onipresentes.

portanto, a teoria está nos dizendo a maneira de ver a computação fundamentalmente como um processo que pode retornar uma resposta sob algumas circunstâncias. em outras circunstâncias, talvez não. para completude e decidibilidade de NP, a questão fundamental e mais geral é: "existe um algoritmo que retorna Yno tempo P". mas isso não diz nada sobre um algoritmo que retorna Nno tempo P. um algoritmo pode retornar Yno tempo P para uma instância, mas não retornar uma resposta em outras instâncias. a teoria está nos dizendo que realmente há uma diferença distinta aqui à qual devemos prestar muita atenção. se não for intuitivo, significa que nossas intuições fundamentais precisam ser reajustadas (como costuma acontecer no ensino teórico).


em outras palavras, aparentemente podem existir algoritmos que retornam Yno tempo P, mas também levam "mais tempo" do que o tempo P para retornar Ne a teoria é baseada / orientada / focada no tempo que leva para responder Y.
vzn

11
Qualquer aluno que tenha escrito mais de cinco programas está familiarizado com o conceito de "um algoritmo que não pára" da experiência pessoal direta.
David Richerby

apenas tentando definir o coNP de uma maneira mais intuitiva, conforme solicitado, com base nas experiências / analogias cotidianas. sempre achei isso também não intuitivo. alguém tem uma maneira melhor?
vzn
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.