Classes de complexidade relacionadas à listagem de todas as soluções?

15

Eu estava lendo uma pergunta no Stack Overflow perguntando se era NP- difícil listar todos os ciclos simples em um gráfico contendo um nó específico e me ocorreu que eu não conseguia pensar em nenhuma classe de complexidade existente que fosse adequada para falando sobre problemas no formulário "liste todas as soluções para esse problema". A classe NP, em certo sentido, consiste em problemas que perguntam se existe pelo menos uma solução, a classe FNP pede para produzir uma única solução e a classe #P pede para contar quantas soluções existem, mas nenhuma delas lida com a complexidade. enumerar exaustivamente todas as soluções possíveis.

Existe uma classe de complexidade para descrever problemas com a forma "dado um predicado computável em tempo polinomial e uma string x , enumere todos os y para os quais P ( x , y ) é verdadeiro sujeito a [inserir alguns restrições de complexidade apropriadas]? " Entendo que pode ser complicado definir as restrições, uma vez que o número de soluções pode ser exponencialmente maior que o tamanho da entrada x , embora isso não pareça intransponível.P(x,y)xyP(x,y)x

templatetypedef
fonte
Interessante. Talvez, na prática, muitas instâncias de problemas relevantes geralmente tenham um número exponencial de soluções, se houver. Instâncias para SAT e CLIQUE, em geral, possuem um grande espaço de solução.
chi
3
Aqui está outra ansatz para formalizar isso. Um problema está em X E (para enumerável X) se houver um algoritmo X A com, de modo que A ( x , i ) retorne a i- ésima solução (ou seja , i- y com P ( x , y ) ) wrt alguns pedidos. Observe como isso é semelhante a como algumas vezes define ER. Isso contorna o tamanho do espaço da solução e se concentra em quão difícil é encontrar a próxima solução. O custo total está disponível por soma, é claro. PXEAA(x,i)iIyP(x,y)
Rafael
3
(Eu nunca vi isso definida como uma classe , mas você está ciente do conceito de enumeração com atraso polinomial ?)
@ Rafael Isso pode não ser o que estamos procurando. Por exemplo, se o melhor algoritmo para precisar iterar todas as soluções até encontrar i delas e executar no tempo Θ ( f ( | x | ) ) , a complexidade que estamos procurando é Θ ( f ( | x | ) ) , mas a soma sugeriria complexidade Θ ( f ( | x | ) 2 ) . A(x,i)iΘ(f(|x|))Θ(f(|x|))Θ(f(|x|)2)
Lieuwe Vinkhuijzen
@ RickyDemer Isso é o que eu estava sacudindo dos meus sleaves, não é? É bom saber que existe uma formalização estabelecida.
Raphael

Respostas:

10

O conceito que você está procurando é chamado de complexidade de enumeração , que é o estudo da complexidade computacional de enumerar (listar) todas as soluções para um problema (ou os membros de um idioma / conjunto). Os algoritmos de enumeração podem ser modelados como um processo em duas etapas: uma etapa de pré - computação e uma fase de enumeração com atraso . Ambos os passos têm suas próprias complexidades de tempo e espaço (talvez entropia também). No espírito geral da complexidade, muitas vezes há trocas entre elas a serem consideradas.

A etapa de pré-computação realiza algum trabalho necessário antes da enumeração da primeira solução. Isso pode envolver a localização da solução ou a inicialização de uma grande estrutura de dados que reduzirá o atraso geral entre cada solução.

O atraso é o custo do recurso associado ao cálculo necessário entre soluções enumeradas arbitrárias. Em outras palavras, o atraso é uma medida do espaço e do tempo necessário para produzir a solução após o i t h uma. Problemas cujas soluções demoram O ( 1 ) para cada enumeração têm atraso constante. Um requisito de O ( p o l y ( n ) )i+1thithO(1)O(poly(n)) tempo é dito ter atraso polinomial.

Para o problema de enumeração que você mencionou especificamente na sua pergunta, você deve olhar para a classe e seus irmãos relacionados no ponto 2.1 do "enumeração: Algoritmos e Complexidade", de Johannes Schmidt (Ligado na parte inferior).ENUMNP


Por que nos preocupamos com o tempo e o atraso da pré-computação?

O atraso é muito essencial para entender os verdadeiros meandros dos problemas de enumeração. Enumerando os elementos de (até o tamanho n ) e { x : ϕ ( x ) } onde ϕ ( x ) é uma fórmula booleana (isto é, SAT), ambos levam tempo exponencial. No entanto, enumerando através de Σ Σn{x:ϕ(x)}ϕ(x)Σrequer apenas um atraso constante, pois você pode simplesmente percorrer os elementos em alguma ordem. Pelo que sabemos, o atraso na enumeração de soluções para uma instância 3SAT pode ser exponencial. Nosso trabalho como teóricos da complexidade é captar por que o último problema é fundamentalmente mais difícil (mais complexo) do que o anterior. O atraso faz um bom trabalho em mostrar essa diferença.

Da mesma forma, também precisamos saber quanta pré-computação é feita. Podemos reduzir o atraso de qualquer problema de enumeração para tempo e espaço constantes pré-computando todas as soluções e armazenando-as em uma lista a ser enumerada posteriormente. O desafio é encontrar o melhor equilíbrio entre os dois recursos.

A ordem em que você enumera os elementos também pode influenciar a complexidade. Exigir que os resultados sejam retornados em uma ordem classificada especificada pode exigir que realizemos cálculos adicionais nas duas etapas. Embora situações em que qualquer ordem seja suficiente (desde que cada elemento enumerado seja único) também sejam certamente estudadas.

Até onde eu sei, essas classes normalmente não possuem rótulos concisos (semelhante a e N P ). Não é possível esperar que seja possível fazer isso, pois as classes de complexidade de enumeração estão manipulando em torno de 3 ou mais recursos (pré-computação / tempo total, espaço, atraso e entropia). Existem simplesmente muitas combinações de limites de recursos para distribuir nomes especiais. Isso não torna essas classes menos interessantes e também não impede os pesquisadores de tentar de qualquer maneira.PNP


Recursos

Esta pesquisa (realmente uma tentativa de formalização) deve ajudá-lo a começar. Também prova alguns teoremas básicos da hierarquia.

Enumeração: Algoritmos e Complexidade (Johannes Schmidt, 2009)

https://www.thi.uni-hannover.de/fileadmin/forschung/arbeiten/schmidt-da.pdf

Para uma enumeração de resultados na complexidade da enumeração, confira esta compilação com curadoria de Kunihiro Wasa. Como é categorizado por tipo de problema, você pode encontrar facilmente vários papéis dedicados à enumeração de ciclos de gráficos. Deve ser simples modificar os algoritmos envolvidos para considerar apenas os ciclos com um determinado nó.

http://www-ikn.ist.hokudai.ac.jp/~wasa/enumeration_complexity.html

mdxn
fonte
ΣnO(1)O(1)
11
@j_random_hacker Não acho que seu pensamento esteja errado, embora a resposta real à sua pergunta seja "depende". Os autores desses trabalhos geralmente indicam qual modelo de computação (fita regular TM vs. RAM vs. Word RAM) eles estão usando. Essa opção altera o que pode ser considerado uma operação de tempo constante e o que não pode (como incrementar um número ou gerar saída). Presume-se que essa diferença desapareça assim que seu atraso se tornar polinomial devido à extensa tese de Church Turing.
Mdxn