Изменения

Перейти к: навигация, поиск
Нет описания правки
== Алгоритм Томпсона ==
Данный алгоритм используется для преобразования НКА в ДКА.
Для построения используются обход Смысл алгоритма состоит в ширину графа переходов.Псевдокод:замене множества из <Цикл по всем состояниямtex>* n<Для всех переходов по одинаковым символам/tex>** <Объединить все состояниясостояний НКА, куда они ведут в одно>** множеством из <Если такого состояния нет в новом автоматеtex>*** 2^n<Добавить/tex>** подмножеств его состояний. Но не все из <Иначеtex>*** 2^n<Направить все переходы на него/tex>состояний будут присутствовать в ДКА, ввиду недостижимости многих из них, поэтому в алгоритме используется обход в ширину.
Вначале в очередь помещается множество состоящее только из стартового состояния НКА <tex>{q_0}</tex>.Затем из очереди изымается очередное множество <tex>P</tex> {{---}} новое состояние ДКА. Функция перехода строится по следующему правилу: <tex>\delta_D(P, c) = \bigcup_{q_i \in P}\delta_N(q_i, c)</tex>.<br>В результате <tex>\delta_D(P, c)</tex> задаст новое состояние <tex>Q</tex> автомата. Если <tex>Q</tex> еще нет в ДКА, тогда мы помещаем <tex>Q</tex> в очередь.Так как <tex>|Q_N|</tex> - конечна, а <tex>|Q_D| \le 2^{|Q_N|}</tex>, то алгоритм завершится за конечное число шагов. Отсюда же для реализации можно использовать AVLполучается верхняя оценка на время работы алгоритма {{---деревья}} в худшем случае это <tex>O(2^n)</tex>.
Анонимный участник

Навигация