Em sua resposta sobre cstheory.SE, Lev Reyzin me direcionou para a tese de Robert Schapire que aprimora o vínculo com as consultas de associação de na seção 5.4.5. O número de consultas de contra-exemplo permanece inalterado. O algoritmo que Schapire usa difere no que faz após uma consulta de contra-exemplo.O(n2+nlogm)
Esboço da melhoria
No nível mais alto, Schapire força do algoritmo de Angluin a ter a condição extra de que para um fechado ( S , E , T ) e cada s 1 , s 2 ∈ S se s 1 ≠ s 2 então r O w ( s 1 ) ≠ r o w ( s 2 ) . Isso garante que | S |(S,E,T)(S,E,T)s1,s2∈Ss1≠s2row(s1)≠row(s2) e também tornatrivial a propriedade deconsistênciado algoritmo de Angluin. Para garantir isso, ele precisa lidar com os resultados de um contra-exemplo de maneira diferente.|S|≤n
Dado um contra- , Angluin simplesmente adicionado z e todos os seus prefixos para S . Schapire faz algo mais sutil, em vez de adicionar um único elemento e de E . Esse novo e fará com que ( S , E , T ) não seja fechado no sentido de Angluin e a atualização para fechar com a introdução de pelo menos uma nova sequência de caracteres em S , mantendo todas as linhas distintas. A condição em e é:zzSeEe(S,E,T)Se
∃s,s′∈S,a∈Σs.trow(s)=row(s′a)ando(δ(q0,se))≠o(δ(q0,s′ae))
Onde é a função de saída, q 0 é o estado inicial e δ a regra de atualização do DFA verdadeiro 'desconhecido'. Em outras palavras, e deve servir como testemunha para distinguir o futuro de s de s ' a .oq0δess′a
Para descobrir isso de z fazemos uma busca binária para descobrir uma sub r i tal que z = p i r i e 0 ≤ | p i | = i < | z | de modo que o comportamento de nossa máquina conjecturada seja diferente com base em um caractere de entrada. Em mais detalhe, deixamos s i ser a string correspondente ao estado alcançado em nossa máquina de conjectura, seguindo p i . Usamos a pesquisa binária (é aqui que o log mezriz=piri0≤|pi|=i<|z|sipilogmko(δ(q0,skrk))≠o(δ(q0,sk+1rk+1)rk+1eE