Seja um NFA acíclico.
Como é acíclico, é finito.
Podemos calcularem tempo polinomial?
Se não, podemos aproximar?
Observe que o número de palavras não é igual ao número de caminhos aceitantes em , que é facilmente computável.
Deixe-me mencionar uma abordagem óbvia que não funciona: converter o NFA em um DFA (que também será acíclico) e, em seguida, conte o número de caminhos de aceitação no DFA. Isso não resulta em um algoritmo de tempo polinomial, pois a conversão pode causar uma explosão exponencial no tamanho do DFA.
Respostas:
Aqui está uma abordagem que, espero, deve fornecer uma aproximação de fator multiplicativo, com tempo de execução polinomial.
Deixeieu ser um idioma comum que seja um subconjunto de { 0 , 1}n , por exemplo, L = L ( M) ∩ { 0 , 1}n . Vamos tentar calcular o tamanho aproximado deeu .
Em um nível alto, nossa abordagem para aproximar| L | será algo como isto:
Escolha uma fraçãop , Onde 0 < p < 1 .
Escolha um idioma regularR de modo que, grosso modo, R é um subconjunto aleatório de { 0 , 1}n de tamanho aproximadamente p2n (ou seja, | R | ≈p2n )
Verifique seL ∩ R não está vazio. Observe que essa verificação pode ser feita em tempo polinomial.
Execute repetidamente as etapas 1 a 3 para vários valores dep . Isso fornece algumas informações que permitem aproximar| L | .
Em particular, se| L | =m , então esperamos
Portanto, se você escolher repetir as etapas 1 a 3 várias vezes, deve esperar ver um cruzamento vazio cerca de 37% das vezes. Se você vir uma interseção vazia significativamente mais frequentemente do que isso, aumente e tente novamente. Se você vir uma interseção vazia com menos frequência, poderá diminuir tentar novamente.p = 1 / m p p
Dessa forma, usando algo como pesquisa binária, você poderá aproximarpara dentro de um fator de aproximação multiplicativo.| L |
Você ainda precisará escolher uma maneira de escolher para que seja regular, mas também se comporte como um subconjunto aleatório. Existem muitas possibilidades, mas uma boa maneira seria escolher um hash 2-universal aleatório , escolha aleatoriamente e deixe . Escolher fornece um conjunto aleatório de aproximadamente o tamanho certo e, como é 2-universal, todas as matemáticas acima devem funcionar corretamente.R h : { 0 , 1}m→ { 0 , 1 , 2 , … , k - 1 } y∈ { 0 , 1 , ... , k - 1 } R = { x ∈ { 0 , 1}n: h ( x ) = y} k = ⌈ 1 / p ⌉ R h
Isso deve resolver seu problema no caso em que todas as seqüências no NFA têm o mesmo comprimento, digamos . Se eles tiverem comprimentos variados, você poderá lidar com cada comprimento possível separadamente. Como é acíclico, o comprimento máximo de qualquer sequência em é no máximo o número de estados em , portanto, isso não aumenta muito o tempo de execução.n M L ( M) M
(Essa construção pode lembrá-lo do teorema de Vazirani-Vazirani sobre SAT inequívoco.)
fonte
Suponha que você possa contar em tempo polinomial o número de palavras de um idioma fornecido por um NFA acíclico. Nesse caso, considerando dois NFAs acíclicos e , é possível calcular em tempo polinomial o cardinal (resp. ) do idioma de (resp. ). Por um produto direto (preservando a aciclicidade), você também pode calcular em tempo polinomial o cardeal da interseção dessas duas línguas. Os dois autômatos aceitam o mesmo idioma iff . Portanto, você pode testar a igualdade de duas linguagens finitas fornecidas pelos autômatos acíclicos no polinômio, que é conhecido por ser um problema completo do NP. Então, a menos queUMA1 UMA2 n1 n2 UMA1 UMA2 n3 n1=n2=n3 P= NP , você não pode resolver seu problema em tempo polinomial.
fonte