Aqui está uma abordagem que, espero, deve fornecer uma aproximação de fator multiplicativo, com tempo de execução polinomial.
Deixei eu 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ção p, Onde 0 < p < 1.
Escolha um idioma regular R de modo que, grosso modo, R é um subconjunto aleatório de { 0 , 1}n de tamanho aproximadamente p2n (ou seja, | R | ≈p2n)
Verifique se L ∩ Rnã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 de p. Isso fornece algumas informações que permitem aproximar| L |.
Em particular, se | L | =m, então esperamos
Pr [ L ∩ R = ∅ ] = ( 1 - p)m≈e- p m.
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 / mpp
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.Rh : { 0 , 1}m→ { 0 , 1 , 2 , … , k - 1 }y∈ { 0 , 1 , ... , k - 1 }R = { x ∈ { 0 , 1}n: h ( x ) = y}k = ⌈ 1 / p ⌉Rh
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.nML ( M)M
(Essa construção pode lembrá-lo do teorema de Vazirani-Vazirani sobre SAT inequívoco.)