A maioria dos itens abaixo é de Parsing Theory itens de Sippu e Soisalon-Soininen.
Seja o conjunto de estados do DFA. Seja T o alfabeto de entrada. Let | M | = O ( | T | ⋅ | Q | ) é o tamanho da máquina. O Exercício 3.40 fornece um algoritmo O ( | T | ⋅ | Q | 2 ) para minimização de estado. Como a Wikipedia descreve , o algoritmo de Hopcroft tem um tempo de execução de O ( | T | ⋅ | Q | ⋅ logQT|M|=O(|T|⋅|Q|)O(|T|⋅|Q|2) e o algoritmo de Moore tem um tempo de execução de O ( | T | 2 ⋅ | Q | ) .O(|T|⋅|Q|⋅log|T|)O(|T|2⋅|Q|)
O teorema 3.30 afirma que a construção do subconjunto pode ser feita em produzindo um autômato do tamanho O ( 2 | T | + log | Q | ) (na verdade, se o autômato resultante tem | T ′ | estados, o tempo de execução é ( | T ′ | + | T | ⋅ | MO(2|T|+log|T|+log|Q|)O(2|T|+log|Q|)|T′|(|T′|+|T|⋅|M|)⋅|Q|) As duas reversões e a segunda determinação são, portanto, irrelevantes no tempo de execução; portanto, o tempo de execução assintótico do algoritmo de Brzozowski é o mesmo da construção do subconjunto.
Isso significa que, na pior das hipóteses, o algoritmo de Brzozowski é exponencialmente mais lento que os outros três algoritmos. Observe que o pior caso realmente ocorre: o exemplo clássico da NFA para o idioma tem k + 1 estados e seu DFA mínimo correspondente tem O ( 2 k ) , enquanto o inverso da NFA é determinístico, portanto, executar o algoritmo de Brzozowski nesse NFA invertido aciona o pior comportamento possível.(a|b)∗akk+1O(2k)
No entanto, se a construção do subconjunto gerar um autômato de tamanho , então o tempo de execução também é O ( | T | 2 ⋅ | Q | 2 ) , o que geralmente ocorre nas entradas da vida real. Além disso, se o cuidado adequado for tomado ao calcular o fechamento de um estado, isso poderá ser feito muito mais rapidamente na maioria dos casos (ou seja, nos casos em que o fechamento é pequeno), economizando um fator | T ||T′|=O(|T|)O(|T|2⋅|Q|2)|T|na prática (pelo mesmo motivo pelo qual os fechamentos transitivos podem ser calculados rapidamente em exemplos do mundo real). Além disso, se os autômatos de entrada e intermediários são esparsos, o que significa que os estados têm poucas transições, então um fator é salvo, o que fornece um tempo de execução O ( | T | ⋅ | Q | ) em entradas 'boas'.|Q|O(|T|⋅|Q|)
Infelizmente, não estou familiarizado o suficiente com os algoritmos de Hopcroft ou Moore para fornecer uma análise de seus tempos de execução em casos típicos. A Wikipedia fala sobre um tempo de execução em alguns casos, o que tornaria os três algoritmos comparáveis.O(|T|loglog|T|)