Crenças falsas comuns em ciência da computação teórica


62

EDITAR EM 10/12/08:

Tentarei modificar a pergunta para que mais pessoas possam compartilhar suas opiniões. PRECISAMOS de suas contribuições!

Este post é inspirado no do MO: Exemplos de falsas crenças comuns em matemática . Às vezes, grandes listas geram um grande número de respostas cujas qualidades são difíceis de controlar, mas após o sucesso do post relacionado no MO, estou convencido de que seria útil listar um monte de falsas crenças comuns no TCS.

Ainda assim, como o site foi desenvolvido para responder a perguntas de nível de pesquisa, exemplos como significa tempo não polinomial não devem estar na lista. Enquanto isso, queremos alguns exemplos que podem não ser difíceis, mas sem pensar em detalhes, parece razoável também. Queremos que os exemplos sejam educacionais e geralmente aparecem quando se estuda o assunto pela primeira vez.NP

Quais são alguns exemplos (não triviais) de falsas crenças comuns na ciência da computação teórica que aparecem para as pessoas que estudam nessa área?

Para ser preciso, queremos exemplos diferentes de resultados surpreendentes e contra - intuitivos no TCS; esses tipos de resultados tornam as pessoas difíceis de acreditar, mas são VERDADEIRAS. Aqui estamos pedindo exemplos surpreendentes de que as pessoas podem pensar que isso é verdade à primeira vista, mas depois de um pensamento mais profundo a falha interna é exposta.


Como um exemplo de respostas adequadas na lista, este vem do campo de algoritmos e teoria dos grafos:

Para um gráfico nó , um separador edge é um subconjunto de arestas de tamanho , em que os nós de podem ser particionados em duas partes não adjacentes, cada uma consistindo em no máximo nós . Temos o seguinte "lema":nGkSkGS3n/4

Uma árvore possui um separador de 1 extremidade.

Direito?


A postagem foi sinalizada para ser solicitada como CW.
Hsien-Chih Chang,

Respostas:


59

Essa é comum à geometria computacional, mas endêmica em outros lugares: os algoritmos da RAM real podem ser transferidos para a RAM inteira (para restrições inteiras do problema) sem perda de eficiência. Um exemplo canônico é a afirmação “A eliminação gaussiana é executada em .” De fato, ordens de eliminação descuidadas podem produzir números inteiros com muitos bits exponencialmente .O(n3)

Pior ainda, mas ainda infelizmente comum: os algoritmos da RAM real com a função floor podem ser transferidos para a RAM inteira sem perda de eficiência. De fato, um piso de RAM + real pode resolver qualquer problema no PSPACE ou no #P em um número polinomial de etapas .


5
O equívoco da eliminação gaussiana é muito amplo. Talvez parte do problema seja que frequentemente trabalhamos em campos finitos e, como não há nenhum problema lá, esquecemos.
#

"Depois que fizemos a eliminação Gaussiana inteira, sabemos como encontrar uma solução".
Albert Hendriks

40

Acabei de acabar com outro mito, o que é contribuído pela resposta de @ XXYYXX a este post :

  • Um problema X é -hard se houver uma redução de tempo polinomial (ou espaço de logs) de todos os problemas de para X.N PNPNP
  • Suponha a hipótese de tempo exponencial, o 3-SAT não possui um algoritmo de tempo subexponencial. Além disso, o 3-SAT está em .NP
  • Portanto, nenhum X possui algoritmos de tempo subexponenciais. Caso contrário, um algoritmo de tempo subexponencial para X + uma redução de tempo polinomial = um algoritmo de tempo subexponencial para 3-SAT.NP

Mas temos algoritmos de tempo subexponenciais para alguns problemas difíceis de NP.


Eu tive a mesma impressão.
Mohammad Al-Turkistany

Então, o que isso nos diz sobre a hipótese do tempo exponencial? Ou eu perdi alguma falha nessa linha de raciocínio?
Mikhail Glushenkov

2
Há uma falha no ponto 3. Isso é exatamente o que eu tenha entendido mal por um longo tempo :)
Hsien-Chih Chang張顯之

Não tenho certeza se não consigo encontrar a falha. É que, desde , a redução não deve ser necessariamente polinomial mas que pode ser exponencial no tempo, já que ambos os problemas estariam em EXPTIME (devido a ETH?)PNP
chazisop

43
As reduções no tempo polinomial podem alterar o tamanho da entrada em uma quantidade polinomial. Portanto, se você reduzir uma instância de Q do tamanho n para uma instância de P do tamanho n ao quadrado, um algoritmo 2 para a raiz n para P fornecerá apenas um algoritmo 2 para n para Q.
Russell Impagliazzo

29

Uma crença falsa que foi popularizada este ano e é contada muitas vezes quando se tenta explicar todo o problema de , já que é explicado como eficiente:PPNPP

"Se , podemos resolver um grande número de problemas com eficiência. Caso contrário, não podemos"P=NP

Se o puder ser resolvido em então . Eu acho que ninguém pensaria em executar esse algoritmo.S ( n g o o g o L p l e X ) P = N P3SATO(ngoogolplex)P=NP

Se , ainda podemos ter um algoritmo para executado em , que é menor que para . A maioria das pessoas ficaria mais do que feliz em poder resolver o para 4 bilhões de cidades tão rapidamente.T S P n log ( log n ) n 5 n 2 32 T S PPNPTSPnlog(logn)n5n232TSP



6
“Para cada algoritmo de tempo polinomial que você possui, há um algoritmo exponencial que eu preferiria executar” - Alan Perlis, através da Carta Perdida de Gödel e P = NP .
Gål GD

24

Essa é realmente uma crença falsa na matemática, mas surge frequentemente nos contextos do TCS: se as variáveis ​​aleatórias e são independentes, então, condicionadas a elas permanecem independentes. (falso, mesmo que seja independente de e ).Y Z Z X YXYZZXY


2
Você tem um exemplo simples favorito disso que você recomendaria para ajudar as pessoas a reconhecer rapidamente por que é falso?
DW

21
Digamos que e são bits independentes e uniformemente aleatórios, e (mod 2). Então, é independente de e é independente de , mas condicionado a , sabendo que revela e vice-versa. Y Z = X + Y Z X Y Z X YXYZ=X+YZXYZXY
MCH

22

Computação distribuída = computação distribuída de alto desempenho (clusters, grades, nuvens, seti @ home, ...).

Algoritmos distribuídos = algoritmos para esses sistemas.


Spoiler: Se isso não parece muito com uma "crença falsa", sugiro que você dê uma olhada em conferências como PODC e DISC e veja que tipo de trabalho as pessoas estão realmente fazendo quando estudam aspectos teóricos da computação distribuída.

Uma configuração típica de problema é a seguinte: Temos um ciclo com nós; os nós são rotulados com identificadores exclusivos do conjunto ; os nós são determinísticos e trocam mensagens entre si de maneira síncrona. Quantas rodadas de comunicação síncrona (em função de ) são necessárias para encontrar um conjunto independente máximo? Quantas rodadas são necessárias para encontrar um conjunto independente com pelo menos nós? [A resposta para essas duas perguntas é exatamente , descoberta em 1986–2008.]{ 1 , 2 , . . . , poli ( n ) } n n / 1000 Θ ( log n )n{1,2,...,poly(n)}nn/1000Θ(logn)

Ou seja, as pessoas geralmente estudam problemas que são completamente triviais da perspectiva de algoritmos centralizados e têm muito pouco em comum com qualquer tipo de supercomputação ou computação de alto desempenho. O ponto certamente não é acelerar a computação centralizada usando mais processadores, ou algo assim.

O objetivo é construir uma teoria da complexidade classificando problemas fundamentais de gráfico de acordo com sua complexidade computacional (por exemplo, quantas rodadas síncronas são necessárias; quantos bits são transmitidos). Problemas como conjuntos independentes em ciclos podem parecer inúteis, mas eles desempenham um papel semelhante ao 3-SAT na computação centralizada: um ponto de partida muito útil para as reduções. Para aplicações concretas do mundo real, faz mais sentido examinar dispositivos como roteadores e comutadores em redes de comunicação, em vez de computadores em grades e clusters.

Essa crença falsa não é totalmente inofensiva. Na verdade, torna bastante difícil vender trabalhos relacionados à teoria de algoritmos distribuídos para o público em geral do TCS. Recebi relatórios hilários de árbitros de conferências do TCS ...


11
No que diz respeito à computação, eu não diria que essa não é uma crença falsa, mas sim desatualizada. Além dos processadores multicore, a computação distribuída em pequena escala era um caso trivial do de alto desempenho (pelo que sei pelo menos). Com os núcleos sendo "computadores", mas em uma distância tão pequena, sem rede entre eles, surgem novos problemas. Concordo, no entanto, que algoritmos distribuídos devem ser usados ​​para m> = 2 nós.
chazisop

Então você está apenas dizendo que as pessoas confundem computação paralela com computação distribuída?
Sasho Nikolov

Penso que sua afirmação não se aplica a cientistas da computação teóricos, embora possa se aplicar a praticantes sem formação teórica. Conforme apontado por Sasho Nikolov, as pessoas que trabalham em campo conhecem muito bem as diferenças entre computação paralela e distribuída. O problema que surge em clusters, grades, nuvens etc depende estritamente do contexto. Por exemplo, não assumimos falhas ao usar um cluster ou uma nuvem, mas o fazemos para grades. E assim por diante.
Massimo Cafaro

Além disso, para esta comunidade científica, algoritmos distribuídos são algoritmos para problemas como os comumente encontrados nos livros de Nancy Lynch, Hagit Attiya e Jennifer Welch e Gerard Tel, para citar alguns. E, como tal, esses algoritmos são projetados para um modelo teórico específico de computação distribuída e analisados ​​conforme necessário em termos dos recursos utilizados (complexidade de tempo, complexidade de mensagens, complexidade de bits, número de rodadas, etc.).
Massimo Cafaro

@MassimoCafaro: É claro que as pessoas que trabalham no campo da computação distribuída sabem o que é computação distribuída. No entanto, minha experiência é que os cientistas teóricos da computação em geral não sabem o que é computação distribuída.
Jukka Suomela

20

Fundamental, mas comum quando lidamos pela primeira vez com notações assintóticas. Considere a seguinte "prova" da relação de recorrência e :T ( 1 ) = 1T(n)=2T(n/2)+O(nlogn)T(1)=1

Provamos por indução. Para o caso base, vale para . Suponha que a relação seja válida para todos os números menores que ,nn=1n

T(n)=2T(n/2)+O(nlogn)=2O(n/2logn/2)+O(nlogn)=O(nlogn/2)+O(nlogn)=O(nlogn)

QED (é?)


16
Eu já vi estudantes fazendo isso. Essa é uma das armadilhas de abusar da notação e escrever vez de . f ( x ) O ( g ( x ) )f(x)=O(g(x))f(x)O(g(x))
Aaron Roth

Eu vi pesquisadores em ciência da computação teórica fazer variantes deste erro também;)
Jeremy

12

Até recentemente, eu pensava que toda máquina de Turing fita múltipla que é executada no tempo pode ser simulada por uma máquina de Turing inconsciente de duas fitas no tempo da seguinte maneira sentido:T ( n ) M o O ( T ( n ) log T ( n ) )MT(n)MoO(T(n)logT(n))

  • o movimento das de depende apenas do comprimento da entradaMo
  • para todas as entradas do mesmo comprimento, para ao mesmo tempo (que é ). Θ ( T ( n ) log T ( n ) )MoΘ(T(n)logT(n))

(veja este post do rjlipton, por exemplo)

Bem, a segunda linha não se mantém em geral, se . Precisamos de uma função de ordem totalmente construtível no tempo (consulte esta pergunta para a definição de funções (totalmente) construtíveis no tempo) ou precisamos permitir que execute infinitamente time (permitimos que seja executado após atingir o estado de aceitação no tempo ). O problema é que, para construtível pelo tempo geral , não podemos "medir" etapas no tempo menos que .Θ ( T ( n ) log T ( n ) ) M o M o O ( T ( n ) log T ( n ) ) T : NN Θ ( T ( n ) log T ( nEXPTIMENEXPTIMEΘ(T(n)logT(n))MoMoO(T(n)logT(n))T:NNO ( T ( n ) log T ( n ) ) E X P - T I M E = N E X P - T I M EΘ(T(n)logT(n))O(T(n)logT(n))EXPTIME=NEXPTIME

A prova desta afirmação é muito semelhante à prova a resposta da Q1 aqui , portanto, nós só vai dar as ideias-chave.

Tome um problema arbitrário , L { 0 , 1 } . Então existe um k N , st L pode ser resolvido por um NDTM M em 2 n k etapas. Podemos supor que a cada passo M entre no máximo dois estados diferentes para simplificar. Em seguida, defina a função f ( n ) = { ( 8 n + 2LNEXPTIMEL{0,1}kNLM2nkM É possível provar quefé construtível no tempo.

f(n)={(8n+2)2if (first logn+1k bits of bin(n))L8n+1else
f

Agora suponha que alguma máquina de Turing inconsciente funcione no tempo . Então g é totalmente construtível no tempo.g(n)=Θ(f(n)logf(n))g

Agora, o seguinte algoritmo resolve :L

  • na entrada , seja n o número com representação binária x 00 0 ( | x | k - 1 zeros). Segue que x = ( primeiro k xnx000|x|k1.x=(first logn+1k bits of bin(n))
  • g(n)g(n)g(n)xLxLng

LLNEXPTIMEEXPTIME=NEXPTIME


11

Aqui estão meus dois centavos:

RLRPM

  • M1/2
  • M1

Além disso, a máquina sempre para.

A definição está correta? (Não)


9

fg1nf(n)g(n)f(n+1)=o(g(n))

NTIME(f(n))NTIME(g(n))

NTIME(g(n))NTIME(f(n))f(n)g(n)NTIME(f(n))NTIME(g(n))f,gf(n+1)=o(g(n))f(n)g(n)

NTIME(f(n))NTIME(g(n))f,gf(n+1)=o(g(n))

f(n)={n+1n odd(n+1)3else
g(n)=f(n+1)2fgf(n+1)=o(g(n))LNTIME((n+1)3)NTIME((n+1)2){0,1}
L1={0x10x20xn;  x1x2xnL}.

L1NTIME(f(n))L1NTIME(g(n))LNTIME((n+1)2)L1NTIME(f(n))NTIME(g(n))


9

NPUPNPRPUPNPRUPNP=UPNPRPPromiseUP

UPLxLUSUSUPcoNPUS


o que significa 'a propriedade semântica que em todas as instâncias'?
T ....

11
@ 777: propriedade semântica significa: não pode ser verificado diretamente a partir da estrutura (também conhecida como sintaxe) do próprio TM / algoritmo. A frase faz mais sentido se você continuar-lo após a vírgula, ou seja: a propriedade que: "em todas as instâncias, há no máximo uma testemunha"
Joshua Grochow

-2

μX{X=μ}


9
Essa é certamente uma crença falsa comum entre os estudantes de ciência da computação teórica, mas não é tão comum entre os pesquisadores de ciência da computação .
Jeffε
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.