Por que usar linguagens na teoria da complexidade

10

Estou apenas começando a entrar na teoria da computação, que estuda o que pode ser calculado, com que rapidez, usando quanta memória e com qual modelo computacional.

Eu tenho uma pergunta bem básica, mas realmente espero que alguns de vocês possam me ajudar a entender o conceito por trás disso:

Por que tudo está centrado na noção e definição de IDIOMAS (ou seja, linguagens regulares e linguagens livres de contexto)? E como eles se relacionam e descrevem a complexidade de um algoritmo e os possíveis modelos computacionais para resolvê-los?

Eu li esses tipos de perguntas relacionadas:

mas ainda não tenho uma resposta para minhas dúvidas, pois elas fornecem uma justificativa prática de por que são importantes (o que eu entendo), mas não me ajudam a entender por que a teoria da complexidade se baseia nelas.

Matteo
fonte
11
Isso não é coberto por nossas perguntas de referência ?
Raphael
@Raphael - Obrigado por me indicar essa pergunta, é uma ótima referência! Estou lendo agora, mas no momento acredito que isso possa ser um adendo à pergunta cs.stackexchange.com/questions/13669/… . Não me parece que é já respondida, por favor me avise se você fina de outra forma
Matteo
3
Uma linguagem é apenas um conjunto de cadeias de comprimento finito, que é o mesmo que uma função que mapeia cadeias finitas para 1 ou 0. Portanto, você está realmente perguntando "por que há tanta teoria da complexidade sobre problemas de decisão" e a resposta é que é o tipo mais simples (não trivial) de tarefas computacionais e, muitas vezes, tarefas computacionais mais complicadas podem ser reduzidas a problemas de decisão.
Sasho Nikolov

Respostas:

10

É porque as línguas são a melhor (apenas?) Maneira de formalizar o conceito de "problema".

Um algoritmo (Turing Machine) tem desempenho, que expressamos através da complexidade do grande O. Um problema (idioma) pertence a uma classe de complexidade. Estes são geralmente definidos pela existência: se existe uma máquina que aceita uma linguagem que é executada em determinado desempenho (espaço ou tempo), a linguagem pertence à classe de complexidade correspondente.L

Existem algumas razões para isso. O primeiro é que os idiomas são independentes de plataforma. Você não está preocupado se um número inteiro é 32 ou 64 bits ou se as operações de ponto flutuante são executadas em paralelo com outras operações. Essas coisas aumentam o desempenho no nível micro, mas a análise da complexidade está interessada no nível macro. À medida que você escala de 100 a a a entradas, como o desempenho do algoritmo muda? Passa do uso de 1 milhão de células de fita para 1 bilhão, ou de 1 milhão para mais células do que existem átomos no universo?10 9 10 121061091012

A segunda é que as linguagens são apenas uma boa abstração para os dados. Você precisa de algo sobre o qual possa fazer provas, algo que possa modelar formalmente. Codificar sua entrada e saída como uma string significa que agora você está lidando não com bits na memória, mas com objetos matemáticos com propriedades específicas. Você pode argumentar sobre eles e provar provas sobre eles em um sentido formal e muito simples.

A teoria da complexidade tende a se concentrar nos problemas de decisão porque eles acabam sendo difíceis. Quando a versão de decisão do vendedor ambulante é NP-completa (ou seja, existe um passeio menor que o comprimento ), é óbvio que encontrar o caminho mais curto é mais difícil. Não há tanto foco nos problemas de função / otimização porque ainda há muitas perguntas em aberto e problemas não resolvidos sobre os problemas de decisão mais simples.k

Acho que aqui está o meu desafio para você: encontre uma maneira de descrever matematicamente problemas que não são idiomas. Não sei se os idiomas são especiais, mas acho que eles são a ferramenta mais simples que temos, a mais fácil de lidar.

jmite
fonte
7
Os idiomas certamente não são a única maneira de formular problemas. Por exemplo, você pode formalizar algo como número cromático como uma função, de gráficos a números naturais. E, na verdade, há muito trabalho sobre problemas de função e otimização.
David Richerby
2
É verdade, mas como você lidaria com a complexidade do cálculo do número cromático sem algum conceito de linguagem ou máquina?
jmite
11
Obrigado pela sua resposta, entendi seu ponto. No entanto, ainda tenho duas perguntas: 1) o fato de estarmos usando idiomas não afetará os resultados sobre a complexidade ou a decidibilidade de um problema? ou seja, um problema pode ser solucionado na aritmética de ponto flutuante, mas não na aritmética inteira (ou seja, programação inteira)? 2) Como fazemos esse mapeamento de qualquer tipo de dados para um idioma único que os descreva todos (já que queremos avaliar a complexidade de um problema e abstrair a partir da entrada específica)? Obrigado novamente!
Matteo
3
@ jmite Você precisa de uma máquina, sim, mas não necessariamente de um idioma.
Raphael
2
@ Rafael Muitas classes de complexidade que geralmente são definidas em termos de tempo de execução das máquinas podem ser caracterizadas em termos de complexidade descritiva.
precisa saber é o seguinte
7

Existem duas respostas básicas para sua pergunta:

  1. Há mais na teoria da complexidade do que nas linguagens, por exemplo, classes de funções, complexidade aritmética e as subáreas de algoritmos de aproximação e inadequação.

  2. Razões históricas: um dos artigos básicos da teoria da computabilidade discutia o Entscheidungsproblem de Hilbert (uma forma do problema da parada).

Infelizmente, não sei muito sobre o último, mas deixe-me expandir sobre o primeiro.

Complexidade além das línguas

Toda classe de complexidade computacional vem com uma classe de função associada . Por exemplo, a classe P de todos os problemas decidíveis em tempo polinomial está associada ao FP, a classe de todas as funções computáveis ​​em tempo polinomial. FP é importante, uma vez que é utilizado para definir NP-dureza: uma língua é NP-se difícil para cada idioma em NP existe uma função em FP tais que sse . Outra classe de funções de complexidade, #P , está relacionada à chamada hierarquia polinomial via teorema de Toda .M f M x M f M ( x ) LLMfMxMfM(x)L

A complexidade do circuito aritmético (ou teoria da complexidade algébrica ) lida com a complexidade da computação de vários polinômios. As classes de complexidade importantes aqui são VP e VNP, e a teoria da complexidade geométrica é um projeto importante que tenta separar VP e VNP (e posteriormente P e NP) usando a geometria algébrica e a teoria da representação.

Outro exemplo importante de complexidade algébrica é a multiplicação rápida de matrizes. Aqui a questão básica é com que rapidez podemos multiplicar duas matrizes ? Perguntas semelhantes perguntam com que rapidez podemos multiplicar números inteiros, com que rapidez podemos testar a primalidade de números inteiros (este é um problema de decisão!) E com que rapidez podemos fatorar números inteiros.

A otimização convexa lida com problemas de otimização que podem ser resolvidos (ou quase resolvidos) com eficiência. Exemplos são programação linear e programação semidefinida, ambos com algoritmos eficientes. Aqui estamos interessados ​​tanto na solução ótima quanto na própria solução ideal. Como geralmente há mais de uma solução ótima, o cálculo de uma solução ótima não é bem representado como um problema de decisão.

Aproximabilidade é a área que estuda quão boa podemos obter para um problema de otimização em tempo polinomial. Considere, por exemplo, o problema clássico da cobertura de conjuntos: dada uma coleção de conjuntos, quantos deles precisamos para cobrir todo o universo? Encontrar o número ideal é difícil para o NP, mas talvez seja possível calcular uma aproximação? Algoritmos de aproximação é a subárea que estuda algoritmos para calcular aproximações, enquanto a inadequação estuda os limites dos algoritmos de aproximação. No caso específico de Set Cover, temos um algoritmo que fornece uma aproximação (o algoritmo ganancioso) e é difícil para o NP fazer melhor.lnn

Yuval Filmus
fonte
3

Vejamos essa questão da perspectiva da teoria das categorias. Os problemas de decisão (ou idiomas) corresponderiam aos objetos de uma categoria e as reduções permitidas entre dois problemas corresponderiam aos morfismos (setas) de uma categoria.

Falar sobre idiomas tem a vantagem de que a equivalência de idiomas está bem definida (nomeadamente pela igualdade extensional). Dois problemas não relacionados podem levar ao mesmo idioma e, em seguida, podemos considerá-los como equivalentes. Se quisermos falar sobre problemas isomórficos, teremos que definir os morfismos permitidos entre dois problemas. Mas os morfismos permitidos dependem da classe de complexidade real em consideração, o que torna essa abordagem menos adequada para comparar diferentes classes de complexidade.

A noção de problemas isomórficos será normalmente mais grossa que a noção de idiomas equivalentes, ou seja, dois problemas podem ser isomórficos, mesmo que seus idiomas associados não sejam equivalentes. O pior é que muitas vezes existem noções razoáveis ​​diferentes para os morfismos permitidos, que apenas concordam com relação aos isomorfismos permitidos. O foco nos idiomas permite adiar esses problemas até que tenhamos vontade de falar sobre algumas noções razoáveis ​​diferentes de redução (como redução de Karp x redução de Cook).

Thomas Klimpel
fonte
Isso não parece responder à pergunta. Ainda se pode falar de morfismos entre problemas, independentemente do que se use como objetos na categoria correspondente.
David Richerby
@DavidRicherby O ponto que eu queria mostrar é que pregar os morfismos apropriados é mais desafiador do que pregar os objetos apropriados (= idiomas). (Especialmente porque normalmente há mais de uma noção apropriada de morfismo.) Sem morfismos, você não pode falar sobre problemas isomórficos (ou algoritmos). No entanto, os idiomas oferecem uma maneira de você ainda falar sobre equivalência de problemas. Talvez eu não tenha explicado isso adequadamente, mas (para mim) esse é um bom motivo para "usar linguagens na teoria da complexidade".
Thomas Klimpel