Seja
Estou procurando uma compilação NFA pequena para a linguagem de concatenação de duas palavras do comprimento que são diferentes em termos de índice, ou seja,
Observe que, como é fixo, , e é regular como idioma finito.
O DFA trivial para o idioma contém estados +1 e apenas "lembra" quais letras foram exibidas durante as primeiras k letras; no entanto, se k = o (| \ Sigma |) , podemos criar um NFA significativamente menor.
Um NFA "simples", pois seria do tamanho (mais precisamente, ):
Tome um conjunto universal (isto é, um conjunto de vetores modo que, para cada vetor e índices, existe um vetor tal que , ou seja, se olharmos apenas para esses índices em , encontraremos ). Tais famílias de tamanho são conhecidas.
Pensamos em cada vetor como uma função , onde .
Crie um NFA da seguinte maneira:
A partir do estado inicial criar um -transition para um novo estado para qualquer . Denote esse estado por .
A partir de cada construa um caminho de estados que aceite todas as palavras cujas primeiras letras sejam mapeadas por a 0 e as últimas letras serão mapeadas por a 1.
Basicamente, a idéia é que o conjunto universal nos permita particionar as letras que podem aparecer nos primeiros símbolos do resto, e obtemos todas as palavras no idioma, pois deve haver um vetor correspondente que particiona corretamente.
Então, as perguntas são:
Qual é o tamanho do menor NFA para ?
Essa construção é ideal?
Qual limite inferior podemos provar para esse tamanho de autômato?
Respostas:
Atualização: isso não responde à pergunta que o pôster original estava procurando e não ajuda no caso geral em que , portanto a pergunta permanece em aberto.| Σ | >2
Aqui está uma construção mais simples, mostrando que, no caso em que , declara suficiente, e na verdade você pode reconhecer o idioma com um DFA com esse muitos estados.Σ = { 0 , 1 } O ( k ⋅22 k)
Vamos começar analisando o idioma do complemento:
Observe que isso pode ser reconhecido por um NFA comestados. O NFA adivinha primeiro um símbolo , depois aceita todas as cadeias onde .2k2| Σ | Eu x u ⋅ v vocêEu=vEu= x
Converta isso em um DFA usando a construção de subconjunto padrão. Obtemos um DFA com estados. Agora podemos calcular seu complemento, que é outro DFA com o mesmo número de estados que reconhece . Por ser um DFA, também é automaticamente um NFA.≤2| Σ | k+1k euk
Isso supera sua construção para o caso em que , mas, de outro modo, leva um NFA maior que o seu esquema. No entanto, pensei que poderia ser interessante, tanto porque é muito simples e porque na verdade fornece um DFA (não apenas um NFA) para reconhecer seu idioma .| Σ | =2 euk
fonte