Em seu livro Computational Complexity , Papadimitriou define FNP da seguinte forma:
Suponha que seja uma linguagem no NP . Pela Proposição 9.1, há um decidível em tempo polinomial, relação polinomialmente equilibrada tal que para todas as cadeias : Há uma seqüência com se e somente se . O problema da função associado a , denotado , é o seguinte problema computacional:R L x y R L ( x , y ) x ∈ L L F L
Dado , encontre uma string tal que se essa string existir; se essa string não existir, retorne "no".y R L ( x , y )
A classe de todos os problemas de função associados como acima à linguagem no NP é chamada de FNP . FP é a subclasse resultante se considerarmos apenas problemas de função no FNP que podem ser resolvidos em tempo polinomial.
(...)
(...), chamamos um problema de no FNP total se, para cada string houver pelo menos um tal que . A subclasse de FNP que contém todos os problemas de funções totais é designada TFNP . y R ( x , y )
Em um diagrama de venn na visão geral do capítulo, Papadimitriou implica que FP TFNP FNP .⊆
É difícil entender por que exatamente isso sustenta que FP TFNP, já que os problemas no FP não precisam ser totais por si só.
Para entender melhor, eu tenho vasculhado a literatura para encontrar uma definição à prova d'água de FP , FNP e tipos, sem sucesso.
Na minha opinião (humilde), acho que há pouco (correto!) Material didático desses tópicos.
Para problemas de decisão, as classes são conjuntos de idiomas (isto é, conjuntos de strings).
Quais são exatamente as classes para problemas de função? Eles são conjuntos de relações, línguas, ...? O que é uma definição sólida?
fonte
Respostas:
O comentário de Emil Jerabek é um bom resumo, mas eu gostaria de salientar que existem outras classes com definições mais claras que capturam mais ou menos o mesmo conceito e esclarecem a relação entre todas essas coisas.
[Aviso: embora acreditei ter acertado as definições, algumas das coisas abaixo refletem minhas preferências pessoais - tentei esclarecer onde ficava.]
No mundo determinístico, uma classe de função é apenas uma coleção de funções (no sentido matemático usual da palavra "função", isto é, um mapa ). Ocasionalmente, queremos permitir "funções parciais", cuja saída é "indefinida" para determinadas entradas. (Equivalentemente, funções definidas em um subconjunto de vez de todas elas.)Σ *Σ∗→Σ∗ Σ∗
Infelizmente, existem duas definições diferentes para flutuando, e até onde eu sei, elas não são equivalentes (embora sejam equivalentes "moralmente").FP
No mundo não determinístico, as coisas ficam um pouco engraçadas. Lá, é conveniente permitir "funções parciais e com vários valores". Seria natural chamar isso de relação binária , isto é, um subconjunto de . Mas, do ponto de vista da complexidade, muitas vezes é filosófica e mentalmente útil pensar nessas coisas como "funções não determinísticas". Acho que muitas dessas definições são esclarecidas pelas seguintes classes (cujas definições são completamente padronizadas, se não muito conhecidas):Σ∗×Σ∗
x x x { ( x , y ) : y é de saída por um ramo do cálculo na entrada x }NPMV : A classe de "funções parciais com vários valores" computáveis por uma máquina não determinística em tempo polinomial. O que isto significa é que existe uma máquina não determinística politempo e, na entrada , em cada ramificação não determinística, ela pode optar por aceitar e produzir alguma saída, ou rejeitar e não produzir saída. A saída "com vários valores" na entrada é então o conjunto de todas as saídas em todas as ramificações não determinísticas quando fornecido como entrada. Observe que este conjunto pode estar vazio; portanto, como uma "função com valores múltiplos", isso pode ser apenas parcial. Se pensarmos nisso em termos de relações binárias, isso corresponde à relação .x x x {(x,y):y is output by some branch of the computation on input x}
N P M V xNPMVt : total de "funções" em , ou seja, em cada entrada , pelo menos um ramo aceita (e, portanto, produz uma saída, por definição)NPMV x
N P M V Σ ∗NPSV : funções de valor único (potencialmente parcial) em . Há alguma flexibilidade aqui, no entanto, em que várias ramificações podem aceitar, mas se qualquer ramificação aceitar, todos os ramos aceitantes devem ter a garantia de obter a mesma saída (para que realmente tenha um valor único). No entanto, ainda é possível que nenhum ramo aceite, portanto a função é apenas uma "função parcial" (isto é, não definida em todos os ).NPMV Σ∗
N P S V Σ * → Σ * N P S V t = F P N P ∩ C O N PNPSVt : funções totais de valor único em . Essas realmente são funções, no sentido usual da palavra, . É um exercício não muito difícil ver que (usando Def 1 para FP acima).NPSV Σ∗→Σ∗ NPSVt=FPNP∩coNP
Quando falamos sobre funções potencialmente com vários valores, falar sobre contenção de classes de complexidade não é mais útil: incondicionalmente, simplesmente porque não contém quaisquer "funções" com vários valores, mas funciona. Em vez disso, falamos sobre "contenção-c", denotado . Uma função (potencialmente parcial, com vários valores) refina uma função (potencialmente com valores múltiplos parciais) se: (1) para cada entrada para a qual produz alguma saída, o mesmo acontece com e (2) as saídas de são sempre um subconjunto das saídas deNPMV⊈NPSV N P M V ⊆ c f g x g f f g N P M V N P S V N P M V ⊆ c N P S VNPSV NPMV ⊆c f g x g f f g . A pergunta correta é, então, se todos os "função" tem um refinamento. caso, escrevemos .NPMV NPSV NPMV⊆cNPSV
Para não precisar escrever coisas como "Se todo problema de função (resp., ) tiver uma solução em (resp., acordo com o acima) definição), então ... "neste contexto, utiliza-se a definição 2 de , que é:FNP TFNP PF FP FP
A seguir, como essas várias definições se relacionam: (definição 2, que é o que você deve assumir porque está em um contexto em que está sendo comparado com ) é equivalente para . (def 2) é equivalente a (def 1).FNP⊆FP FNP NPMV⊆cPF TFNP⊆FP NPMVt⊆cFP
fonte
Além da extensa resposta de Joshua, quero acrescentar as seguintes definições de Elaine Ruch, seu Automata, Computability and Complexity .
A partir dessas definições, fica claro que . Ela também fala brevemente sobre problemas fora do .F N PFP⊆TFNP⊆FNP FNP
Para mim, esse tem sido o recurso mais satisfatório que consiste em uma única página que encontrei desde há muito tempo.
fonte